Linux 启动时硬盘上的 I/O 错误

sta*_*ner 4 linux boot io

这是启动 Arch 的屏幕截图。

我想原因是我多次强制关闭我的 Arch linux。(我已经强制关闭我的 Arch,因为我的 Firefox Flash 插件使用了太多内存来停止我的系统。)

启动 Arch linux 时的屏幕截图

注意:我可以在同一个驱动器磁盘上启动我的 Windows 7 系统。所以我认为这不是磁盘问题,主要是分区问题。

更新:我查看了更多信息,分区/dev/sda9/home目录。并且总是在相同的错误sector 798717984。我在 Windows 下使用 DiskGenius 软件来检查错误。然后发现一个错误。并且该分区未格式化。 磁盘天才截图

我想恢复我的 Arch linux。如何解决这个问题?

如果我无法修复此错误,那么如何获取分区数据?

Update2:我真的希望能把这个分区数据保存出来。因为我这个分区有很多重要的东西。我认为第一步是将这个坏分区或整个硬盘驱动器备份到一个映像文件(什么映像文件?),然后让可以修复此分区的人修复。

更多更新:在我使用DiskGenius软件修复分区扇区错误后。然后我e2fsck用来检查。得到错误:

fsck.ext4: Bad magic number in super-block while trying to open /dev/sda9.
/dev/sda9: The superblock could not be read or does not describe a correct ext2 filesystem.
VFS: can't find ext4 filesystem.
Run Code Online (Sandbox Code Playgroud)

(我之前创建的这个损坏的分区/home->/dev/sda9是 ext4。)

我执行命令# mke2fs /dev/sda9来获取块信息:

OS type: Linux
Block size: 4096 (log=2)
Fragment size=4096 (log=2)
Stride = 0 blocks, stripe width = 0 blocks
65536 inodes, 261888 blocks
13094 blocks (5.00%) reserved for super user
First data block = 0
Maximum filesystem bloack = 268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Super block backup stored on blocks:
    32768, 988304, 163840, 229376
Run Code Online (Sandbox Code Playgroud)

dep*_*uid 6

除了使控制台混乱的错误消息之外,您是否也可以登录和使用 Arch Linux?如果是这样,那么很可能您的硬盘驱动器出现故障,只是还没有完全死机。表示“I/O 错误”的行表示内核在尝试从硬盘驱动器读取数据时遇到错误,以“ata1.00”开头的行提供有关硬件中读取请求内部结构的详细信息。Windows 不会显示此类消息,这可能是您尚未在其中看到任何问题的原因。

如果您因断电而导致文件系统损坏,那么内核应该仍然能够从驱动器读取数据,但无法解释数据属于哪些文件。这将导致一组不同的错误。

另一种判断方法是重新启动并查看是否出现类似的错误但详细信息不同,例如扇区号与 798717984 不同。如果是这样,则意味着错误在某种程度上是随机发生的,这是硬件故障的另一个迹象。同样,这很可能是您的硬盘驱动器,尽管另一个硬件组件可能出现故障。

我建议在为时已晚之前进行备份并更换驱动器。

OP 更新后编辑:

如果只有一个扇区坏了,您可以e2fsck -c -y按照金发姑娘的建议使用,如果修复了错误,则继续使用该驱动器。但是现代驱动器内置了透明的纠错功能,根据我的经验,当操作系统开始在正常 I/O 过程中检测到错误时,驱动器已接近其使用寿命。

无论您采取何种行动,在尝试修复任何内容之前,请务必确保您对整个驱动器进行了良好的备份!