ディスクに破損したファイルが多いホームディレクトリがあります。できるだけ多くのファイルを保存しようとしています。次のコマンドを使用して、外部ドライブにホームディレクトリのバックアップを作成しようとします。
tar -cvf backup /home/myHome
そしてまた試した
rsync -vfh /home/myHome /media/backup
破損したファイルが見つかると、両方の方法が停止します。コピーを続行し、間違ったファイルを無視し、可能なすべてをコピーし、コピーされていないファイルの最後にログを表示するように強制する方法はありますか?
ありがとうございます。
答え1
外付けドライブに十分なスペースがある場合は、回復不能なセクタをスキップしてパーティション全体のコピーを実行してください。それでは、コピーして電話してみfsck
てください。
障害が発生したドライブからパーティションをコピーするには、次を使用します。myrescue
またはこれが十分に柔軟ではない場合ddrescue
またはdd_rescue
。これらのツールはすべて、読み取り不可能な領域をスキップするか、繰り返し読み取りが機能する可能性があるか(光学メディアやフロッピーディスクなど)に応じて調整するか、逆に故障したドライブをより速く摩耗させます(たとえば、ほとんどのハードドライブ)。ドライブエラー))。また、見ることができます故障したドライブのデータ保存、破損したSDカードからデータを回復する方法は?
sudo myrescue /dev/sda42 >/media/backup/home.raw
cp /media/backup/home.raw /media/backup/home.recovering
/sbin/fsck -f /media/backup/home.recovering
sudo mount -o loop /media/backup/home.recovering /mnt
cp -a /mnt /media/backup/home.saved
答え2
私はこれのために小さなスクリプトを書いた
#!/bin/bash
echo "copying from $1"
find $1 -type f -print0 | while read -d $'\0' -r file ; do
echo Processing "$file"
target="$2""$file"
if (test -f "$target") then
echo File Exists: "$target"
else
echo copying to "$target"
targetDir=`dirname "$target"`
if (! [ -d "$targetDir" ]) then
mkdir "$targetDir"
fi
ddrescue -e0 -r0 -v -n "$file" "$target"
if ([ $? -ne 0 ]) then
echo Copy failed, deleting "$target"
rm -f "$target"
fi
fi
done
答え3
まず、rsync -aHv
--- を使用することは、rsync -vfh
目的の操作には適していません。
rsyncには使用可能な--ignoring-existingフラグがあります。rsync -aHv --ignore-existing
I / Oエラーで終了するまで実行します。失敗したファイルの名前を記録し、rsyncが機能した場合は、コピーする外部ドライブに空のバージョンのファイルを作成します。 --ignore-existing を使用して rsync コマンドを再実行すると、失敗したファイルのコピーは試行されなくなります。 rsyncが他のすべてをコピーすることを望みますが、再び停止した場合はプロセスを繰り返します。 rsyncが完了するまで繰り返します。