エラーを無視して、すべてのファイルをコピーする最良の方法は?


36

ディスクユーティリティで修復できない部分的に破損したHDがありますが、読み取り専用でマウントして、そのデータにアクセスできます。

回復可能なすべてのコンテンツを予備のHDにコピーしようとしていますが、エラーが発生すると、すべての方法が失敗し、残りのファイルはコピーされません。

ファインダー-失敗。SuperDuper-失敗します。Ditto(端末コマンド)-失敗します。

Dittoがこのトリックを行うことを望んでいた、とDittoのmanページは言います

すべてがコピーされる場合、dittoは0を返し、そうでない場合は0を返します。dittoはほとんどneverめず、途中でエラーを報告することを好みます。診断メッセージは標準エラーに出力されます。

私はAppleにバグを提出しましたが、宣伝どおりに動作しません。

他のアイデアはありますか?


以下の回答ではなく、stackoverflow.com / a / 27637277を参照してください--ignore-errors
spyle

回答:


28

cp -Rfv sourcefile destinationfileはかなり定期的に成功して使用しています。

cp =コピー

R =ファイル階層を維持

f =既存の宛先ファイルを開くことができない場合は、削除して再試行します

v =詳細モード。進行中に転送されたファイルを表示します

ソースファイル =コピーするデータ

destinationfile =コピー先のディレクトリ/ドライブ


3
ソースドライブのエラーをどのように無視しますか(質問を参照)?
nohillside

1
@patrixエラーを「無視」しませんが、「f」フラグはエラーを強制し、無傷のデータのみをコピーします。(詳細フラグのおかげで)進行状況を見ると、不良データが検出されると、「I / Oエラーによりデータがコピーされませんでした」という行に沿って出力が表示されます。エラーが表示されると、ユーザー入力なしで次のファイルに移動します。ポスターのシナリオは、このコマンドを使用してフレークディスク/ボリュームからデータを取得した数十回と非常によく似ています。
ラビット氏

失敗したファイルを何らかの後置記号でコピーする方法はありますか?

1
BSD cpマニュアル(macOS)から:「-Rモードでは、エラーが検出されてもcpはコピーを続行します。」
マット

これをどうもありがとう。私は現在、故障したHDDからできるだけ多くを救おうとしていますが、破損したデータは気にしませんが、修正しようとして時間を無駄にせず、単に削除するだけです。これは、これをすばやく達成するための実用的な方法です。私は、私は次のように追加することによって、読み取りエラーのある切り詰めたファイルを削除するために、後で解析することができ、ログファイルにエラーをパイプしています:2> error.log
0x01の

23

Gnu ddrescueを試してください-これは、コピー操作中に破損したデータを回復してブロックベースのコピーを行うデータ回復プログラムです。Homebrewを使用している場合は、ターミナルウィンドウに入力してOS Xで取得できます。

brew install ddrescue

arstechnicaガイドでは、 ddrescueを使用して故障したディスクをレスキューする方法を説明しています。ガイドには役立つ情報が含まれているため、必ず読んでください。ここに到達する方法の要点があります。

  • を使用してドライブを見つけますdiskutil list。識別子列はあなたが探しているものです:

    /dev/disk1
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      GUID_partition_scheme                        *750.2 GB   disk1
       1:                        EFI EFI                     209.7 MB   disk1s1
       2:                  Apple_HFS Macintosh HD 2          80.0 GB    disk1s2
       3:                  Apple_HFS Home                    509.1 GB   disk1s3
    
  • 問題のディスクをアンマウントします。

    diskutil unmount /dev/disk1s3    
    
  • イメージへのディスクのレスキュー操作を開始します。の場所がRescue.dmg目的の場所に置き換えられていることを確認します。

    sudo /usr/local/bin/ddrescue -v -n -c 4096 /dev/disk1s3 Rescue.dmg Rescue.log
    
  • イメージを新しいドライブに復元します。

    sudo /usr/local/bin/ddrescue --force -v -c 4096 Rescue.dmg /dev/disk2s0 recovery.log
    

を実行して、利用可能なオプションについて学習するために、ddrescueのマニュアルも読むことをお勧めしますman ddrescue


1
モデレーターの通知に追加するには:これは問題に対する非常に良い答えかもしれませんが、さらに作業が必要です。OS Xデバイス用のサンプルddrescueコマンドを回答に追加できますか?ここでの回答で見たい背景と情報を少し修正しました。そうすれば、素晴らしい反応になると思います。
イアンC.

不良ディスクからデータをコピーするために、1〜2年前にddrescueを正常に使用しました。おそらく200を超えるエラーが発生し、そのうちの約半分を読み取ることができました。結果としてコピーされたディスクはdiskwarriorに送られ、その結果、約100万個のうち10個のファイルが破損した可能性があります。
ピッツバーグマイク

7

rsync破損したソースから機能する宛先にファイルをコピーするために使用するのが好きです:

rsync -auv --delete --ignore-errors /path/to/source/ /path/to/destination/

どこで:

-a =「アーカイブモード」=ディレクトリに再帰し、シンボリックリンクをシンボリックリンクとしてコピーし、権限、時間、グループ、特殊ファイルを保持し、所有者(所有者=ルートの場合)およびデバイス(所有者=ルートの場合)も保持します

-u= コピー先の対応するコピーが新しい場合、コピーのファイルをスキップします

-v =詳細出力

--delete= ソースに存在しない宛先のファイルは削除されます

--ignore-errors =コピープロセス中にI / Oエラーが発生した場合、ファイル/ディレクトリを削除します


4

このMacworldのヒントでは、ddを使用してビット単位のコピーを作成し(エラーを無視)、結果のイメージをFinderにマウントしてファイルを復元することをお勧めします。試したことはありませんが、うまくいくようです。


ディスクがダフな場合、データを高速でオフにしたいので、これは良いことです。このようにして、エラーを含むブロックコピー用のブロックを取得します。このブロックは、ディスクをすべて取り出す前にディスクが完全に死ぬことを心配することなく、いつでも閲覧できます。ファイルフラグメントからファイルフラグメントへとすべての場所をスキップせずに、DDコピーを作成したドライブでより手間をかけることなく、1つの操作を実行します。
スタッフィング

3
ddrescueはddよりも優れています。実行し続ける限り、不良セクションを何度も再試行するためです。OPが数週間の粉砕の後、データを失ってしまうこの前の回答を参照してください(!)。これは、HDハードウェアに障害が発生しているが、ボリューム構造の破損を修復するために何もしない場合(ファイルと一緒にコピーされるだけの場合)には良いアプローチであることに注意してください。
ゴードンデイヴィソン

3

このddコマンドを使用して、破損したHDDから新しいHDDへのブロックごとのコピーを実行することを検討してください。

新しいHDD(/dev/disk2)が破損したHDD()と同じかそれ以上のサイズであると仮定すると、以下/dev/disk1を発行できます。

dd if=/dev/disk1 of=/dev/disk2 bs=4096 conv=notrunc,noerror

4kでブロック化、データブロックを切り捨てず、すべてのエラーを無視

デバイス名を見つけるには、mount最初にターミナルから実行します。


0

このdittoコマンドは機能するはずです。詳細オプションを使用dittoすると、-vコピーしたもののエラーを正確に確認できます。


3
アスカーによるとditto動作しません。なぜそうなると思いますか?
nohillside

opは次の代替について尋ねていますditto
-juniorRubyist

0

SuperDuperを実行して、ioエラーのあるファイルを無視してみてください。ごく少数であり、ほとんどのデータを取得するのに非常に効果的な方法であるスマート更新機能を使用している場合。(できればddコマンドの方が望ましいと思います)。

手順:

  1. バックアップ戦略として「すべてのファイルをバックアップ」を選択します
  2. オプションで「スマート更新」を選択します(そうしないと、1つまたは2つ以上のエラーがある場合、このプロセスにとてつもなく長い時間がかかります。これには有料版が必要です)
  3. コピーを実行する
  4. コピーが失敗した場合、ログを読んでコピーに失敗したファイルを見つけ、[OK] / [閉じる]を押して「開始」画面に戻ります。
  5. 使用ドロップダウンから「選択したコピースクリプトを編集」を選択します
  6. スクリプトコマンドの下で、コピーに失敗したファイルを追加します。ファイルのリストに追加されると、「無視」と表示されます。
  7. いくつかの名前でスクリプトを保存します(例:ignore-corrupted-files)
  8. スクリプトを選択し、必要な回数だけ手順3〜7を繰り返して、すべての破損ファイルを無視します。

-2

ドライブがまだアクセス可能で、ファイルが急に見えても、エラーのためにコピープロセスが停止する場合は、Unstoppable Copierプログラムを使用できます。

http://www.roadkil.net/program.php?ProgramID=29


これはWindows専用のプログラムであり、OPはMacソリューションを求めています(Mac固有のフォーラムで!)
Haydentech
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.