感谢支持
我们一直在努力

Linux下分区只读问题的解决办法

问题背景:
 
我负责的数据库服务器中,有2台是不是会出现分区只读,此时数据库停止写入数据,数据库基本不可用了。我只能关闭数据库,卸载文件系统,重新挂载文件系统,然后再打开数据库就解决了。问题出现的可能点比较多,光纤交换机、存储、服务器硬件、光纤卡、硬盘、操作系统驱动、数据库等都有可能,我从DBA的角度检查了Oracle这一块没问题,fsck检查发现文件系统也无损坏,负责服务器硬件的兄弟不给力,HP、SUSE厂商也都说不出问题到底出在哪里?我就只能自己想办法,在网上搜索出下面这篇文章,感觉说得比较全面。
 
 
 
服务器信息:HP DL388G8/ DL580G7
 
操作系统信息:SUSE Linux11SP1
 
数据库信息: Oracle10.2.0.5
 
存储及光纤交换机:均为HP系列
 
出现问题频率:多的每周2次,少的1月一次。
 
 
 
解决办法:
 
升级操作系统至SUSE Linux 11SP2版本。
 
服务器挂载的远端分区(从存储上划分的卷),一开始是直接就扫描不到PV/VG/LV等信息,必须要手工执行PVSCAN/VGSCAN/LVSCAN命令才可以看到信息,后来不能随系统自动挂载,无论怎么修改fstab文件都没反应。
 
xxx-db:~ # more /etc/fstab
 /dev/disk/by-id/cciss-3600508b1001c2b630be086f93f71f626-part1 swap  swap      defaults              0 0
 /dev/disk/by-id/cciss-3600508b1001c230b6be086f39f71f626-part2 /  ext3      acl,user_xattr        1 1
 proc                /proc                proc      defaults              0 0
 sysfs                /sys                sysfs      noauto                0 0
 debugfs              /sys/kernel/debug    debugfs    noauto                0 0
 usbfs                /proc/bus/usb        usbfs      noauto                0 0
 devpts              /dev/pts            devpts    mode=0620,gid=5      0 0
 #/dev/oraclevg/oraclelv /oradata            ext3      acl,user_xattr        1 2
 /dev/oraclevg/oraclelv  /oradata            ext3      defaults        0 0
 #/dev/mapper/36001438009b03d620000500000f90000  /oradata            ext3  defaults        0 0
 

1、怀疑是文件分区表最后的校验参数过于严格,于是由原来的“1 2”直接修改为“0 0”,结果依然未能解决问题。
 
2、添加如下脚本
 
xxx-db:/etc/init.d # more /etc/init.d/after.local
 pvscan
 vgscan
 lvscan
 mount /dev/mapper/oraclevg-oraclelv /oradata
 
解决了文件系统自动挂载问题,这个应该是SUSE系统升级过程中的BUG。
 
3、之后,没有再次出现分区只读问题,说明系统升级已经解决分区只读问题,后续如果还有问题,我打算再找硬件工程师更新光纤卡驱动和服务器固件。
 
 
 
总结:
 
其实一开始建设系统的时候,就应该做好标准化工作,硬件固件、光纤卡、阵列卡等重要硬件驱动都直接对版本标准化,操作系统版本标准化,这样就可以尽可能低排除oracle数据库以外的问题因素,作为一个DBA,你能涉及的面还是很窄的,你不可能去搞懂所有东西,也没那个精力,所以这个应该是上边领导要关注的事情。如果你很幸运,接管的数据库运行在标准化的硬件上,那你要解决的问题只是数据库的,如果你很悲催,那你可能就要经常被动地陪着各个相关部门的人加班,解决由于非标准化带来的各种千奇百怪的问题。
 
eygle他们在推动数据库设计和前期规划的标准化,希望Oracle DBA在软件设计甚至需求阶段就介入,这个是伟大的事业,祝愿早日成功。
 
谁来推动整个IT行业的硬件平台标准化?

解决思路参考:
 
在日常工作中,经常碰到服务器由于各种各样的原因,出现IO只读故障,将机器重啓后,故障就可以恢復,找不到具体故障原因。
 
目前已知的造成硬盘分区只读的可能原因有:
 
文件系统错误
 
内核相关硬件驱动bug
 
FW固件类问题
 
磁盘坏道
 
硬盘背板故障
 
硬盘綫缆故障
 
HBA卡故障
 
RAID卡故障
 
1.文件系统错误。
 
如 ext3 文件系统错误,比较少见,ext3 文件系统是linux下非常稳定的文件系统,目前文件系统自身bug 造成的 ext3 文件系统错误,非常罕见。
 
当文件系统自身的校验机制发现文件系统存在问题时,为避免文件系统受到进一步的损坏,一般把文件系统设置为只读。
 
tune2fs 命令可以设置当操作系统内核发现有文件系统错误时,操作系统对该文件系统如何处理:
 
-e error-behavior
 
Change  the  behavior  of  the  kernel code when errors are detected.  In all cases, a filesystem error will cause
 
e2fsck(8) to check the filesystem on the next boot.  error-behavior can be one of the following:
 
continue    Continue normal execution.
 
remount-ro  Remount filesystem read-only.
 
panic      Cause a kernel panic.
 
此类只读,一般可以通过自身的检查工具,如 fsck ,进行修復。
 
2.磁盘坏道
 
A.对于单个硬盘的情况,当硬盘出现坏道,且不能够被硬盘自身的纠错机制恢復时,就会报IO错误,从而进一步影响上层文件系统导致只读现象出现。
 
B.对于有冗余raid 的情况,多个硬盘出现坏道导致 raid 卡检验机制无法恢復时,也会对外报该raid IO 错误。
 
badblocks  命令可以对磁盘坏道情况进行检查,该命令位于 e2fsprogs 程序包内。
 
3.FW固件类问题
 
硬盘 fw bug
 
硬盘背板、扩展卡 fw bug
 
HBA卡 fw bug
 
raid 卡 fw bug
 
以及各部件 fw bug 不兼容
 
此类问题,只能够反馈给相应厂家,由厂家协助处理。
 
4.内核相关硬件驱动bug
 
HBA卡、raid卡硬件的内核驱动,如果有bug ,也可能导致硬盘只读。如硬盘出现错误时,驱动的错误处理机制 Error Handler 异常;或者对 SATA 协议的实现,不完全遵循标准。用sysctl  命令调整 dev.scsi.logging_level = 64 可以让内核更多的显示 scsi 层面的信息,有利于排错。
 
5.硬盘背板、硬盘綫缆、HBA卡故障、RAID卡故障
 
这些部件出现故障,都可以造成硬盘只读。这些部件,如果故障现象严重,还是比较容易判断和发现,但对于偶尔不稳定,排查有时候会比较困难,一般是替换法处理。Raid 卡厂家一般有提供 linux 操作系统下的命令行工具,如:megacli hpacucli arrconf等
 
评论补充:
 
inode资源耗尽,也会导致分区只读
 
某个分区出现写满问题后,会出现只读故障。和OS有关系,和硬件关系不大

赞(0) 打赏
转载请注明出处:服务器评测 » Linux下分区只读问题的解决办法
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏