记一次断电偶然导致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命令修复。

 

posted @ 2020-10-12 17:42  H·c  阅读(4896)  评论(1编辑  收藏  举报