机房偶然的一次断电中,恢复服务器后出现了 无法读写磁盘。
其他挂载的磁盘均无异常
查询日志得知
[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命令修复。