あるディレクトリから別のディレクトリに適切なファイルのみをコピーするにはどうすればよいでしょうか?

あるディレクトリから別のディレクトリに適切なファイルのみをコピーするにはどうすればよいでしょうか?

ファイルシステムが壊れてしまいました。残った正常なファイルをコピーしたいと思います。質問は、正常なファイルだけをあるディレクトリから別のディレクトリにコピーするにはどうしたらよいかということです。

たとえば、1 つのファイルが 10 GB の場合、そのうち 5 GB をコピーできることに注意してください。したがって、コピーを担当するツールが、コピーされたコンテンツをすぐにターゲット ディレクトリに保存する場合、ファイル全体をコピーできないことが明らかになった時点で (読み取り不可能なため)、そのような部分的なファイルを削除する必要があります。

良いファイル-- I/O エラーなしで最初から最後まで読み取ることができるファイル。

重要: これは自動的に、つまりユーザーの介入なしに実行される必要があります (ユーザーの介入がある場合は、すでに Midnight Commander を使用しています)。

アップデート: 実用的な理由から、ファイルの読み取りの最大試行回数を指定できる必要があります。そうしないと、ツールはファイルを何度も読み取ろうとする無限ループに陥りやすくなります。たとえば、ファイルの特定のチャンクが読み取れず (I/O エラーのため)、X 回の試行があった場合、ファイルは不良であると想定します。

答え1

ddrescueまたはというユーティリティがありますdd_rescue。これらは、同じことを異なる方法で実行する 2 つの異なるユーティリティです。これらは A から B にデータをコピーしますが、cp とは異なり、失敗することはなく、試行を数回繰り返し、データを読み取れない場合はスキップします。
これらのユーティリティはファイルシステムを認識しませんが、手動で、または を使用してファイルに対して実行できますfind
ただし、可能であれば、 を使用してdd_rescue破損したドライブ全体を 1 つのイメージ ファイルに安全な場所にコピーし、そのイメージをマウントして、そこから通常の方法でファイルをコピーすることをお勧めします。イメージはエラーなしで読み取り可能になります。
最初に dd_recue を使用します。

答え2

最も簡単な方法は、破損したファイルシステム上でfsck -aまたは を実行することですfsck -y(ルート ファイルシステムの場合は、Live CD で起動し、外部ボリュームとしてマウントします)。回復可能なすべてのファイルは元の場所に戻り、その他のファイルは -- に戻ります。/lost+found必要に応じて、そこから何かを回復することができます。

上記のオプションは次のように機能します。

さまざまなファイルシステム固有の fsck のオプションは標準化されていません。疑問がある場合は、ファイルシステム固有のチェッカーのマニュアル ページを参照してください。保証はされませんが、次のオプションはほとんどのファイルシステム チェッカーでサポートされています。

-あ 質問なしでファイルシステムを自動的に修復します (このオプションは注意して使用してください)。e2fsck(8) は下位互換性のためだけに -a をサポートしていることに注意してください。このオプションは、一部のファイルシステムチェッカーがサポートしている -a オプションとは異なり、安全に使用できる e2fsck の -p オプションにマップされています。

(...)

-y 一部のファイルシステム固有のチェッカーでは、-y オプションにより、fs 固有の fsck は常に検出されたファイルシステムの破損を自動的に修復しようとします。専門家であれば、fsck を手動で実行した方がよい場合もあります。すべてのファイルシステム固有のチェッカーがこのオプションを実装しているわけではないことに注意してください。特に、fsck.minix(8) と fsck.cramfs(8) は、この執筆時点では -y オプションをサポートしていません。

関連情報