强制复制损坏的主目录

强制复制损坏的主目录

我的磁盘中有一个主目录,其中有很多损坏的文件。我正在尝试尽可能保存大多数文件。我正在尝试使用以下命令在外部驱动器上创建我的主目录的备份

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 运行完成。

答案4

使用cpio -ivd -H tar命令

手册页说

这将检索文件directory.cpio中存档的文件并将它们放置在当前目录中。 “-i”选项提取存档,“-v”显示提取的文件名。如果您正在处理归档目录树,则需要使用“-d”选项根据需要创建目录,

-H 表示格式

相关内容