linux造成只读模式的原因和解决方法

造成硬盘分区只读的可能原因有:

文件系统错误,内核相关硬件驱动bug,FW固件类问题,磁盘坏道

硬盘背板故障,硬盘线缆故障,HBA卡故障,RAID卡故障,随意开关机系统损坏

使用用 fsck – y /dev/sda (/dev/sda指你需要修复的分区) 来修复文件系统

mount -t vfat /dev/sda1 /mnt

fsck不仅可以对文件系统进行扫描,还能修正文件系统的一些问题。注意的是fsck扫描文件系统时一定要在单用户模式、修复模式或把设备umount后进行。建议在单用户模式下运行。如果扫描正常运行中的系统,会造成系统文件损坏。
文件系统扫描工具有fsck、fsck.ext2、fsck.ext3、fsck.ext4、fsck.msdos、fsck.cramfs、fsck.ext4dev、fsck.vfat。最好是根据不同的文件系统来调用不同的扫描工具,比如ext3的文件系统使用fsck.ext3,ext4文件系统使用fsck.ext4等。

1.文件系统错误。

如 ext3 文件系统错误,比较少见,ext3 文件系统是linux下非常稳定的文件系统,目前文件系统自身bug 造成的 ext3 文件系统错误很少见。一般可以通过自身的检查工具,如 fsck ,进行修复。

当文件系统自身的校验机制发现文件系统存在问题时,为避免文件系统受到进一步的损坏,一般把文件系统设置为只读。

tune2fs 命令可以设置当操作系统内核发现有文件系统错误时,操作系统对该文件系统如何处理:

fat__get_entry: 14 callbacks suppressed
FAT-fs (mmcblk1p1): Directory bread(block 12782) failed
FAT-fs (mmcblk1p1): Directory bread(block 12783) failed
FAT-fs (mmcblk1p1): Directory bread(block 12784) failed
FAT-fs (mmcblk1p1): Directory bread(block 12785) failed
FAT-fs (mmcblk1p1): Directory bread(block 12786) failed
FAT-fs (mmcblk1p1): Directory bread(block 12787) failed
FAT-fs (mmcblk1p1): Directory bread(block 12788) failed
FAT-fs (mmcblk1p1): Directory bread(block 12789) failed
FAT-fs (mmcblk1p1): Directory bread(block 12782) failed
FAT-fs (mmcblk1p1): Directory bread(block 12783) failed
FAT-fs (mmcblk1p1): FAT read failed (blocknr 289)

remount-ro  Remount filesystem read-only.

panic       Cause a kernel panic.

2.磁盘坏道

对于单个硬盘的情况,当硬盘出现坏道,且不能够被硬盘自身的纠错机制恢复时,就会报IO错误,从而进一步影响上层文件系统导致只读现象出现。对于有冗余raid 的情况,多个硬盘出现坏道导致 raid 卡检验机制无法恢复时,也会对外报该raid IO 错误。

badblocks  命令可以对磁盘坏道情况进行检查,该命令位于 e2fsprogs 程序包内。

3,系统没有正常关机,导致虚拟磁盘出现文件系统错误。

重启系统后使用root进入单用户模式,运行

fsck.ext3 -y /dev/vda3

说明:ext3的文件系统使用fsck.ext3,ext4文件系统使用fsck.etx4。/dev/vda3是系统/根分区。运行完毕后,reboot重启系统就恢复正常。20多台出问题的都是这样修复的,无失败案例。fsck.ext3开始进入扫描、修正文件系统,这个过程有时很快,有时比较长,中间有数次停顿的过程,只需等待即可,千万不要以为死机而重启服务器。修正完文件系统后,如果没有提示重启系统,也需要reboot来重启系统。
fsck.ext3
[语法]
fsck.ext3[必要参数][选择参数][设备代号]
[功能]
fsck.ext3命令:针对ext3文件系统进行检测修复

4.内核相关硬件驱动bug

HBA卡、raid卡硬件的内核驱动,如果有bug ,也可能导致硬盘只读。如硬盘出现错误时,驱动的错误处理机制 Error Handler 异常;或者对 SATA 协议的实现,不完全遵循标准。用sysctl  命令调整 dev.scsi.logging_level = 64 可以让内核更多的显示 scsi 层面的信息。

5.硬盘背板、硬盘线缆、HBA卡故障、RAID卡故障:和OS有关系,和硬件关系不大

这些部件出现故障,都可以造成硬盘只读。这些部件,如果故障现象严重,还是比较容易判断和发现,但对于偶尔不稳定,排查有时候会比较困难,一般是替换法处理。Raid 卡厂家一般有提供 linux 操作系统下的命令行工具,如:megacli hpacucli arrconf等。inode资源耗尽,也会导致分区只读。某个分区出现写满问题后,会出现只读故障。

6. 使用LVM的linux,还可能由于操作系统升级时的bug导致文件系统变成只读。需在/etc/init.d/rc.local(REDHAT),或 /etc/init.d/after.local (suse)输入如下命令pvscan               vgscan                          lvscan                 mount -a

7,FW固件类问题:只能够反馈给相应厂家,由厂家协助处理。

硬盘 fw bug

硬盘背板、扩展卡 fw bug

HBA卡 fw bug

raid 卡 fw bug

以及各部件 fw bug 不兼容

 

 

要是开机自启动不能卸载然后执行fsck的解决办法:

#!/bin/sh

echo "~~~~~~~~~~startupip~~~~~~~~"

mount /dev/mmcblk1p1 /mnt/

cd /mnt

./ip.sh

 

#!/bin/sh

echo "~~~~~~~~~~startupzk1~~~~~~~~"

mount /dev/mmcblk1p2 /tmp/

cd /tmp

./zk.sh

 

#!/bin/sh

echo "~~~~~~~~~~startupzk2~~~~~~~~"

mount /dev/mmcblk1p3 /opt/

cd /opt

./bf.sh

你可能感兴趣的:(linux造成只读模式的原因和解决方法)