gaoyaohuachina 阅读(154) 评论(0)
导读:在日常工作中,经常碰到服务器由于各种各样的原因,出现IO只读故障,将机器重启后,故障就可以恢复,找不到具体故障原因。频率可能几天或者几周出现1次。
 
目前已知的造成硬盘分区只读的可能原因有:
   文件系统错误
   内核相关硬件驱动bug
   FW固件类问题
   磁盘坏道
   硬盘背板故障
   硬盘线缆故障
   HBA卡故障
   RAID卡故障
 
linux文件系统只读后怎么修复
1 重启系统看是否可以自动修复。
2 使用fsck -y /dev/sda1 进行自动修复。(用”-y”选项来执行该命令对硬盘进行检查和修复)

  添加参数:fsck -y -C -t ext3 /dev/sda1 (一般情况下修复完成后,所有文件移动到 lost+found目录,文件名会被改变)

  (-C 显示进度条 -t 指定文件系统类型 -y 默认自动yes修复)

 

3. 如果fsck修复完成后,启动系统依然自读。

#mount              用于查看哪个模块输入只读,一般显示为:

              /dev/nb1 on /EarthView/RAW type ext3 (ro)(变为只读了)

重新mount,或者umount以后再remount

  umount /dev/nb1
  如果发现有提示“device is busy”,找到是什么进程使得他busy

  fuser -m /mnt/data 将会显示使用这个模块的pid
  fuser -mk /mnt/data 将会直接kill那个pid

  然后重新mount即可。

  还有一种方法是直接remount,命令为

  mount -o rw,remount /mnt/data

 

使用脚本监控linux系统文件只读

使用了一个最笨的原理:

获取服务器分区,然后在每个分区进行创建文件,如果文件创建成功,删除文件,如果没有创建,那么报警文件系统发生只读。

 

#!/bin/bash


datetime=`date '+%F %T'`
hostn=`hostname`
ip=`/sbin/ifconfig | grep 192.168|sed 's/ //g;s/Bcast//g'|awk -F : '{print $2}'`


read_only()
{
        partition=(`df -Th | awk '{print $7}' | xargs`)
        for (( i=`expr ${#partition[@]} - 1`;i>0;i-- ))
        do
                cd ${partition[i]}
                touch readonly_test
                if [ -f "readonly_test" ];then
                        rm -rf readonly_test
                else
                        the_partition[i]="${partition[i]}"
                fi
        done
        if [[ ${#the_partition[*]} != "0" ]];then
                message="${the_partition[*]}分区出现只读"
                echo “文件系统只读”
        fi
}
read_only

 

原创脚本,转载请回复!