情况是这样的。我的 UPS 电池最近没电了,但我还没有更换。今天有人过来给家里做电气工作,其中包括关闭电脑所在的断路器。我很聪明,在触发断路器之前就开始关闭计算机,但我在与电工交谈时忘记检查我的计算机在触发断路器之前是否已 100% 关闭。结果:
当我使用 KDE 登录一个帐户时,在登录过程中我开始收到这样的错误:因为只有当我以这个人的身份登录并且仅登录到 KDE 时才会收到这些错误(其他 DE 和其他使用 KDE 的帐户都可以)我认为可以肯定地说,我的 kde 配置中的某些内容被搞砸了。
ata3.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x0
ata3.00: irq_stat 0x40000008
ata3.00: failed command: READ FPDMA QUEUED
ata3.00: cmd 60/08:00:98:b2:78/00:00:13:00:00/40 tag 0 ncq 4096 in
res 41/40:08:9a:b2:78/00:00:13:00:00/00 Emask 0x409 (media error) <F>
ata3.00: status: { DRDY ERR }
ata3.00: error: { UNC }
ata3.00: SB600 AHCI: limiting to 255 sectors per cmd
ata3.00: SB600 AHCI: limiting to 255 sectors per cmd
ata3.00: configured for UDMA/133
sd 2:0:0:0: [sda] Unhandled sense code
sd 2:0:0:0: [sda] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
sd 2:0:0:0: [sda] Sense Key : Medium Error [current] [descriptor]
Descriptor sense data with sense descriptors (in hex):
72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
13 78 b2 9a
sd 2:0:0:0: [sda] Add. Sense: Unrecovered read error - auto reallocate failed
sd 2:0:0:0: [sda] CDB: Read(10): 28 00 13 78 b2 98 00 00 08 00
end_request: I/O error, dev sda, sector 326677146
ata3: EH complete
我的问题分为两部分。
1)我有点害怕,因为我看到这种错误只是基于文件系统中的一个较小的(相对而言)损坏错误。 2)我的kde配置有点长而且复杂。我不想删除整个事情并重新开始。有没有一种方法可以记录启动序列的进度,以便在遇到错误时查看,以便我可以删除那部分配置?
答案1
这与 KDE 无关;你的驱动器有坏扇区。由于您突然断电,可能发生的情况是在写入扇区时断电,使其处于不良状态。当时写入的任何内容都会丢失,但您现在应该能够通过向该扇区写入一些内容来纠正问题。首先,运行这个:
sudo dd if=/dev/sda bs=512 count=1 of=/dev/null skip=326677146
这应该会因 IO 错误而失败。如果是,则继续向该扇区写入零:
sudo dd if=/dev/zero bs=512 count=1 of=/dev/sda seek=326677146
这应该可以工作,然后您应该能够重复第一个命令而不会出现错误。然后您应该使用smartctl
smartmontools 包来检查驱动器是否有错误。运行sudo smartctl -t long /dev/sda
以开始驱动器自检。使用 检查其进度sudo smartctl -a /dev/sda
。如果发现更多坏扇区,您也可以尝试使用它dd
来纠正这些坏扇区。您还需要确保重新分配的扇区计数为零。如果不是,则磁盘存在物理损坏,您应该考虑更换它。
答案2
这些错误并不表示文件系统损坏,而是表示磁盘存在问题。磁盘很可能在一个糟糕的时刻停电,其中一个磁头撞到盘片上——磁盘应该受到保护,免受这种情况的影响,但这并不总是有效(在断电之前通常会出现电源故障)完全地)。
如果您的磁盘支持,请运行smartctl
(从智能监控工具)并badblocks
获得损害评估。然后确保您已备份整个磁盘(ddrescue
或者dd_rescue
可能有帮助——参见从故障驱动器保存数据)。
我建议更换磁盘,因为其可靠性会受到影响。如果您想玩彩票继续使用它,请运行badblocks -o /tmp/badblocks
然后e2fsck -l /tmp/badblocks
将损坏的扇区标记为不可用。