龙空技术网

记一次系统磁盘只读错误

GavinDjp 167

前言:

目前朋友们对“linux 磁盘损坏”大体比较看重,大家都想要剖析一些“linux 磁盘损坏”的相关文章。那么小编也在网络上汇集了一些关于“linux 磁盘损坏””的相关内容,希望朋友们能喜欢,各位老铁们一起来了解一下吧!

问题现象

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

排查过程

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 全部检查修复。

相关概念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。

标签: #linux 磁盘损坏