Linuxで大きなファイルのコピーを再開するにはどうすればよいですか?巨大なファイル(サーバーギガビー)をネットワークドライブに部分的にコピーしましたが、時間がかかりました。ネットワークの問題が修正されたため、コピー操作が停止する前にほとんど完了しました。ファイルのコピーを再開するにはどうすればよいですか。非効率的なスクリプトは必要ありません。ecpは機能しませんでした(大きなファイルでは機能しないようです)。
rsync -a /from/file /dest/file
を試してみます。
ローカルファイルに追加する必要があり、rsyncを使用したくない場合(チェックサムの計算に長い時間がかかる可能性がある)、curlを使用できます。たとえば、/media/CORSAIR/somefile.dat
にマウントされた低速のリムーバブルUSBスティックに大きなファイルがあり、その半分だけが現在のディレクトリにある場合、再開するには次のようにします。
curl -C - -O "file:///media/CORSAIR/somefile.dat"
はい、rsyncがその方法です。私の場合、rsync + sshを介して100GB以上のデータを転送しました。真のバックアップコピーを探している場合は、必ず-a
(アーカイブ)オプションを使用してファイル属性(時間、所有者、権限など)を保持してください。
Host1> rsync -aP file user@Host2:/path/to/new/dir/
また、移行中に変更される可能性のある大きなファイルをコピーする場合にも役立ちます。 プリロードデータを宛先に送信し、最終コピーの準備ができたら、もう一度実行できますが、その時間はごくわずかです。 rsyncを最大限に活用することで、実際のダウンタイムを節約できます。
P.S. v
(詳細)を使用すると、多くのファイルの転送が遅くなる可能性があります。
必要なコマンドは次のようになります
rsync -v --append /path/to/afile /mnt/server/dest/afile
ssh経由でサーバーにアクセスし、その方法でrsyncを実行できる場合を除いて、その場合はFlyingFishが指定したコマンドが最適です。
rsyncは、宛先サーバーにrsyncがある場合にのみ有効です。その場合、それは確かに最良の解決策です。
しかし、そうでない場合はありません。 rsyncのポイントは、大きなファイル内の変更された部分のみをコピーすることであるため、これらの変更された部分はファイル内のどこにでも存在できると想定しています。これは、すでにコピーされているすべてのブロックをチェックサムすることを意味します。リモートエンドにrsyncがない場合、ローカルrsyncは、すでに転送されているすべてのものを読み戻すことから始まります。
ソースマシンにWebサーバーまたはFTPサーバーがある場合は、「-continue」オプションを使用して宛先サーバーからwgetを使用できます。 (または「--continue-at [-| size]」オプションでカールします)。
宛先マシンにFTPサーバーがある場合は、-appendオプションを使用してソースマシンでcurlを使用できます。
最後の手段として、「bs =」(ブロックサイズ)、「skip =」、および「seek =」引数とともにddを使用できます。例えば:
2048バイトのブロックを使用できると仮定しましょう。宛先ファイルが現在2'048'000'000バイト(2 GB)の場合、それは2048バイトの1'000'000ブロックです。ソースファイルの残りを宛先に追加するには、次のことができます。
dd if = source_file of = destination_file bs = 2048 skip = 1000000 seek = 1000000
より大きなブロックサイズを使用して、転送速度を向上させることができる場合があります。 bs =でブロックサイズを指定することを忘れないでください。スキップとシークに指定される値は、バイト単位ではなくブロック単位です。