zoukankan      html  css  js  c++  java
  • 记一次断电偶然导致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命令修复。

  • 相关阅读:
    C#解析数组形式的json数据
    js中的Array数组清空
    H5在js中向指定的元素添加样式
    C#的扩展方法
    C#常用设计模式
    Peasy.NET学习之并发问题处理
    dev中 ,usercontrol打印界面内容,打印预览和打印
    PL SQL 存储过程 SQL SERVER创建存储过程及调用,Oracle创建存储过程及调用
    C# 事务的创建,提交和回滚
    dev 中 字符串转中文拼音缩写,对grid列表进行模糊匹配,grid获取焦点行,gridlookupedit控件用拼音模糊匹配下拉选项
  • 原文地址:https://www.cnblogs.com/huidou/p/13804177.html
Copyright © 2011-2022 走看看