Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10503853
  • 博文数量: 2905
  • 博客积分: 20098
  • 博客等级: 上将
  • 技术积分: 36298
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-23 05:00
文章存档

2012年(1)

2011年(3)

2009年(2901)

分类: LINUX

2009-03-23 11:12:24

修复错误配置fstab文件导致系统无法正常启动
 
 1. 问题再现
 1.1. 操作环境说明
    操作系统:CentOS5.2
    硬盘分区情况:   
[root@localhost ~]# fdisk /dev/sda
 
The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
 
Command (m for help): p
 
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         522     4192933+  83  Linux
/dev/sda2             523         783     2096482+  83  Linux
/dev/sda3             784         914     1052257+  82  Linux swap / Solaris
 
Command (m for help): v
6288172 unallocated sectors
    fstab文件:
[root@localhost ~]# more /etc/fstab
LABEL=/                 /                       ext3    defaults        1 1
LABEL=/tmp              /tmp                    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-sda3         swap                    swap    defaults        0 0
   
 1.2. 创建新的分区,并配置fstab文件
 1.2.1. 创建分区
    /dev/sda上创建新的主分区sda4
[root@localhost ~]# fdisk /dev/sda
 
The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
 
Command (m for help): p
 
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         522     4192933+  83  Linux
/dev/sda2             523         783     2096482+  83  Linux
/dev/sda3             784         914     1052257+  82  Linux swap / Solaris
 
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Selected partition 4
First cylinder (915-1305, default 915):
Using default value 915
Last cylinder or +size or +sizeM or +sizeK (915-1305, default 1305):
Using default value 1305
 
Command (m for help): p
 
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         522     4192933+  83  Linux
/dev/sda2             523         783     2096482+  83  Linux
/dev/sda3             784         914     1052257+  82  Linux swap / Solaris
/dev/sda4             915        1305     3140707+  83  Linux
 
Command (m for help): w
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
 
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
    创建文件系统,将Label设置为other
[root@localhost ~]# mke2fs -j -L other /dev/sda4
mke2fs 1.39 (29-May-2006)
Filesystem label=other
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
393216 inodes, 785176 blocks
39258 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=805306368
24 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912
 
Writing inode tables: done                           
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
 
This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
 
[root@localhost ~]# e2label /dev/sda4
other
    Mount /dev/sda4/others
[root@localhost /]# mkdir /others
[root@localhost /]# mount /dev/sda4 /others
[root@localhost /]# mount
/dev/sda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda2 on /tmp type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/sda4 on /others type ext3 (rw)
[root@localhost /]# cd /others
[root@localhost others]# ls -l
total 16
drwx------ 2 root root 16384 Nov 21 19:35 lost+found
[root@localhost others]#
    修改fstab文件
[root@localhost /]# vi /etc/fstab
LABEL=/                 /                       ext3    defaults        1 1
LABEL=/tmp              /tmp                    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-sda3         swap                    swap    defaults        0 0
LABEL=/other            /others                 ext3    defaults        1 2
    请注意:这里用到是LABEL而不是设备名(/dev/sda4),但是这里把卷标写错,应该是other,前面没有 /
    并且没有运行mount -a命令来验证配置是否正确。
    接着就直接重启系统了(init 6)。
[root@localhost /]# init 6
   
 1.3. 问题的出现
 1.3.1. 在重启时遇到问题
 

1.1
    系统发现fstab中的LABEL=/other卷标不存在。
 
 2. 故障的解决过程
 2.1. 进入运行级别1
    输入root用户密码,进入运行级别1   

2.1
    此时试图修改/etc/fstab文件

2.2
    此时发现文件系统是只读的
    重新mount /

2.3
    再次修改fstab文件   

2.4
    修改完成,重启系统(init 6)。
    系统可以正常启动,问题解决了。

2.5
 
 3. 问题总结
    以上问题的出现是由于错误配置了/etc/fstab文件,在系统重启时,无法识别卷标(/other),从而导致无法正常启动。如果在修改/etc/fstab文件后,运行mount -a命令验证一下配置是否正确,则可以避免此类问题。
    问题的修复方法不仅适用于以上所描述的问题,同样可以处理由于错误修改配置导致系统无法启动的其他问题。
    问题的解决过程中,重新mount /是比较关键的一步(mount -n -o remount,rw /)。如果没有此步操作,则文件系统处于只读状态,导致不能修改配置文件并保存,修复存在的问题。
    
 

阅读(748) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~