电脑系统磁盘读取错误(记一次系统磁盘只读错误)

问题现象

应用系统在创建文件失败,查看报错日志,错误信息为文件系统只读。

排查过程

1、 检查磁盘空间是否占满;

通过 df -h 查看各分区使用情况。

分区磁盘使用率在50% 以下,排除。

2、 确认是否应该主备切换导致的只读;

确认系统是否类keepalive 主备模式,排除因master节点异常,导致slave 节点切主但没有修改写权限成功。

经排查,该系统不存在主从,为多台服务器高可用。

3、 检查系统message 日志;

在发现问题时间点,对照message日志查看,发现报错如下

kernel: sd 2:0:1:0: [sdb] Unhandled sense code

kernel: sd 2:0:1:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE

kernel: sd 2:0:1:0: [sdb] Sense Key : Medium Error [current]

kernel: sd 2:0:1:0: [sdb] Add. Sense: Unrecovered read error

kernel: sd 2:0:1:0: [sdb] CDB: Write(10): 2a

kernel: Aborting journal on device sdb1-8.

kernel: EXT4-fs (sdb1): delayed block allocation failed for Inode 25 at logical offset 0 with

max blocks 23 with error -30

kernel: kernel: This should not happen!! Data will be lost

kernel: EXT4-fs error (device sdb1) in ext4_da_writepages: Journal has aborted

kernel: EXT4-fs error (device sdb1): ext4_journal_start_sb: Detected aborted journal

kernel: EXT4-fs (sdb1): Remounting filesystem read-only

kernel: EXT4-fs (sdb1): ext4_da_writepages: jbd2_start: 1016 pages, ino 25035545; err -30

EXT4-fs分区错误,导致系统将分区置为只读。

Linux 内核对EXT4的错误处理主要有三种:继续(不处理);内核panic(挂起);将错误分区设置为只读(继续)。

处理模式设置主要是在文件系统物理分区上或者通过mount 参数配置。前者可以通过tune2fs -l /dev/sdb1 查看Errors behavior;后者可以通过mount命令帮助文档了解设置。具体的情况可通过内核源码进确认。

可能原因

可能由于磁盘掉电,文件系统错误,坏道,驱动,HBA卡、RAID卡故障,磁盘老旧长期大量的读写、文件系统文件被破坏、磁盘碎片文件、异常断电、读写中断等。

错误处理思路

1、通过fdisk -l 查看分区具体信息;

2、通过tune2fs -l /dev/sdb1 查看有无错误相关信息。

3、将该节点踢出应用集群,确认该分区的数据,备份该分区数据,避免修复中出现无法mount的情况。

4、尝试使用fsck修复磁盘。

# 1、确认出问题分区编号 $ fdisk -l # 2、卸载分区 $ unmount /dev/sdb1 # 3、检查并修复分区 $fsck /dev/sdb1 ## 注:fsck 可能会导致磁盘损坏或者数据丢失 # 4、重新挂载 $ mount -a ## fsck 退出码如下: # 0:没有错误 # 1:修复了一些文件系统错误 # 2:系统需要被重启 # 4:文件系统错误未被修复 # 8:操作错误 # 16:使用或语法错误 # 32:fsck 被用户取消 # 128:共享库出错 # fsck 常用参数: -t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数 -s : 依序一个一个地执行 fsck 的指令来检查 -A : 对/etc/fstab 中所有列出来的 分区(partition)做检查 -C : 显示完整的检查进度 -d : 打印出 e2fsck 的 debug 结果 -p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行 -R : 同时有 -A 条件时,省略 / 不检查 -V : 详细显示模式 -a : 如果检查有错则自动修复 -r : 如果检查有错则由使用者回答是否修复 -y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候,可以执行 # fsck -y 全部检查修复。

电脑系统磁盘读取错误(记一次系统磁盘只读错误)(1)

相关概念
  • EXT4:第四代扩展文件系统(Fourth EXtended filesystem,EXT4)是Linux系统下的日志文件系统,是EXT3文件系统的后继版本;EXT4分别支持1EB(1EB=1024PB,1PB=1024TB)的文件系统,以及16TB的单个文件;EXT4磁盘结构的inode个数支持40亿,而且EXT4的单个文件大小支持到16T(4K block size) 。EXT3类型文件系统支持最大16TB文件系统和最大2TB文件;EXT3只支持32,000个子目录,而EXT4支持无限数量的子目录。
  • XFS:XFS是一个64位文件系统,最大支持8EB减1字节的单个文件系统,实际部署时取决于宿主操作系统的最大块限制,常用语64位操作系统,发挥更好的性能。
  • SuperBlock:在硬盘分区中,还有一个超级区块 (SuperBlock) ,SuperBlock会记录整个文件系统的整体信息,包括 inode、Block 总量、使用大小、剩余大小等信息,每个 inode 与 block 都有编号对应,方便Linux系统快速定位查找文件。
  • inode:记录文件的属性,权限,同时会记录该文件的数据所在的block编号。
  • block:存储文件的内容,如果文件超过默认Block大小,会自动占用多个Block。
,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页