var
来源:景安IDC资讯作者:server发布时间:2015-10-10点击:2496
摘要:景安的一个客户,利用两台服务器+磁盘阵列做了一个双机热备的Web系统,所有网站数据都存在磁盘阵列中,两台服务器共享一个磁盘阵列分区,在正常情况下主机挂载磁盘阵列分区提供网站服务,主机故障时备份机接管磁盘阵列分区继续提供网站服务。
1、案例现象
一年来双机热备用的好好的,可是突然网站无法添加数据了,不过网站还可以正常访问,服务器和磁盘阵列也没有任何警告信息。
2、解决思路
根据客户的反馈信息,景安运维人员做了如下排查:
(1)网站程序可能出现问题
(2)服务器磁盘故障
3、排查问题
首先景安运维人员通知客户的研发人员对网站程序进行排查。经过排查,并没有发现程序有问题,而在程序日志中发现了一条信息:
java.lang.RuntimeException:Cannot make directory:file:/www/data/html/2015-03-30
根据这个输出可知,程序不能创建目录,那么尝试手动创建一个目录试试,登录Web服务器,在/www/data/html目录下创建一个目录test,操作如下:
[root@localhost html]# mkdir test
mkdir:cannot creat directory 'test':Read-only file system
从这个输出信息可知,/www/data/html目录所在的磁盘分区出现了问题,通过检查发现,/www/data/html目录正是挂载的磁盘阵列分区,于是问题原因找到了。
4、解决问题
磁盘出现“read only file system”的原因有很多种,可能是文件系统数据块出现不一致导致的,也有可能是磁盘故障造成的。主流的ext3、ext4文件系统都有很强的自我修复机制,对于简单的错误,文件系统一般可自行修复,当遇到致命错误无法修复时,文件系统为了保证数据一致性和安全,会暂时屏蔽文件系统的写操作,将文件系统变为只读,进而出现了上面的“read only file system”现象。
手工修复文件系统错误的命令是fack,在修复文件系统前,最好卸载文件系统所在的磁盘分区:
[root@localhost ~]# umount/www/data
umount:/www/data:device is busy
提示无法卸载,可能这个磁盘中还有文件对应的进程在运行,检查如下:
[root@localhost ~]# fuser -m/dev/sdb1
/dev/sdb1: 8800
接着检查一下8800这个端口对应是什么进行,如下图:
原来是系统的apache进程还没有停止,停止apache,成功卸载磁盘,操作如下:
[root@localhost ~]#/usr/local/apache2/bin/apachectl stop
[root@localhost ~]# umount/www/data
最后,执行修复操作,如下图:
修复过程比较简单,上面省略了很多输出信息。修复的时间根据磁盘大小和文件系统损坏程度而定。如果有些数据无法修复,会提示是否删除,此时可根据情况选择。修复完成后,被删除的文件会保留在对应磁盘分区挂载点lost+found目录中。
修复完成后,执行挂载操作:
[root@localhost ~]# mount/dev/sdb1/www/data
最后,在/www/data目录下验证是否可以成功创建文件,至此,问题圆满解决。
写在最后:“read only file system”这个问题经常发生在有大量磁盘读写操作且磁盘分区很大的环境中。
版权声明:本文系技术人员研究整理的智慧结晶,转载勿用于商业用途,并保留本文链接,侵权必究!