上周一早上,我发现我的服务器无法运行任何命令,并且显示“输入输出错误”。尝试了半个小时,我发现唯一可以执行的命令是sudo poweroff -f
(必须使用标志-f
,否则我得到“输入输出错误”)。
我手动启动服务器,并检查系统日志,但没有什么特别的。我做了一个smartctl测试来确认硬盘是否有问题。并且顺利通过。
然后这个周一这个问题又出现了。我关闭服务器并手动启动它,看起来很好,就像什么都没发生一样。然后我使用msmtest86 8.2测试内存条是否正常。并确保SATA电缆和硬盘状况良好且连接可靠。
我想可能是操作系统或文件系统的问题?我的操作系统是 Debian 8.11。你能给我一些建议吗?谢谢你们!
答案1
我发现我的服务器无法运行任何命令,并且显示“输入输出错误”
EIO
当文件系统损坏时,命令启动时会出现错误代码(“输入/输出错误”);或者更糟糕的是,当您在有故障的存储上运行时。
交叉手指;无论哪种方式,请注意此时除非确实必要,否则不应尝试打开服务器电源。1
考试
有一种可靠的方法可以区分两个根本原因:对系统进行块级读取扫描,并留意内核消息。
- 使用 GNU/Linux 恢复启动盘启动系统。
- 将系统更改为纯旧文本控制台(按 Ctrl+Alt+F1);不要为此使用图形终端。
- 以 root 身份登录。
- 运行
dmesg -E
以在控制台上启用实时内核消息显示。 - 不过运行
dmesg -n debug
让低级内核消息。 - 运行
blkid
看看是哪个磁盘包含系统分区。 (请注意,blkid
将列出分区;从分区路径末尾去除编号,您将获得磁盘) - 运行
time -p dd if=/dev/sda of=/dev/null bs=4M
以进行整个-磁盘阅读测试(请仔细输入)。如果您的系统磁盘不是/dev/sda
,相应地替换。 - 观看屏幕(需要很长时间)...
结果
在成功且顺利完成的最佳情况下
dd
,这可能是文件系统问题。- 如果您愿意从启动磁盘进行文件系统检查,那么现在就可以这样做(推荐)。
- 如果您想让系统自行对其进行排序,请重新启动(也删除启动磁盘),然后启动常用系统,但将其
fsck.mode=force
附加到内核命令行的末尾。 (看这个问题详情) - 不过,讨论文件系统检查的结果会产生不同的问题。
然而,在最坏的情况下,你会在屏幕上看到这样的内核消息:
ata2.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0 ata2.00: irq_stat 0x40000001 ata2.00: failed command: READ DMA EXT ata2.00: cmd 25/00:08:78:15:c5/00:00:6c:00:00/e0 tag 0 dma 4096 in res 51/40:00:78:15:c5/00:00:6c:00:00/e0 Emask 0x9 (media error) ata2.00: status: { DRDY ERR } ata2.00: error: { UNC } ata2.00: configured for UDMA/100 sd 1:0:0:0: [sda] Unhandled sense code sd 1:0:0:0: [sda] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE sd 1: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 6c c5 15 78 sd 1:0:0:0: [sda] Add. Sense: Unrecovered read error - auto reallocate failed sd 1:0:0:0: [sda] CDB: Read(10): 28 00 6c c5 15 78 00 00 08 00 end_request: I/O error, dev sda, sector 1824855416 Buffer I/O error on device sda, logical block 228106927 ata2: EH complete
寻找关键部分:
DRDY
,ERR
并UNC
在大括号中Medium Error
地位Unrecovered read error
感知信息
如果您浏览并在消息中找到这些内容(即使一次),它们表明您正面临物理磁盘错误。
当这种情况发生时,不要让
dd
完成,按 Ctrl+C 停止,现在;关闭您的系统,并且将您的磁盘带到数据恢复店你信任。如果您没有找到上述最坏情况的迹象,而是发现重复出现这种内核消息:
ata2: exception Emask 0x10 SAct 0x0 SErr 0x4040000 action 0xe frozen ata2: irq_stat 0x00000040, connection status changed ata2: SError: { CommWake DevExch } ata2: hard resetting link ata2: link is slow to respond, please be patient (ready=0)
关键部分:
hard resetting link
link is slow to respond
那么您将面临 SATA 链接问题(例如布线不良):按 Ctrl+C 停止,关闭系统,修复磁盘电缆和连接,然后重试。
旁注
我做了一个smartctl测试来确认硬盘是否有问题。并且顺利通过。
当心有些硬盘的 SMART 状态直接表明了谎言(我在看着你,东芝);我以前的笔记本电脑硬盘在读取时突然停止,喷出读取错误,并且状态寄存器中仍然显示“没有问题”。
如果您的服务器是关键任务,那么您应该考虑袭击基于设置。
1 警示故事:我的室友曾经忽略了这个警告,并让文件系统检查器在他的桌面系统上运行。他没等我查就查了最终无法启动。当我有机会检查时,磁盘损坏已经无法恢复(500GB磁盘只能勉强以蜗牛速度KB/s读取,并且几天后也没有发现明显的连续可读区域)。
另一方面,在另一起具有相同症状的案例中,机器所有者听从了我的警告,将其搁置,直到我可以检查它。当然,这是硬盘故障。经过半天的时间GNU DDR救援会话和一个新硬盘后,我给他带来了一个好消息,他的系统和数据在块级别上已 100% 恢复 - 即所有文件完好无损,并且无需任何修改即可再次启动。
答案2
尽管驱动器通过了所有 SMART 测试,但在导航文件夹和访问文件时,我在 Linux 服务器(运行 Debian 10)上遇到了此错误。我无法使用 Stackexchange 上发布的任何答案解决该问题。
我在 3.5 英寸驱动器托架中使用 2.5 英寸硬盘,结果发现驱动器因 SATA 连接器振动而丢失。我关闭服务器并将驱动器牢固地重新插入,错误消失了。