Linux故障处理(二)更改root密码和修复文件系统

一、遗忘root用户的密码

大多数时候Linux主机中具有root权限的用户只有一个,因此需要通过其他途径来重设root账号密码。最简单的途径是在开机时通过修改GRUB引导参数进入单用户模式,另一个途径是使用系统光盘进入急救模式。

 

1、通过单用户模式重设root账户的密码

  步骤如下

1)、重新启动主机,在出现GRUB菜单时按“↑”、“↓”箭头键取消倒计时,并定位到要进入的操作系统选择项,按e键进入编辑模式。

Linux故障处理(二)更改root密码和修复文件系统

Linux故障处理(二)更改root密码和修复文件系统


2)、定位到以kernel开头的一行并按e键,在行尾添加“single”的启动参数,其中“single”也可以换成字母“s”或数字“1”,也可以表示进入到单用户模式。

Linux故障处理(二)更改root密码和修复文件系统

Linux故障处理(二)更改root密码和修复文件系统


3)、输完之后按Enter键确认,按b键将系统引导进入单用户模式,直接进入Shell环境(不需要任何密码验证)。

Linux故障处理(二)更改root密码和修复文件系统


4)、在单用户模式的Shell环境中,可以执行“passwd ”命令重新设置root用户的密码。设置完毕重新启动系统。

Linux故障处理(二)更改root密码和修复文件系统


二、排除文件系统类故障


1、修复文件系统

当文件系统的超级块数据损坏时,Linux将无法识别该文件系统,挂载时会出现“you must specify the filesystem type”的提示而不能正常使用。

例如,执行以下操作可以破坏/dev/sdb1文件系统的超级块数据库,尝试挂载时将不能成功。

[[email protected] ~]# dd if=/dev/zero of=/dev/sdb1 bs=512 count=4
记录了4+0 的读入
记录了4+0 的写出
2048字节(2.0 kB)已复制,0.024955 秒,82.1 kB/秒
[[email protected] ~]# mount /dev/sdb1 /tmp/
mount: you must specify the filesystem type


对于通过/etc/fstab文件自动挂载且设置了fsck参数(第6列的非0)的文件系统,若超级块出现错误,则Linux系统在启动时会报错,并提示“Give root password for maintenance”,

出现这种情况时,根据提示输入root用户密码,即可进入到一个临时的Shell环境,在这里用户可以对出现错误的文件系统进行修复。修复完毕后执行“exit”命令即可退出并重启系统。


修复一般的文件系统错误可以使用“fsck”命令进行,结合“-t”选项指定文件系统类型,结合“-y”选项对发现的问题自动回答“yes”。

Linux故障处理(二)更改root密码和修复文件系统

重新挂载时,即可成功挂载!


2、磁盘资源耗尽故障

当一个文件系统的磁盘空间耗尽以后,将无法继续在该分区中创建新的文件数据,从而导致故障的出现。例如执行“dd if=/dev/zero of=/somefile bs=1M count=999999”命令。当根分区磁盘空间不足而无法启动进入Linux系统时,可以通过系统的安装光盘进入急救模式,转移或清理掉根分区中占用大量空间的文件。

在每一个ext3文件系统中,能够使用的文件数量(对应i节点数量)也是有限的。当一个文件系统被格式化以后,其i节点数也即文件数量就已经固定下来了。如果用户在该分区中创建了巨量的细小文件(耗尽i节点),将可能出现这种情况:虽然分区中仍然有大量的剩余磁盘空间,但是却无法再建立新的文件。

模拟i节点耗尽故障

2.1)、新建一个约1G大小的EXT4文件系统,挂载到/temp目录下。使用“df –i”命令确认该文件系统中i节点的使用情况。

[[email protected] ~]# mkdir /temp
[[email protected] ~]# mount /dev/sdb1 /temp/
 
[[email protected] ~]# df -i /temp/
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sdb1       66384    11 66373    1% /temp
■ Filesystem:文件系统    ■ Inode: i节点总数   ■ IUsed:(I)已用
■ IFree:(I)可用        ■ IUse%:已用%        ■ Mounted on: 挂载点


2.2)、写一个测试程序脚本,模拟i节点耗尽

[[email protected] ~]# vim mkfile.sh
#!/bin/bash
i=1
while [ $i -le 66384 ]
do
touch /temp/file$i
let i++
done
[[email protected] ~]# sh mkfile.sh

[[email protected] ~]# df -i /temp/
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sdb1       66384 66384     0  100% /temp

可以看到i节点的数量已经占满,再使用df –hT命令查看一下磁盘空间。并且创建一个文件查看信息。


2.3)、查看结果

[[email protected] ~]# df -hT /temp/
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sdb1      ext2 1020M  2.8M  965M   1% /temp
可以看到,/temp还有很多磁盘空间
[[email protected] ~]# touch /temp/123456
touch: 无法创建"/temp/123456": 设备上没有空间

创建一个文件提示设备上没有,这种情况一般就属于i节点耗尽


2.4)、修复i节点耗尽故障

    理解i节点故障的根结以后,问题就比较好解决了。只需要找出分区中占用大量i节点的细小文件,并进行转移或者删除即可。对于许多用户公用的文件系统,建议为相关用户设置磁盘配额限制(包括磁盘空间和文件数量两方面)。

[[email protected] ~]# rm -rf /temp/file*
[[email protected] ~]# df -i /temp
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sdb1       66384    10 66374    1% /temp


3、检测硬盘坏道

磁盘坏道分为逻辑坏道和物理坏道两种,前者主要由于软件操作不当造成,可以使用软件修复;后者则是物理性损坏,只能通过更改磁盘分区或扇区的占用位置来进行改善,排除掉包含有坏块的磁盘空间。当磁盘出现以下现象时,磁盘设备发出异常声响。

读取磁盘中的数据时,磁盘设备发出异常声响。

访问磁盘中的某个文件时,反复读取且出错,提示文件损坏。

对于新建立的分区无法完成格式化。

系统使用该磁盘时频繁死机。

硬盘出现坏道后,如果不及时更换或进行技术处理,坏道就会越来越多,并可能造成频繁死机和数据丢失的后果。所以必要时应该对磁盘进行定期检测,检查是否存在坏道。

linux系统中,检测磁盘的坏道情况可以使用badblocks命令进行,结合“-s”选项用于显示进度信息,“-v”选项用于显示详情。

[[email protected] ~]# badblocks -sv /dev/sdb
正在检查从 0 到 20971519的块
Checking for bad blocks (read-only test): 完成                                
Pass completed, 0 bad blocks found.


    在长期使用计算机的过程中,文件系统和磁盘类的故障现象很难完全避免,对于此类故障的修复处理需要十分谨慎,如果操作不慎可能会加中数据破坏的程度。