記一次斷電偶然導致Linux磁盤I/O故障無法讀寫


機房偶然的一次斷電中,恢復服務器后出現了 無法讀寫磁盤。

其他掛載的磁盤均無異常

查詢日志得知

[root@huidou03 data]# dmesg|grep error 
[Firmware Warn]: GHES: Poll interval is 0 for generic hardware error source: 1, disabled.
sas: ata1: end_device-0:0: dev error handler
sas: sas_eh_handle_sas_errors: task 0xffff880377ee3840 is aborted
sas: sas_eh_handle_sas_errors: task 0xffff880377ee35c0 is aborted
sas: ata1: end_device-0:0: cmd error handler
sas: ata1: end_device-0:0: dev error handler
sas: sas_ata_task_done: SAS error 8a
ata1.00: failed to IDENTIFY (I/O error, err_mask=0x5)
end_request: I/O error, dev sda, sector 1950622088
end_request: I/O error, dev sda, sector 1950622080
JBD2: I/O error detected when updating journal superblock for sda1-8.
EXT4-fs error (device sda1) in add_dirent_to_buf: Journal has aborted
EXT4-fs error (device sda1) in ext4_rename: Journal has aborted
EXT4-fs (sda1): previous I/O error to superblock detected
EXT4-fs error (device sda1) in ext4_da_writepages: IO failure
EXT4-fs (sda1): previous I/O error to superblock detected
EXT4-fs error (device sda1): ext4_journal_start_sb: Detected aborted journal
JBD2: Detected IO errors while flushing file data on sda1-8
EXT4-fs error (device sda1): __ext4_get_inode_loc: unable to read inode block - inode=23068673, block=92274720
EXT4-fs error (device sda1): __ext4_get_inode_loc: unable to read inode block - inode=33292289, block=133169184
EXT4-fs error (device sda1): __ext4_get_inode_loc: unable to read inode block - inode=83623937, block=334495776
EXT4-fs error (device sda1): __ext4_get_inode_loc: unable to read inode block - inode=105906177, block=423624736
EXT4-fs error (device sda1): __ext4_get_inode_loc: unable to read inode block - inode=94109697, block=376438816
EXT4-fs error (device sda1): __ext4_get_inode_loc: unable to read inode block - inode=87818241, block=351272992
EXT4-fs error (device sda1): __ext4_get_inode_loc: unable to read inode block - inode=20840449, block=83361824

 

磁盤掛了。。。

 

我單純的以為 可能是系統I/O異常 就reboot 重啟了。

發現無法進入系統, 又報 BIOS  異常,又報無法找到啟動盤

我暈了。

調整思路開始操作

斷電,拆機,重置BIOS,插電,開機

一頓猛如虎的操作,結果依舊異常

 

后斷電靜置了10分鍾

插電,開機,進救援模式

按 ‘e’ 到第二行里 加了 'selinx=0'

重啟,終於能進系統了。 

然后就報 UUID:XXXXXX 一堆 error。。。

趕緊把出故障的 磁盤 在  /etc/fstab 里面對應的 UUID 給注釋掉, 因為系統啟動時會自動 mount UUID 對應的磁盤

 

因為那個出了故障 所以啟動時無限報錯,可以 df -h 查詢到該磁盤 ,但是無法讀取內容

回報故障

ls: cannot access xxx: Input/output error

 

這時候就要進入 單用戶模式 進行修復了

 

[root@huidou03 data]#init 1 

[root@huidou03 data]# runlevel 
N 1

 

讓他自動修復、

 fsck.ext4 -a  /dev/sda1

[root@huidou03 data]# fsck.ext4 /dev/sda1
xxxxxxx /dev/sda1 clear xxxxx

 

再將   /etc/fstab 里面對應的 UUID 給注釋去掉

reboot 重啟

完美搞定!

 

 

fsck簡介
    fsck不僅可以對文件系統進行掃描,還能修復文件系統的一些問題,要注意:fsck掃描文件系統時一定要在單用戶模式下,修復模式下,或者把磁盤umount 后進行。
    警告:如果掃描運行中的系統,會造成系統文件的損壞。
    文件系統掃描工具有很多,其中fsck默認支持文件系統ext2,如果是其他的文件系統就需要fsck.ext3
    最好通過不同的文件系統來調用不同的掃描工具。
    
    必要參數:

-a 非互交模式,自動修復

 -c 檢查是否存在有損壞的區塊。

 -C<反敘述器> fsck.ext3命令會把全部的執行過程,都交由其逆向敘述,便於監控程序

 -d 詳細顯示命令執行過程

 -f 強制進行檢查

 -F 檢查文件系統之前,先清理該保存設備塊區內的數據

 -l<損壞區塊文件> 把文件中所列出的損壞區塊,加入標記

 -L<損壞區塊文件> 清除所有損壞標志,重新標記

 -n 非交互模式,把欲檢查的文件系統設成只讀

 -P<數字>  設置fsck.ext2命令所能處理的inode大小為多少

 -r 交互模式

 -R 忽略目錄

 -s 順序檢查

 -S 效果和指定“-s”參數類似

 -t  顯示fsck.ext2命令的時序信息。

 -v 顯示詳細的處理過程

 -y 關閉互動模式


查看當前運行級別:runlevel 切換到單用戶模式下:init 1  然后再使用fsck命令修復。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM