Linux 系统 “Read-only file system” ” 错误 与 解决方法

这个问题经常发生在有大量磁盘读写操作且磁盘分区很大的环境中,下面简单描述下此案例的应用环境:这是一个 Web 服务器故障案例,客户利用两台服务器加一个磁盘阵列做了一个双机热备的 Web 系统,所有网站数据都存储在磁盘阵列中,两台服务器共享一个磁盘阵列分区,在正常情况下主机挂载磁盘阵列分区提供网站服务,主机故障时备机接管磁盘阵列分区继续提供网站服务。

1 . 案例现象

接到客户电话说他们的网站无法添加数据了,不过网站还可以正常访问,服务器和磁盘阵列也没有任何告警信息。

2 . 解决思路

根据这个简单信息,基本排查思路如下:

  网站程序可能出现问题了

  服务器磁盘故障

3 . 排查问题

首先通知研发人员对网站程序问题进行排查。经过检查,并没有发现程序有问题,而在程序日志中发现了一条信息:

java.lang.RuntimeException: Cannot make directory: file:/www/data/html/2013-03-30

根据这个输出可知,程序不能创建目录,那么尝试手动创建一个目录试试,登录 Web服务器,在/www/data/html 目录下创建一个目录 test,操作如下:

[root@localhost html]# mkdir test

mkdir: cannot create directory `test': Read-only file system

从这个输出信息可知,/www/data/html 目录所在的磁盘分区出现了问题,通过检查发现,/www/data/html 目录正是挂载的磁盘阵列分区,于是问题原因找到了。

4 . 解决问题

磁盘出现“Read-only file system”的原因有很多种,可能是文件系统数据块出现不一致导致的,也有可能是磁盘故障造成的。主流的 ext3、ext4 文件系统都有很强的自我修复机制,对于简单的错误,文件系统一般可自行修复,当遇到致命错误无法修复时,文件系统为了保证数据一致性和安全,会暂时屏蔽文件系统的写操作,将文件系统变为只读,进而出现了上面的“Read-only file system”现象。

手工修复文件系统错误的命令是 fsck,在修复文件系统前,最好卸载文件系统所在的磁

盘分区:

[root@localhost ~]# umount /www/data

umount: /www/data: device is busy

提示无法卸载,可能这个磁盘中还有文件对应的进程在运行,检查如下:

[root@localhost ~]# fuser -m /dev/sdb1

/dev/sdb1: 8800

接着检查一下 8800 这个端口对应是什么进程,如图所示,查询 8800 端口对应的进程信息:

 

原来是系统的 apache 进程还没有停止,停止 apache,成功卸载磁盘,操作如下:

[root@localhost ~]#/usr/local/apache2/bin/apachectl stop

[root@localhost ~]# umount /www/data

最后,执行修复操作,如图所示。用 fsck 命令修复磁盘分区。

 

修复过程比较简单,上面省略了很多输出信息。修复的时间根据磁盘大小和文件系统损

坏程度而定。如果有些数据无法修复,会提示是否删除,此时可根据情况选择。修复完成后,

被删除的文件会保留在对应磁盘分区挂载点的 lost+found 目录中。

修复完成后,执行挂载操作:

[root@localhost ~]# mount /dev/sdb1 /www/data

最后,在/www/data 目录下验证是否可以成功创建文件,至此,问题圆满解决。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深海天哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值