centos文件系统变为只读的解决处理

时间:2024-03-10 08:05:38

 

 

http://www.linuxidc.com/Linux/2011-01/31758.htm

Linux系统重启或无故变为只读造成网站无法正常访问的简单临时的做法:

一、

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

  /dev/hda1 on / type ext3 (rw)
  none on /proc type proc (rw)
  usbdevfs on /proc/bus/usb type usbdevfs (rw)
  none on /dev/pts type devpts (rw,gid=5,mode=620)
  /dev/hda5 on /home type ext3 (rw)
  none on /dev/shm type tmpfs (rw)
  /dev/hda2 on /usr/local type ext3 (rw)
  /dev/nb1 on /EarthView/RAW type ext3 (ro)(变为只读了)


  2、如果发现有ro,就重新mount,或者umount以后再remount

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

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

  然后重新mount即可。

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

  mount -o rw,remount /mnt/data


二、具体深入的做法,情况不同可以自行选择:

服务器/var/log/messages报错 :

end_request: I/O error, dev sda, sector 122194293 Buffer I/O error on device sda1, logical block 446493 lost page write due to I/O error on sda1

下面是整个处理全过程

[root@www.linuxidc.com ~]# fdisk -lu #第一步 :找出本地扇片所在的分区。 
Disk /dev/sda: 73.4 GB, 73407868928 bytes
255 heads, 63 sectors/track, 8924 cylinders, total 143374744 sectors
Units = sectors of 1 * 512 = 512 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 63 4096574 2048256 83 Linux
/dev/sda2 4096575 75778604 35841015 83 Linux
/dev/sda3 75778605 129034079 26627737+ 83 Linux
/dev/sda4 129034080 143364059 7164990 5 Extended
/dev/sda5 129034143 139267484 5116671 83 Linux
/dev/sda6 139267548 143364059 2048256 82 Linux swap


[root@www.linuxidc.com ~]# tune2fs -l /dev/sda3 |grep "Block size" #找到block大小。 
Block size: 4096

(122194293-75778605)*512/4096 =528691 利用公式算出逻辑块地址

b = (int)((L-S)*512/B)

[root@www.linuxidc.com ~]# debugfs
debugfs 1.35 (28-Feb-2004)
debugfs: open /deb/sda3
/deb/sda3: No such file or directory while opening filesystem
debugfs: open /dev/sda3
debugfs: icheck 582391
Block Inode number
582391 277584
debugfs: ncheck 277584
Inode Pathname
277584 /users/inn.net.cn/data/upload/download/innshow004.rar
debugfs: quit
[root@www.linuxidc.com ~]#dd if=/dev/zero of=/dev/sda1 bs=4096 count=1 seek=582391 #找到这个快的文件之后,需要做好备份,我们强制把它设置为0字节。 
[root@www.linuxidc.com ~]# sync

 

 

 

http://bbs.voip88.com/thread-430-1-1.html

使用 fsck -y ,如果有執行修復且當出現檔案異常無法回復時,系統會將它移至 lost+found,並且以 inode 命名。如果硬碟或檔案分區有損壞,在做完 fsck -y 後, 如發現 lost+found 新增了許多檔案,那表示原來的檔案系統,有不少檔案已遺失,這些可能造成系統無法運行。

 

http://www.keyofnet.com/?p=398

 

今天闲来无事,修改了一下/etc/fstab,想在启动时自动挂载Windows下的几个分区。以前干过这些事情,所以也没太当回事。

     因为曾经重装过一次,所以/boot分区现在成了/boot1分区,/分区成了/1分区,在/etc/fstab表中我觉得不好看。所以修改的时候,我随手把/boot1改成了/boot,/1改成了/。

     结果再次重启时,系统找不到这两个分区,自然也就启动不了了。郁闷。

     好在还有shell能用,prompt符为(Pepair filesystem) #。我又运行了 # vi /etc/fstab
想更改fstab文件。没想到此时所用文件都是readonly,改不了了。欲哭无泪。

     想了一会儿,突然记起可以进入rescue模式,或许能有办法。于是那张救援盘有了用武之地了。

     进入rescue模式后,执行
# mount -t vfat /dev/hda9 /tmp
将那个无法自动挂载的/1分区随便挂到了一个挂载点下,然后就能读写之了。恢复fstab文件,再次重启,一切又正常了。

     两个教训:修改配置文件时一定要谨慎,不要想当然的乱改;要有恢复手段,启动盘或者救援盘一定要准备好。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
如何修复/etc/fstab

我mv /etc./fstab /etc/fstab.bak
重启时,到(Repair filesystem)# 所有file只读,如何让它该为可写,然后mv /etc/fstab.bak /etc/fstab, 让它能正常启动? 
1 - - - - - - - - - - - - - - - 
boot : linux rescue

# mkdir /mnt/image
# mount -t ext3 /dev/hda4 /mnt/image

一般是硬盘最后一个分区里面,我分区表如下:

[root@YYZH ~]# fdisk -l
 
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          25      200781   83  Linux
/dev/sda2              26        1300    10241437+  83  Linux
/dev/sda3            1301        2575    10241437+  83  Linux
/dev/sda4            2576        5221    21253995    5  Extended
/dev/sda5            2576        3850    10241406   83  Linux
/dev/sda6            3851        3915      522081   82  Linux swap / Solaris
/dev/sda7            3916        5221    10490413+  83  Linux

我挂载时用 mount -t ext3 /dev/sda7 /mnt/image  然后进入后vi fstab进行文件修改
cd /mnt/image/etc
cp fstab.bak fstab
2 - - - - - - - - - - - - - - - 
rescue MODE 
会MOUNT / 到/mnt/sysimage
3 - - - - - - - - - - - - - - - 
rescue MODE 
会MOUNT / 到/mnt/s 

修改/etc/fstab实现自动挂载Windows分区,并显示中文目录
LABEL=/ / ext3 defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
LABEL=/usr /usr ext3 defaults 1 2
/dev/hda9 swap swap defaults 0 0
#添加如下几行
/dev/hda1 /mnt/win_c vfat codepage=936,iocharset=cp936 0 0
/dev/hda5 /mnt/win_d vfat codepage=936,iocharset=cp936 0 0
/dev/hda6 /mnt/win_e vfat codepage=936,iocharset=cp936 0 0

下面是一些文件说明

   1. fstab文件的作用 
    文件/etc/fstab存放的是系统中的文件系统信息。当正确的设置了该文件,则可以通过”mount  /directoryname”命令来加载一个文件系统,每种文件系统都对应一个独立的行,每行中的字段都有空格或tab键分开。同时fsck、 mount、umount的等命令都利用该程序。

    2. fstab文件格式 
    下面是/etc/fatab文件的一个示例行: 
fs_spec   fs_file  fs_type   fs_options  fs_dump fs_pass  
/dev/hda1   /   ext2     defaults     1    1  

fs_spec - 该字段定义希望加载的文件系统所在的设备或远程文件系统,对于一般的本地块设备情况来说:IDE设备一般描述为 /dev/hdaXN,X是IDE设备通道(a, b, or c),N代表分区号;SCSI设备一描述为/dev/sdaXN。对于NFS情况,格式一般为:,例如:`knuth.aeb.nl:/’。对于procfs,使用`proc’来定义。 

fs_file - 该字段描述希望的文件系统加载的目录点,对于swap设备,该字段为none;对于加载目录名包含空格的情况,用40来表示空格。 

fs_type - 定义了该设备上的文件系统,一般常见的文件类型为ext2 (Linux设备的常用文件类型)、vfat(Windows系统的fat32格式)、NTFS、iso9600等。 
  
fs_options - 指定加载该设备的文件系统是需要使用的特定参数选项,多个参数是由逗号分隔开来。对于大多数系统使用”defaults”就可以满足需要。其他常见的选项包括: 
选项              含义 
ro      以只读模式加载该文件系统 
sync    不对该设备的写操作进行缓冲处理,这可以防止在非正常关机时情况下破坏文件系统,但是却降低了计算机速度 
user    允许普通用户加载该文件系统 
quota   强制在该文件系统上进行磁盘定额限制 
noauto  不再使用mount -a命令(例如系统启动时)加载该文件系统 

fs_dump - 该选项被”dump”命令使用来检查一个文件系统应该以多快频率进行转储,若不需要转储就设置该字段为0 

fs_pass - 该字段被fsck命令用来决定在启动时需要被扫描的文件系统的顺序,根文件系统”/”对应该字段的值应该为1,其他文件系统应该为2。若该文件系统无需在启动时扫描则设置该字段为0 

3. 示例文件 
# /etc/fstab 
/dev/hda9       swap      swap    defaults    0   0 
/dev/hda1       /        ext2    defaults    1   1 
/dev/hda5       /home                ext2    defaults    1   1 
/dev/hda6       /usr          ext2    defaults    1   1 
/dev/hda7       /usr/local         ext2    defaults    1   1 
/dev/hda8       /var        ext2    defaults    1   1 
/dev/hdb        /cdrom        iso9660    noauto,user    0   0 
none          /proc      proc    defaults     0   0 
none          /dev/pts     devpts     gid=5,mode=620  0   0  

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
创建 /etc/fstab 文件
为了某些程序能确定某一个程序被加载的实际位置,文件 /etc/fstab 将被使用。通过以下方法建立一个新文件 /etc/fstab:

cat > /etc/fstab << ”EOF”
# Begin /etc/fstab

# filesystem   mount-point fs-type    options     dump    fsck-order

/dev/*LFS*        /           *fs-type*      defaults    1       1
/dev/*swap*      swap        swap         pri=1        0       0
proc                  /proc       proc           defaults    0       0

# End /etc/fstab
EOF
 
*LFS*, *swap* 和 *fs-type* 应换成你系统中的值 (比如/dev/hda2, /dev/hda5 和 reiserfs)。

当增加一个reiserfs分区时,一行最后的 1 1 应换成 0 0 。

要知道更多关于fstab文件中变量的信息,请看 man 5 fstab.

还有一些内容也许你想加入到fstab文件中。如果你使用devpts的话,必须有下面这一行:

devpts         /dev/pts    devpts     gid=4,mode=620 0    0
 
下面这个是你使用USB设备时要用到的:

usbdevfs       /proc/bus/usb usbdevfs defaults    0       0
 
这两个例子只有在你把相关的支持编译到内核中时才能工作。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/etc/fstab文件修改后可以自动挂载,并显示中文目录
                                       
这是我在网上找到的/etc/fstab文件修改后可以自动挂载,并显示中文目录,这个比较实用,希望大家能派上用场,下面就是例子。 

# /etc/fstab: static file system information. 


proc /proc proc defaults 0 0 
/dev/hdc2   / ext3            defaults,errors=remount-ro            0 1 
/dev/hdc5   none              swap sw                                     0 0 
/dev/hdb    /media/cdrom0    iso9660 ro,user,noauto              0 0 
/dev/hda1   /mnt/win_c vfat  codepage=936,iocharset=cp936 0 0 
/dev/hda5   /mnt/win_d ntfs  iocharset=cp936                       0 0 
/dev/hda6   /mnt/win_e ntfs  iocharset=cp936                       0 0 
/dev/hda7   /mnt/win_f vfat   codepage=936,iocharset=cp936 0 0 
/dev/hda8   /mnt/win_g vfat  codepage=936,iocharset=cp936 0 0 
/dev/hdc1   /mnt/win_h vfat  codepage=936,iocharset=cp936 0 0

本文地址:http://www.keyofnet.com/?p=398 , 转载请保留.

 
 
http://www.anjing.me/1167.html

接上篇《centos系统出现IO错误》,悲剧的事情发生了,我用fsck并没有解决该问题!!

开机过程中报了好多failure,包括mount failure、mysql start failure、samba failure…开机后,貌似一切正常,但是我知道这只是表面的,因为/目录已经是只读模式了!

下面看看分区挂载情况吧:

[root@jst-cn ~]# more /etc/mtab 
proc /proc proc rw 0 0 
[root@jst-cn ~]# df -h 
文件系统 容量 已用 可用 已用% 挂载点 
[root@jst-cn ~]# more /etc/fstab 
LABEL=/                 /dev/sda2             ext3    defaults        1 1 
LABEL=/other            /other                  ext3    defaults        1 2 
LABEL=/home             /home                   ext3    defaults        1 2 
LABEL=/tmp              /tmp                    ext3    defaults        1 2 
LABEL=/test             /test                   ext3    defaults        1 2 
LABEL=/www              /www                    ext3    defaults        1 2 
LABEL=/usr              /usr                    ext3    defaults        1 2 
LABEL=/tools            /tools                  ext3    defaults        1 2 
LABEL=/var              /var                    ext3    defaults        1 2 
LABEL=/data             /data                   ext3    defaults        1 2 
LABEL=/backup           /backup                 ext3    defaults        1 2 
LABEL=/opt              /opt                    ext3    defaults        1 2 
LABEL=/boot             /boot                   ext3    defaults        1 2 
tmpfs                   /dev/shm                tmpfs   defaults        0 0 
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0 
sysfs                   /sys                    sysfs   defaults        0 0 
proc                    /proc                   proc    defaults        0 0 
LABEL=SWAP-sda14        swap                    swap    defaults        0 0 
[root@jst-cn ~]# more /proc/mounts 
rootfs / rootfs rw 0 0 
/dev/root / ext3 ro,data=ordered 0 0 
/dev /dev tmpfs rw 0 0 
/proc /proc proc rw 0 0 
/sys /sys sysfs rw 0 0 
/proc/bus/usb /proc/bus/usb usbfs rw 0 0 
devpts /dev/pts devpts rw 0 0 
/dev/sda15 /other ext3 rw,data=ordered 0 0 
/dev/sda12 /home ext3 rw,data=ordered 0 0 
/dev/sda11 /tmp ext3 rw,data=ordered 0 0 
/dev/sda10 /test ext3 rw,data=ordered 0 0 
/dev/sda9 /www ext3 rw,data=ordered 0 0 
/dev/sda8 /usr ext3 rw,data=ordered 0 0 
/dev/sda7 /tools ext3 rw,data=ordered 0 0 
/dev/sda6 /var ext3 rw,data=ordered 0 0 
/dev/sda5 /data ext3 rw,data=ordered 0 0 
/dev/sda3 /backup ext3 rw,data=ordered 0 0 
/dev/sda2 /opt ext3 rw,data=ordered 0 0 
/dev/sda1 /boot ext3 rw,data=ordered 0 0 
[root@jst-cn ~]# mount -o remount,rw / 
mount: can’t find / in /etc/fstab or /etc/mtab 
[root@jst-cn ~]# mount -o remount,rw /dev/root 
mount: can’t find /dev/root in /etc/fstab or /etc/mtab 
[root@jst-cn ~]# mount -o remount,rw /dev/sda2 
mount: /dev/sda2 not mounted already, or bad option 
[root@jst-cn ~]# mount -f 
proc on /proc type proc (rw) 
mount: warning /etc/mtab is not writable (e.g. read-only filesystem). 
       It’s possible that information reported by mount( is not 
       up to date. For actual information about system mount points 
       check the /proc/mounts file. 
[root@jst-cn ~]# mount -a 
mount: /dev/sda13 already mounted or /dev/sda2 busy 
mount: /dev/sda15 already mounted or /other busy 
mount: /dev/sda12 already mounted or /home busy 
mount: /dev/sda11 already mounted or /tmp busy 
mount: /dev/sda10 already mounted or /test busy 
mount: /dev/sda9 already mounted or /www busy 
mount: /dev/sda8 already mounted or /usr busy 
mount: /dev/sda7 already mounted or /tools busy 
mount: /dev/sda6 already mounted or /var busy 
mount: /dev/sda5 already mounted or /data busy 
mount: /dev/sda3 already mounted or /backup busy 
mount: /dev/sda2 already mounted or /opt busy 
mount: /dev/sda1 already mounted or /boot busy 
mount: devpts already mounted or /dev/pts busy 
mount: sysfs already mounted or /sys busy 
[root@jst-cn ~]# vim /var/log/messages 
Jan  8 15:24:35 jst-cn smartd[3019]: smartd version 5.38 [i686-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen 
Jan  8 15:24:35 jst-cn smartd[3019]: Home page is 
http://smartmontools.sourceforge.net/ 
Jan  8 15:24:35 jst-cn smartd[3019]: Opened configuration file /etc/smartd.conf 
Jan  8 15:24:35 jst-cn smartd[3019]: Configuration file /etc/smartd.conf was parsed, found DEVICESCAN, scanning devices 
Jan  8 15:24:35 jst-cn smartd[3019]: Problem creating device name scan list 
Jan  8 15:24:35 jst-cn smartd[3019]: Device: /dev/sda, opened 
Jan  8 15:24:35 jst-cn smartd[3019]: Device /dev/sda: using ‘-d sat’ for ATA disk behind SAT layer. 
Jan  8 15:24:35 jst-cn smartd[3019]: Device: /dev/sda, opened 
Jan  8 15:24:35 jst-cn smartd[3019]: Device: /dev/sda, not found in smartd database. 
Jan  8 15:24:36 jst-cn smartd[3019]: Device: /dev/sda, is SMART capable. Adding to "monitor" list. 
Jan  8 15:24:36 jst-cn smartd[3019]: Device: /dev/sdb, opened 
Jan  8 15:24:36 jst-cn smartd[3019]: Device /dev/sdb: using ‘-d sat’ for ATA disk behind SAT layer. 
Jan  8 15:24:36 jst-cn smartd[3019]: Device: /dev/sdb, opened 
Jan  8 15:24:36 jst-cn smartd[3019]: Device: /dev/sdb, found in smartd database. 
Jan  8 15:24:36 jst-cn smartd[3019]: Device: /dev/sdb, is SMART capable. Adding to "monitor" list. 
Jan  8 15:24:36 jst-cn smartd[3019]: Device: /dev/sdc, opened 
Jan  8 15:24:36 jst-cn smartd[3019]: Device: /dev/sdc, Bad IEC (SMART) mode page, err=2, skip device 
Jan  8 15:24:36 jst-cn smartd[3019]: Monitoring 0 ATA and 2 SCSI devices 
Jan  8 15:24:36 jst-cn avahi-daemon[2989]: Server startup complete. Host name is jst-cn.local. Local service cookie is 1542459542. 
Jan  8 15:24:36 jst-cn smartd[3021]: smartd has fork()ed into background mode. New PID=3021.

很简单的看出来/etc/fstab分区挂载出问题了,/目录挂载到/opt所在的分区/dev/sda2上面了!然后结合more /proc/mountsfdisk -l可以看出来:/目录所在分区应该是/dev/sda13(因为此时的df -h命令已经无效了)!

所以目前的工作就修改/etc/fstab中错误的分区信息!下面是操作步骤:

1、重启系统,用安装光盘centos5.4引导进入linux rescue模式,就是在光盘启动进入安装界面时,输入linux rescue回车,一直点OK,直到进入shell模式!(这时,我遇见比较悲剧的事情——光驱坏了!只好到其他机子上拆一个过来。)

image

2、进入shell模式后,我们直接进入系统挂载的目录/mnt/sysimage/dev/,貌似linux recuse模式系统一般是挂载在这里的!

image

3、然后我们编辑/mnt/sysimage/dev/etc/fstab文件,将错误的/挂载修改回来:

错误的/挂载是:LABEL=/                 /dev/sda2             ext3    defaults        1 1

正确的/挂载是:LABEL=/                 /                       ext3    defaults        1 1

4、wq保存退出,reboot,拿出光盘,正常进入系统——没有报错了!搞定!!

后记:

这次linux分区变成只读模式,给我造成了很大的困扰,都已经备份数据准备重新安装系统了——因为是内网服务器,不可能给我很长的时间去找google然后解决问题,重装无疑是耗时最短的。

不过我还是坚持将所知道的方案,一个又一个的进行测试,尽量使问题能得到解决。因为如果只是简单的重装解决问题,那么下次遇到同样的问题,我还是不会解决!

幸好,这次问题得到顺利解决,并让我学到了linux rescue这个知识点,相信再次遇到相同/相关的问题,我会顺利去解决的!