我的磁盘中有一个主目录,其中有很多损坏的文件。我正在尝试尽可能保存大多数文件。我正在尝试使用以下命令在外部驱动器上创建我的主目录的备份
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 有效,该文件将被复制到该位置。重新运行 rsync 命令和 --ignore-existing 将导致它不尝试复制失败的文件。希望 rsync 能够复制其他所有内容,但如果它再次停止,请重复此过程。重复直到 rsync 运行完成。