執行任何命令時出現“輸入輸出錯誤”
上週一早上,我發現我的伺服器無法執行任何命令,並且顯示“輸入輸出錯誤”。嘗試了半個小時,我發現唯一可以執行的命令是
sudo poweroff -f
(必須使用標誌-f
否則我得到“輸入輸出錯誤”)。我手動啟動伺服器,並檢查系統日誌,但我沒有什麼特別的。我做了一個 smartctl 測試來確認硬碟是否有問題。它沒有錯誤地通過了。
然後這個星期一這個問題再次出現。我關閉伺服器並手動啟動它,它看起來很好,就像什麼都沒發生一樣。然後我使用 msmtest86 8.2 測試記憶棒是否正常。並確保SATA線和硬碟完好,連接可靠。
我想可能是作業系統或文件系統的問題?我的作業系統是 Debian 8.11。你能給我一些建議嗎?謝謝你們!
我發現我的伺服器無法執行任何命令,並且顯示“輸入輸出錯誤”
命令啟動時的錯誤程式碼
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 狀態中直言不諱(我在看著你,東芝);我以前的筆記型電腦硬碟在讀取時突然停止,出現讀取錯誤,並且在其狀態寄存器中仍然顯示“沒有問題”。
如果您的伺服器是關鍵任務,那麼您應該考慮基於RAID的設置。
- 1 **警示故事:**我的室友曾經忽略了這個警告,並且無論如何都要在他的桌面系統上繼續使用文件系統檢查器。他沒有等我檢查它,直到它最終無法啟動。一有機會檢查,磁碟損壞已經無法恢復(500 GB的磁碟只能以蝸牛的速度KB / s勉強讀取,即使經過幾天也沒有發現明顯的連續可讀區域)。
另一方面,在另一個具有相同症狀的情況下,機器所有者聽從了我的警告,並在我可以檢查之前將其關閉。當然,這是硬碟故障。經過半天的GNU DDRescue會話和一個新硬碟後,我給他帶來了一個好消息,他的系統和數據在塊級別上 100% 恢復 - 即所有文件完好無損,無需任何修改即可再次啟動。