Object Storage Service (OSS) に保存されているオブジェクトを、ご利用のコンピューター上のローカルディレクトリに同期するために、ossutil で sync コマンドを実行できます。
前提条件
OSS からコンピューターにオブジェクトを同期する前に、以下の要件を満たしていることを確認してください。
権限:ソースバケットに対して
oss:GetObject権限およびoss:ListObjects権限が付与されている必要があります。詳細については、「RAM ユーザーにカスタムポリシーをアタッチする」をご参照ください。ossutil のバージョン: ossutil 1.6.16 以降では、すべてのオペレーティングシステムで
ossutilをバイナリ名として直接使用できます。 以前のバージョンでは、お使いのオペレーティングシステムに固有のバイナリ名を使用する必要があります。 詳細については、「ossutil コマンドリファレンス」をご参照ください。
sync の仕組み
sync コマンドを実行すると、ossutil はソースディレクトリをスキャンし、宛先ディレクトリと比較します。ソース内の各オブジェクトについて、以下のように処理されます。
オブジェクトが宛先に存在しない場合、ダウンロードされます。
オブジェクトがすでに宛先に存在する場合、ossutil は上書きするかどうかを確認するプロンプトを表示します。
上書き動作を制御するには、以下のオプションを使用します。
-f, --force:確認なしで既存のファイルを上書きします。-u, --update:宛先にオブジェクトが存在しない場合、またはソースオブジェクトの最終更新時刻が宛先ファイルよりも新しい場合にのみダウンロードします。これにより、効率的な増分同期が実現されます。
ファイル数の制限
sync コマンドを --delete オプションなしで実行する場合、同期できるファイル数に制限はありません。--delete を指定した場合は、一度に最大 100 万ファイルまで同期できます。この制限を超えると、次のエラーが返されます:over max sync numbers 1000000.
sync と cp の違い
| 動作 | sync | cp |
|---|---|---|
| デフォルトで再帰的 | はい。すべてのオブジェクトおよびサブディレクトリを自動的に含めます。 | いいえ。-r オプションを指定することで、再帰操作が可能になります。 |
| バックアップディレクトリ | --backup-dir オプションをサポートしており、削除前に宛先のみに存在するファイルをバックアップできます。 | サポートされていません。 |
| 特定バージョンのダウンロード | --version-id はサポートされておらず、バージョン管理が有効なバケットにおいて過去のバージョンのオブジェクトを同期することはできません。 | --version-id をサポートしています。 |
これらの違いを除き、sync コマンドと cp コマンドは同様に動作します。cp の詳細については、「オブジェクトのダウンロード」をご参照ください。
コマンド構文
ossutil sync cloud_url file_url
[-f --force]
[-u --update]
[--maxdownspeed <value>]
[--delete]
[--backup-dir <value>]
[--enable-symlink-dir]
[--disable-all-symlink]
[--disable-ignore-error]
[--only-current-dir]
[--output-dir <value>]
[--bigfile-threshold <value>]
[--part-size <value>]
[--checkpoint-dir <value>]
[--range <value>]
[--encoding-type <value>]
[--snapshot-path <value>]
[--include <value>]
[--exclude <value>]
[--disable-crc64]
[--payer <value>]
[-j, --job <value>]
[--parallel <value>]
[--retry-times <value>]パラメーター
| パラメーター | 説明 |
|---|---|
| cloud_url | OSS 内のソースディレクトリの URL です。形式:oss://bucketname/path/。例:oss://examplebucket/exampledir/。値がスラッシュ (/) で終わっていない場合、ossutil は自動的に末尾にスラッシュを追加します。 |
| file_url | ローカルの宛先ディレクトリへのパスです。例:Linux の場合 /localfolder/、Windows の場合 D:\localfolder\。 |
オプション
同期動作
| オプション | 説明 |
|---|---|
| -f, --force | 確認なしで強制的に操作を実行します。デフォルトでは、ossutil は既存のファイルを上書きする前に確認を促します。 |
| -u, --update | 宛先にオブジェクトが存在しない場合、またはソースオブジェクトの最終更新時刻が宛先ファイルよりも新しい場合にのみオブジェクトを同期します。このオプションを使用すると、増分同期を実行でき、最新の状態であるファイルをスキップします。 |
| --delete | ソースに存在しないファイルを宛先から削除し、宛先をソースと完全に一致させます。警告:誤ったデータ損失を防ぐため、このオプションを使用する前にバケットのバージョン管理を有効にすることを推奨します。--delete を指定した場合、一度に最大 100 万ファイルまで同期できます。 |
| --backup-dir \ | ソースには存在せず宛先にのみ存在するファイルをバックアップするディレクトリを指定します。これらのファイルを完全に削除する代わりに、ossutil はそれらをバックアップディレクトリに移動します。このオプションは --delete と併用することで、安全に削除操作を実行できます。 |
| --only-current-dir | 指定された OSS ディレクトリ内のオブジェクトのみを同期します。サブディレクトリとその内容はスキップされます。 |
ファイルフィルタリング
| オプション | 説明 |
|---|---|
| --include \ | 指定された条件に一致する名前のオブジェクトのみを含めます。複数の条件を定義するために、このオプションを複数回指定できます。詳細については、「オプション --include および --exclude」をご参照ください。 |
| --exclude \ | 指定された条件に一致する名前のオブジェクトを除外します。複数の条件を定義するために、このオプションを複数回指定できます。詳細については、「オプション --include および --exclude」をご参照ください。 |
パフォーマンスと同時実行
| オプション | 説明 |
|---|---|
| -j, --job \ | 複数オブジェクト操作における同時タスク数です。有効値:1 ~ 10000。デフォルト値:3。多数の小規模ファイルを同期する際は、この値を増やすことでスループットを向上できます。 |
| --parallel \ | 単一オブジェクト操作(大規模ファイルのマルチパートダウンロードなど)における同時タスク数です。有効値:1 ~ 10000。このオプションを指定しない場合、ossutil は操作タイプおよびオブジェクトサイズに基づいて自動的に値を決定します。少数の大規模ファイルをダウンロードする際は、この値を増やしてください。 |
| --maxdownspeed \ | 最大ダウンロード速度です。単位:KB/s。デフォルト値:0(制限なし)。 |
| --snapshot-path \ | 同期済みオブジェクトのスナップショットを保存するディレクトリを指定します。次回の同期時に、ossutil はスナップショットを読み取り、変更されたオブジェクトのみを同期します。これにより、同一ディレクトリの繰り返し同期を大幅に高速化できます。 |
再開可能なダウンロード
| オプション | 説明 |
|---|---|
| --bigfile-threshold \ | 再開可能なダウンロードを使用するオブジェクトサイズのしきい値です。このサイズを超えるオブジェクトは複数の部分に分割され、ダウンロードが失敗した場合でも中断位置から再開できます。単位:バイト。デフォルト値:100 MB。有効値:0 ~ 9223372036854775807。 |
| --part-size \ | 再開可能なダウンロード時の各部分のサイズです。単位:バイト。デフォルトでは、ossutil がオブジェクトサイズに基づいて部分サイズを決定します。有効値:1 ~ 9223372036854775807。 |
| --checkpoint-dir \ | 再開可能なダウンロード用のチェックポイントファイル情報を保存するディレクトリです。ダウンロードが失敗した場合、ossutil はチェックポイントデータを使用してダウンロードを再開します。デフォルトディレクトリ:現在の作業ディレクトリ内の .ossutil_checkpoint。ダウンロードが正常に完了すると、ossutil はチェックポイントディレクトリを削除します。指定するディレクトリが削除可能であることを確認してください。 |
シンボリックリンクの処理
| オプション | 説明 |
|---|---|
| --enable-symlink-dir | サブディレクトリを指すシンボリックリンクをたどり、その内容を同期します。 |
| --disable-all-symlink | すべてのシンボリックリンクを無視します。シンボリックリンクによって参照されるファイルおよびサブディレクトリは同期されません。 |
データ整合性とエラー処理
| オプション | 説明 |
|---|---|
| --disable-crc64 | CRC-64 検証を無効にします。デフォルトでは、ossutil は各オブジェクトのダウンロード後に CRC-64 チェックを実行してデータ整合性を検証します。 |
| --disable-ignore-error | バッチ操作中にエラーが発生した場合、同期操作を停止します。デフォルトでは、ossutil はエラーを無視して残りのオブジェクトの処理を継続します。エラーの詳細は出力ディレクトリに書き込まれます。 |
| --retry-times \ | 失敗した操作のリトライ回数です。デフォルト値:10。有効値:1 ~ 500。 |
出力とエンコーディング
| オプション | 説明 |
|---|---|
| --output-dir \ | ossutil が出力ファイル(バッチ同期中に生成されるエラーレポートを含む)を保存するディレクトリです。デフォルト値:現在の作業ディレクトリの ossutil_output サブディレクトリ。 |
| --encoding-type \ | オブジェクト名のエンコーディング方法です。url を指定すると、オブジェクト名が URL エンコードされます。このオプションを指定しない場合、オブジェクト名はエンコードされません。 |
| --range \ | 各オブジェクトの特定のバイト範囲をダウンロードし、新しいファイルとして保存します。値は以下のいずれかの形式で指定できます:3-9(バイト 3 ~ 9)、3-(バイト 3 ~ オブジェクト末尾)、-9(バイト 0 ~ 9)。開始値の最小値は 0 です。 |
課金
| オプション | 説明 |
|---|---|
| --payer \ | リクエスト料金とトラフィック料金の支払者を指定します。バケットのオーナーの代わりにリクエスト元が料金を支払うようにする場合、このオプションを requester に設定します。詳細については、「リクエスト元支払い」をご参照ください。 |
使用例
以下の例では、examplebucket という名前のバケットを使用します。このバケットには、localdir という名前のディレクトリが含まれています。localdir ディレクトリには、2 つのオブジェクト (a.txt および b.txt) と 1 つのサブディレクトリ (C) が含まれています。お客様のコンピューター上では、destdir ディレクトリに d.txt という名前の単一のファイルが含まれています。
examplebucket ローカルルートディレクトリ
└── localdir/ └── destdir/
├── a.txt └── d.txt
├── b.txt
└── C/例 1:基本的な同期
「localdir」ディレクトリを、「examplebucket」からローカルの「destdir」ディレクトリに同期します:
ossutil sync oss://examplebucket/localdir/ destdir/同期後、オブジェクト a.txt、b.txt、およびサブディレクトリ C が destdir に追加されます。--delete が指定されていないため、既存のファイル d.txt は保持されます。
examplebucket ローカルルートディレクトリ
└── localdir/ └── destdir/
├── a.txt ├── a.txt
├── b.txt ├── b.txt
└── C/ ├── d.txt
└── C/例 2:削除とバックアップ付きの同期
localdir を destdir に同期し、localdir に存在しないファイルを destdir から削除します。削除されたファイルは完全に削除するのではなく、backup ディレクトリに移動します。
ossutil sync oss://examplebucket/localdir/ destdir/ --delete --backup-dir backup/同期後、destdir には localdir のオブジェクトのみが含まれます。destdir のみに存在していたファイル d.txt は backup ディレクトリに移動されます。
examplebucket ローカルルートディレクトリ
└── localdir/ ├── destdir/
├── a.txt │ ├── a.txt
├── b.txt │ ├── b.txt
└── C/ │ └── C/
└── backup/
└──d.txt例 3:特定のファイルタイプのみを同期
localdir から .txt ファイルのみを同期し、他のファイルタイプは除外します。
ossutil sync oss://examplebucket/localdir/ destdir/ --include "*.txt"例 4:特定のファイルタイプを除外
localdir のすべてのオブジェクトを同期しますが、.log ファイルは除外します。
ossutil sync oss://examplebucket/localdir/ destdir/ --exclude "*.log"例 5:増分同期
前回の同期以降に新規作成または更新されたオブジェクトのみを同期します。
ossutil sync oss://examplebucket/localdir/ destdir/ -u--update (-u) を使用すると、OSS 内のオブジェクトの最終更新時刻が対応するローカルファイルと同じかそれより古い場合、そのオブジェクトはスキップされます。
例 6:最上位ディレクトリのみを同期
localdir 直下のオブジェクトのみを同期し、サブディレクトリには再帰しません。
ossutil sync oss://examplebucket/localdir/ destdir/ --only-current-dir例 7:スナップショットによる繰り返し同期の高速化
--snapshot-path を使用して同期状態を保存します。次回実行時には、ossutil がスナップショットを読み取り、変更されたオブジェクトのみを同期することで、同一ディレクトリの繰り返し同期にかかる時間を短縮します。
ossutil sync oss://examplebucket/localdir/ destdir/ --snapshot-path /tmp/oss-sync-snapshot/例 8:大規模同期時の同時実行の調整
小規模ファイルと大規模ファイルの両方を含むディレクトリを同期する際は、スループットを最適化するために --job および --parallel を調整します。
--jobは同時に処理されるオブジェクト数を制御します。多数の小規模ファイルを同期する必要がある場合は、この値を増やしてください。--parallelは単一大規模オブジェクトの同時ダウンロード部分数を制御します。少数の大規模ファイルをダウンロードする必要がある場合は、この値を増やしてください。
ossutil sync oss://examplebucket/data/ /local/data/ --job 10 --parallel 5ネットワーク帯域幅を飽和させないように、ダウンロード速度を 10,240 KB/s (10 MB/s) に制限するには:
ossutil sync oss://examplebucket/data/ /local/data/ --maxdownspeed 10240成功時の出力
同期が正常に完了すると、ossutil は次のような出力を返します。同期方向に関係なく出力に「upload」と表示されることにご注意ください。これは ossutil の標準出力形式です。
Succeed: Total num: 2, size: 750,081. OK num: 2(upload 2 files).
average speed 1641000(byte/s)エラー処理と復旧
同期が途中で失敗した場合、同じ sync コマンドを再実行することで再開できます。ossutil はソースと宛先を比較し、前回の実行で正常にダウンロードされなかったオブジェクトのみを同期します。
大規模ファイルの場合、ossutil はデフォルトで再開可能なダウンロードを使用します(100 MB を超えるオブジェクト)。チェックポイントファイル情報は .ossutil_checkpoint ディレクトリに保存され、大規模ファイルのダウンロードを最初からやり直すのではなく、最後に正常にダウンロードされた部分から再開できます。
エラー処理動作をカスタマイズするには、以下のオプションを使用します。
--retry-times:各失敗操作の自動リトライ回数を設定します。デフォルトは 10 回です。
--disable-ignore-error:デフォルトでは、ossutil はバッチ操作中のエラーを無視して残りのオブジェクトの処理を継続します。このオプションを使用すると、エラー発生時に操作を停止します。エラーの詳細は出力ディレクトリに書き込まれます。
共通オプション
別のリージョンにあるバケット、または別の Alibaba Cloud アカウントが所有するバケットからオブジェクトを同期する必要がある場合は、コマンド内で直接エンドポイントおよび認証情報を指定します。
| オプション | 説明 |
|---|---|
| -e | バケットが配置されているリージョンのエンドポイントです。 |
| -i | バケットを所有する Alibaba Cloud アカウントの AccessKey ID です。 |
| -k | バケットを所有する Alibaba Cloud アカウントの AccessKey Secret です。 |
たとえば、中国 (上海) リージョンにある examplebucket という名前のバケット(別の Alibaba Cloud アカウントが所有)から srcfolder という名前のディレクトリを同期するには、次のコマンドを実行します。
ossutil sync oss://examplebucket/srcfolder/ examplefolder/ -e oss-cn-shanghai.aliyuncs.com -i yourAccessKeyID -k yourAccessKeySecret詳細については、「共通のオプション」をご参照ください。