近期,遇到一个奇特的问题,之前可以正常启动的ubuntu 16.04LTS系统,突然无法正常启动,每次进入 emergency mode (紧急模式)
根据系统提示,先输入root用户密码,进入maintenance 维护,使用 journalctl -xb 查看系统日志
这里已经有提示,出现错误,继续往下查看
最终确认: Failed to start File System Check on /dev/sda4
错误在磁盘 sda4 ,检查一下fstab 启动加载文件
这里,显示挂载 sd4磁盘到目标目录是 /home ,使用的是ext4文件系统,其中options 选项使用了nodev和nosuid ,dump 值为0 ,pass 值为2
这里我们又要讲解一下fstab文件的格式了
fstab中的文件挂载操作如下:
描述要挂载的特殊的块设备或者远程文件系统。 如 /dev/sda ,/dev/cdrom,远程文件系统使用:
描述文件系统的挂载点。如果是一个交换分区swap partitions,这个域应写成 none
描述文件系统的类型,Linux支持许多文件系统类型,如adfs、affs、autofs、coda、coherent、carmfs、devpts、efs、ext2、ext3、ext4、hfs、fpfs、iso9660、jfs、minix、msdos、ncpfs、nfs、ntfs、proc、qnx4、reiserfs、romfs、smbfs、sysv、tmpfs、udf、ufs、umsdos、vfat、xenix、xfs等
描述文件系统挂载的选项,基本选项如下:
default :默认选项 rw 、suid、dev、exec、auto、nouser、async
noauto:当启动时给出 mount -a 命令时并不挂载
user:允许用户挂载
owner:允许设备自己挂载
comment:供fatab维护程序使用
nofail:如果设备不存在,不报告错误信息
当其值设置为1是,将允许dump备份程序备份。设置为0时忽略备份操作
该字段有fsck程序用于确定在重新启动时,文件系统检查完成的顺序,启动用的文件系统需要指定为1,其他文件系统需要指定为2,如果没有此域或设置为0,表示不检查。
值是一个顺序,为0时永远不检查,而/ 根目录永远都为1,其他分区从2开始,数字越小越先检查,如果两个分区数字相同,则同时检查。
言归正传,我们检查日志发现fsck,报错是code4,而且是sda4,查看fstab发现挂载sda4 有pass检查,首先考虑是否先设置为0,不检查看是否可以正常启动。修改fstab文件,保存后,重启系统,正常进入系统。
这个不是治标的办法,可以看出sda4是有问题的,必须使用命令fsck -y /dev/sda4 修复数据,再修改pass 2 ,看是否真的解决。
可以看到,fsck.ext4 -y /dev/sda4 是由修复的过程,重启系统,正常。
从这件事情可以看出,fstab挂载文件系统,设置检查时,可以尽早发现文件,只要根据日志文件提供的信息,就能够解决系统的问题。