来自 HDD 的 DRDY ERR

yog*_*gmk 7 usb boot

突然间,我的笔记本电脑运行 linux 时开始出现 DRDY ERR..​​一些消息看起来像..

    ata1:00: status: { DRDY ERR }
    ata1.00: error {UNC }
    ata1:00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
    ata1:00: BMDMA stat 0x25
    ata1:00: failed command: READ DMA
Run Code Online (Sandbox Code Playgroud)

最后它让我进入命令提示符,要求我输入运行级别,然后

    INIT: no more processes left in this runlevel
Run Code Online (Sandbox Code Playgroud)

怀疑硬盘崩溃,我将其取出并在另一台 PC 中用作外部 USB 硬盘驱动器,我能够安装并查看其中的所有分区和文件。所以我认为光盘没问题。

[编辑/更新]

我还可以从带有 linux 的 USB 笔式驱动器启动到笔记本电脑),甚至可以查看磁盘上的所有分区并访问它们。

还取出硬盘并将其放入外壳中并尝试启动到同一台笔记本电脑,但出现以下不同的错误

    end_request: critical target error, dev sda, sector 32839936
    EXT4_fs error: (device sda5): ext4_find_entry:935: inode #393217: comm init: reading directory lblock 0

    INIT: No inittab file found
    Enter runlevel:
Run Code Online (Sandbox Code Playgroud)

所以我想,硬盘可以作为存储设备使用,但不能启动。该硬盘上的分区方案如下,如果有帮助的话..(GPT 方案)

    partition   FileSystem  size    flags
    ---------   ----------- ----    -----
    /dev/sda1   unknown     2.00MB  bios_grub
    /dev/sda2   ext2        128MB           # was supposed to be common boot partition for chain loading
    /dev/sda3   swap        1.5GB
    /dev/sda4   ext4        8GB         # Linux 1 (somehow, Grub does not show this in the menu, cannot boot into)
    /dev/sda5   ext4        8GB         # Linux 2 (I could only boot into this one from Grub.)
    /dev/sda6   ext4        94GB        # DATA
    unallocated _           1MB
Run Code Online (Sandbox Code Playgroud)

我已经一个接一个地安装了 linuxes,实际上想在 /dev/sda2 和 chainload Linux 1 & 2 中安装 Grub,但在我能做到之前,我遇到了这个障碍!

有任何想法吗?解决方案?

[更新 2]

  • 问题标题不再适用 *

我从 USB 启动并在所有分区上执行了“fsck”。所有(除了/sda5)都报告干净。/dev/sda5 报告了许多错误(可能大约有几百个),我只在所有提示中输入“y”。中间有诸如“链接“丢失+找到”之类的消息......“在所有分区上运行 2 次后,当我从硬盘重新启动时,这是最新的错误......

    INIT: verision 2.88 booting
    INIT: No inittab file file found

    Enter runlevel:
Run Code Online (Sandbox Code Playgroud)

看起来我可以取回操作系统实例并启动吗?

use*_*ser 5

您报告的第一个错误:

ata1:00: status: { DRDY ERR }
ata1.00: error {UNC }
ata1:00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
ata1:00: BMDMA stat 0x25
ata1:00: failed command: READ DMA
Run Code Online (Sandbox Code Playgroud)

表示对READ DMAATA 端口 1 上的磁盘执行 ATA 命令失败(状态包括ERRerror 。该端口很可能是硬盘,并且错误表明驱动器有问题。该DMA部分可能会被忽略;DMA 是直接内存访问,这是目前占主导地位的传输模式,如果您遇到 RAM 或 RAM 总线问题,以至于反复遇到类似问题,那么如果系统处于正常状态,您可能会看到更多错误。完全能够发挥作用。

第二个错误:

end_request: critical target error, dev sda, sector 32839936
EXT4_fs error: (device sda5): ext4_find_entry:935: inode #393217: comm init: reading directory lblock 0
INIT: No inittab file found
Run Code Online (Sandbox Code Playgroud)

说 /dev/sda 的扇区 32839936 上存在一些问题,该扇区的 512 字节扇区使我们在物理上接近 /dev/sda5 分区的末尾,这与device sda5文件系统驱动程序所报告的相加。报告的错误init以及文件系统驱动程序的错误详细信息表明文件系统存在问题,导致 /etc/inittab 不可用或(不太可能)不可读。这意味着根目录、/etc 目录或 /etc/inittab 文件条目以某种方式参与了损坏。考虑到 inode 号,我会特别将 /etc/inittab 视为罪魁祸首,直到被证明是错误的。

你写(我的重点):

由于怀疑 HDD 崩溃,我将其取出并在另一台 PC 上用作外部 USB HDD 驱动器,并且我能够挂载并查看其中的所有分区和文件。所以我认为光盘没问题。

我想说你的假设是没有根据的。磁盘显然有问题;运气好的话,很容易修复。

在您的情况下,我要做的第一件事是刷新该磁盘上所有内容的备份。确保您不会覆盖或删除最近备份中的任何内容,因为您肯定会需要它。也许最好的选择是将您能够访问的所有内容进行全新备份到新的(或至少以前未用于您自己的备份)驱动器上。制作该副本时,源上可能会出现一些 I/O 错误。

其次是尝试恢复。如果幸运的话,考虑到这些错误,这是一个单扇区或几个扇区的问题,导致了少量的文件系统损坏,在这种情况下e2fsck 应该能够修复大部分损坏。您的某些文件可能已经消失,但运气好的话,您可能能够在文件系统挂载根目录下的 /lost+found 中找到它们(例如,如果您将 /dev/sda5 挂载在 /data/lost+found 上)数据)在让 e2fsck 尽其所能之后。否则,请与问题出现之前的最新备份进行比较,并从备份中恢复相关文件。(我是否提到过,如果发生不好的事情,备份是有用的,因为它们不可避免地会发生?)

第三个问题是您是否可以信任该驱动器以供将来使用。从驱动器的角度来看,一些坏扇区不一定是灾难性的,但在大多数外形规格中,大约 100 GB 大小的旋转驱动器实际上无法在今天采购新的驱动器,这表明这是一个相对较旧的驱动器。就我个人而言,我可能会接受该驱动器此时已超过其使用寿命并进行更换,但话又说回来,当涉及到我的数据时,我相当偏执;你的旅费可能会改变。您必须权衡更换驱动器的成本与驱动器完全故障以及随后驱动器上所有数据全部丢失的风险。