如何解释和修复 Linux 中的输入/输出错误?

如何解释和修复 Linux 中的输入/输出错误?

我每天都会用 rsync 进行备份。几天前,其中一个文件在备份过程中出现此错误:

rsync: read errors mapping "/home/folder/file.ext": Input/output error (5)
WARNING: /home/folder/file.ext failed verification -- update discarded (will try again).

最好的处理方案是什么?这只是一个损坏的文件吗?还是文件所在位置的硬盘有问题?我是否应该删除它并将其中一个备份版本复制到文件所在位置?或者我应该做其他事情/更多事情?

答案1

rsync 错误

 read errors mapping ....: Input/output error (5)

表示 rsync 无法读取或写入文件。此错误最可能的原因是磁盘缺陷,无论是在 SRC 还是在 TGT 目录中。但是其他可能性包括权限不足、文件被防病毒程序锁定以及maybe其他原因。

诊断的第一步是尝试手动复制文件。例如,如果错误源是 TGT 目录中的磁盘缺陷,这种方法可能会奏效;通过稍后重复该操作,您将写入磁盘的不同部分,问题可能已经消失。

或者,您可能会发现无法访问 SRC 目录中的文件。在这种情况下,我建议您使用发行版中提供的任何磁盘检查实用程序。

权限不足,防病毒,比较容易诊断。

最后,如果你的 SRC 目录中有坏扇区,你可以使用以下命令将其从 rsync 的未来运行中排除:

rsync -av --exclude='/home/my_name/directory_with_corrupt_files/*'

答案2

我遇到过类似的问题,我有一个通过 USB 连接保险丝的设备,它经常断开连接,导致 IO 错误。我的备份永远无法完成,因为 IO 错误会在 rsync 中途开始,尽管反复运行 rsync,但在某些时候同步不会超出更新现有文件的范围。

我的解决方案是使用

--ignore-existing 

选项。这样,我可以循环运行同步,直到看到 0 退出状态。

当然,在这种情况下我并不关心现有文件的更新。

答案3

我有 2 个外部驱动器,我使用 保持同步rsync。我在两台机器中的任意一台上定期执行此任务,并且为了方便起见经常在两台机器之间切换。我有 4 台机器运行 Debian 9,并在每台机器上使用这些驱动器。

今天早上我使用了以下方法:

rsync -ahv --delete drive-x drive-y 

并惊讶地发现有几百起失败案例。

主要:rsync: readlink_stat... failed: Input/output error (5)
也:rsync: rsync: recv_generator: mkdir ... failed: Read-only file system (30)

为了找出发生了什么,我重新安装了两次驱动器,重新启动,运行rsync--delete基本上是我通常的尝试来修复一个已经可靠运行了很长时间的东西。甚至考虑过rsync重新安装。在我这样做之前,我决定在rsync另一台机器上安装 2 个驱动器,我离线运行。 rsync工作正常。

阅读了此处发布的材料后,我安装了clamav,更新了签名,并扫描了我的主目录。我经常在另一台机器上使用它。我发现了 1 个 PUA,而且只有 1 个,我将其删除了。我总是删除 PUA。然后,我在这台机器上重新安装了这两个驱动器,并向每个驱动器添加了不同的测试文件和文件夹。

我运行了rsync -ahv --delete drive_x drive_y并且一切正常。

答案4

我遇到了这个问题,我成功地ddrescue恢复了我的文件。这是一个很棒的工具来自 GNU,你可以通过以下方式在 Ubuntu 中安装

sudo apt install gddrescue

基本上,使用cp复制文件夹。有关输入/输出错误的错误,您可以在 vim 或您最喜欢的文本编辑器中复制粘贴它们。删除错误消息,以便每行只显示文件位置。然后逐行读取文件并应用ddrescue,如下所示

while read f; do
    ddrescue $f ~/folder/$f
done < corrupted_files.txt

感谢这个答案在 Stack Overflow 上进行出色的逐行文件读取。

相关内容