機房偶然的一次斷電中,恢復服務器后出現了 無法讀寫磁盤。
其他掛載的磁盤均無異常
查詢日志得知
[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命令修復。