エラーが発生した場合、mvはどうしますか?

エラーが発生した場合、mvはどうしますか?

一方のディスクから別のディスクに大きなツリーを移動しようとしましたが、ディスクが小さすぎました。今、本当に理解できないことが残りました。一部のファイルは実際にはソースツリーから移動されますが、他のファイルはコピーされたばかりです。これは事実ではない可能性が高く、ターゲットディスクの空き容量を確認するときに行ったように何かを見落としているだけです。 :D

コマンドは簡単ですmv source-dir destination-dir。両方のディレクトリは異なるディスクにあります。私はそれを使用していますmv (GNU coreutils) 7.4。マニュアルページに次の質問に対する答えが見つかりません。

  • 切り捨てられたファイルを生成できますか?
  • エラーが発生すると、ソースツリーのすべての内容が削除されますか?
  • (簡単かつ迅速な方法で)回復するには?

答え1

mvが別のファイルシステムに移動すると、まずすべてのデータが新しいファイルシステムにコピーされます。新しいデータがコピーされると、既存のデータは削除されます。つまり、移動が中断または失敗しても、ソースの場所にはまだすべてのデータを含める必要があります。

リカバリはターゲットデータのみを破壊する必要があります。 mvを再利用する代わりにrsyncを使用し、手動でrmを使用してください。

rsync -av source-dir/ dest-dir/
rm -rf source-dir

答え2

このページの紹介はinfoあなたのすべての質問に対する答えだと思います。

まず、「cp -a」が使用するものと同じコードの一部を使用して、要求されたディレクトリとファイルをコピーし(コピーが成功したと仮定して)、元のファイルを削除します。コピーに失敗すると、ターゲットパーティションにコピーされた部分が削除されます。 3つのディレクトリをあるパーティションから別のパーティションにコピーしようとすると、最初のディレクトリのコピーは成功しましたが、2番目のディレクトリは成功しなかった場合、1番目のディレクトリはターゲットパーティションに残り、2番目と3番目のディレクトリは元のパーティションに残ります。

データが保存されるため、回復に問題はありません。どのくらいの試みをしたかはわかりませんが、原子mkdir例:ソース検証が必要です)または完全にそのドメイン(カーネルに関して)にありますが、ソースをすでに削除している間に割り込みが発生すると、破損が発生する可能性があります。この時点では、すでにターゲットディレクトリに良いコピーがあるので、単純なバイトサイズチェックだけで問題を解決できます。

編集:私が作成した大容量ファイル(複数G)でいくつかのテストを実行しましたが、結論が出なかった結果がdd出ました。一部のソースコードだけをコピーすることは成功しませんでした。ジョブ全体をすばやくキャンセルしたか、ディスクキャッシュと良いファイルシステム設計のために後で機会がなかった可能性があります(私の^ Cは着陸後は常に正常に移動しました)。

関連情報