我以前从来没有遇到过这种情况,但我无法使用任何流行的压缩工具在 Ubuntu Linux 18.04 上执行简单的任务,例如压缩 18.5 GB 的文件,例如压缩,bzip2和7z。它们都报告了类似的警告(不是错误)消息,声称文件大小在压缩过程中发生了变化,而实际上没有其他进程正在访问该文件。例如,当尝试“tar-gz”时,该工具报告:File shrank by <nnnnnnnn> bytes; padding with zeros
,退出时出现错误代码 1,tar 的手册页说这是由于压缩过程中文件发生变化造成的:
退出代码 1:某些文件不同。如果使用 --compare (--diff, -d) 命令行选项调用 tar,则意味着存档中的某些文件与其磁盘副本不同。如果为 tar 指定了 --create、--append 或 --update 选项之一,则此退出代码意味着存档过程中某些文件已更改,因此生成的存档不包含文件集的精确副本。
该文件是 VMDK,当然,当我压缩它时,关联的 VM 会完全关闭。另一方面,我注意到,当压缩文件达到 280 MB 左右的大小时,所有压缩工具都会失败。
我已经检查过了其他类似问题在 ServerFault 上,但我仍然没有得到任何提示来弄清楚发生了什么。链接问题中得票最多的答案说这不是错误,压缩工具只是“简化”了一堆零字节,但如果我在解压 VMDK 文件后尝试运行虚拟机,它会失败,并声称磁盘已损坏。
我完全被这个问题难住了。有什么想法吗?
更新
尝试使用命令将文件复制到另一个目录时cp
,它在读取文件时转储了 I/O 错误。另一方面,dmesg
在读取文件的特定块时报告了 I/O 错误。一切都表明存在磁盘错误(尽管e2fsck
说一切正常并且没有坏块)。由于我已经备份了虚拟机,我将尝试更改主机的磁盘并重新安装 Ubuntu 的新副本,看看会发生什么。我会一直发布这个问题,直到我得到一些结果。
答案1
好的,我正在回答我自己的问题,这可能会让其他人意识到他/她是否真的遇到了硬件问题。
尝试多次压缩有问题的文件(甚至使用不同的压缩器)后,我只是尝试使用将文件复制到另一个目录cp
,但在读取文件时转储了 I/O 错误:
cp: reading `filename': Input/output error
快速浏览一下的dmesg
输出确认了硬件错误,报告读取磁盘上的特定块时出现 I/O 错误。
我以紧急模式启动了操作系统并运行了e2fsck -vf /dev/sda1
,但它没有报告任何坏块。从对我的问题的评论中,用户 Nikita Kipriyanov 建议运行e2fsck -c -f
,但我没有机会运行,因为我已经更换了磁盘。-c
根据手册页:
使 e2fsck 使用 badblocks(8) 程序对设备进行只读扫描,以查找任何坏块。如果发现任何坏块,则将其添加到坏块 inode 中,以防止将其分配给文件或目录。如果两次指定此选项,则将使用非破坏性读写测试进行坏块扫描。
也许读者可以按照 Nikita 的建议运行此命令作为解决方法,但是当磁盘开始出现硬件错误时,最好的选择是尝试保存尽可能多的信息并将系统移至新系统。
祝你好运!