私(まあ、私は持つ)目次:
/media/admin/my_data
サイズは約49GBで、数万のファイルが含まれています。このディレクトリは、アクティブなLUKSパーティションのマウントポイントです。
ディレクトリ名を次のように変更したいと思います。
/media/admin/my_data_on_60GB_partition
当時は気付いていませんでしたが、ホームディレクトリでコマンドを実行していたので、結局、次のようになりました。
~% sudo mv /media/admin/my_data my_data_on_60GB_partition
その後、プログラムは内容を新しいディレクトリに移動mv
し始めます。/media/admin/my_data
~/my_data_on_60GB_partition
Ctrl+を使用してCコマンドをキャンセルしたので、複数のファイルが複数のディレクトリに分割されています。
~/my_data_on_60GB_partition <--- about 2GB worth files in here
そして
/media/admin/my_data <---- about 47GB of orig files in here
新しいディレクトリ~/my_data_on_60GB_partition
と一部のサブディレクトリはルートが所有しています。私はプログラムが最初にファイルをルートにコピーし、転送後に自分のユーザーアカウントに返す必要があると
仮定します。mv
chown
やや古いディレクトリ/パーティションのバックアップがあります。
私の質問は、移動した複数のファイルを確実に回復できますか?
つまり、次のことを実行できます。
sudo mv ~/my_data_on_60GB_partition/* /media/admin/my_data
または、ファイルが破損しているか部分的に破損している可能性があるため、回復の試みを放棄する必要がありますか?
- オペレーティングシステム - Ubuntu 16.04
mv --version
mv (GNU coreutils) 8.25
答え1
ファイルシステム間でファイルを移動すると、mv
ファイルはコピーが完了するまで削除されず、ファイルを順次処理します。 (もともと各ファイルを順次コピーして削除することを言いましたが、保証されません。少なくともGNUmv
コピーは削除されます。ファイルごと)コマンドラインパラメータ順番に、そしてPOSIXはこの動作を指定します)。したがって、ターゲットディレクトリには最大1つの不完全なファイルがありますが、ソースファイルはまだソースディレクトリにあります。
コンテンツを再移動するには、何も上書きしないように-i
フラグを追加してください。mv
sudo mv -i ~/my_data_on_60GB_partition/* /media/admin/my_data/
(回復する隠しファイルがないと仮定~/my_data_on_60GB_partition/
)またはより良い方法(発見した内容を考慮すると、削除待ちのファイルが多い可能性があります)対応する-n
フラグを追加してmv
何も上書きしませんが、これについての質問は受け付けません。それ:
sudo mv -n ~/my_data_on_60GB_partition/* /media/admin/my_data/
フラグを追加して、-v
実行中の操作を確認することもできます。
POSIX準拠のすべてと同様に、mv
元のディレクトリ構造はそのまま維持する必要があるため、これを確認して簡単に削除できます/media/admin/my_data
。 (しかし、一般的に、このmv -n
バリエーションは安全なアプローチだと思いますmv
。例えば mv /media/admin/my_data/* my_data_on_60GB_partition/
.)
一部の権限を復元する必要があります。みんなandを使用するchown
か、andchmod
を使用してバックアップから復元しますgetfacl
setfacl
(ありがとう。桂里~のため思い出させる)。
答え2
Stephen Kittの答えを得て、このコマンドを潜在的な解決策として議論した後:
sudo mv -i ~/my_data_on_60GB_partition/* /media/admin/my_data/
私は何が起こっているのか理解するまで実行を保留することにしました。
Gnuを使用してmv
ファイルをターゲットにコピーし、コピー操作が成功した場合にのみソースファイルを削除します。
しかし、このシーケンスが一度に1ファイルずつ実行されることを確認したいと思いますmv
。そうであれば、元のフォルダの内容が2つの部分にきれいにカットされ、1つの部分がターゲットに転送され、もう1つの部分がまだソースに残ります。また、2つのディレクトリ間で共通のコピー中に中断されたファイルがある可能性があり、形式が正しくない可能性があります。
2つのディレクトリ間で共通のファイルを見つけるために、以下を実行しました。
~% sudo diff -r --report-identical-files my_data_on_60GB_partition/. /media/admin/mydata/. | grep identical | wc -l
14237
この結果は、ソースディレクトリとターゲットディレクトリの両方に同じファイルのインスタンスが14,237個あることを示しました。これはファイルを手動で調べることで確認しました。はい、両方のディレクトリに同じファイルがたくさんありました。これは、mv
大量のファイルをコピーした後にのみソースファイルを削除することを意味します。コマンド表示info
でクイック検索mv
まず、要求されたディレクトリとファイルをコピーするのと同じコードの
mv
一部を使用してcp -a
から(コピーが成功したと仮定して)、元のファイルを削除します。コピーに失敗すると、ターゲットパーティションにコピーされた部分が削除されます。
コマンドを実行していませんが、実行しようとしたようです。
sudo mv -i ~/my_data_on_60GB_partition/* /media/admin/my_data/
これ-i
上書きする前のヒント14,000回以上トリガーできます。
次に、新しく作成されたディレクトリにいくつかのファイルがあることを確認してください。
~% sudo find my_data_on_60GB_partition/ -type f -a -print | wc -l
14238
したがって、新しいディレクトリに合計14238個の一般的なファイルがあり、14237個のファイルがソースに同じ元のファイルがある場合、新しいディレクトリには対応する同じファイルがないファイルが1つしかないことを意味します。源泉。ファイルが何であるかを確認するために、ソースの方向にrsyncを実行しました。
~% sudo rsync -av --dry-run my_data_on_60GB_partition/ /media/admin/my_data
sending incremental file list
./
Education_learning_reference/
Education_learning_reference/Business_Education/
Education_learning_reference/Business_Education/Business_education_media_files/
Education_learning_reference/Business_Education/Business_education_media_files/Jeff Hoffman - videos/
Education_learning_reference/Business_Education/Business_education_media_files/Jeff Hoffman - videos/Jeff and David F interview/
Education_learning_reference/Business_Education/Business_education_media_files/Jeff Hoffman - videos/Jeff and David F interview/018 business plans-identifying main KPIs.flv
sent 494,548 bytes received 1,881 bytes 330,952.67 bytes/sec
total size is 1,900,548,824 speedup is 3,828.44 (DRY RUN)
クイックチェックの結果、ソースとターゲットの両方に存在する無効なファイル(ターゲットファイル= 64 MB、ソースファイル= 100 MB)であることが確認されました。ファイルとそのディレクトリ階層はまだルートの所有であり、元の権限は復元されませんでした。
結論として:
- 到着していないすべてのファイルは
mv
まだ元の場所に戻ります(明らかに)。 - 完全にコピーされたすべてのファイルには、
mv
ソースディレクトリに元のコピーがあります。 - 部分的にコピーされたファイルのみがソースディレクトリにソースファイルを残します。
つまり、すべての元のファイルはそのまま残り、この場合の解決策は新しいディレクトリを削除することです!
答え3
私は何人かの人々が「xargs」を並列に実行するためにブレンドに含めたい誘惑を受けるかもしれないことに言及したいと思いました。これは私を興奮させ、上記のrsyncソリューションが本当に好きです。
移動およびコピーされるファイルシステムのコンテンツと元のファイルが削除された場合、VFSとデフォルトのファイルシステムは削除ステップを実行する前に調整して各ファイルのアトミックを保証します。したがって、ターゲットファイルが完全に書き込まれる前に中断されても、VFSのすべてのロックは非常に厳しく、並列状況でもランダムなデータインターリーブなどの問題を防ぎます。 (私はLinux VFSとNFS4について調べました)
「xargs」をブレンドに追加すると、複数のファイルが送信されるため、二重の健全性チェックのステップが不便になる可能性があります。より多くのシステムレベルのスクリプトがあったらと思います。私にとって本当に良いお知らせです!
クモの巣によく、再びrsyncを好きにするこの質問が好きです。乾杯!