linux系统下常见的故障与处理方法

上一篇 / 下一篇  2011-08-11 14:42:58

  一:忘记linux root密码

  这个问题出现的几率是很高的,不过,在linux下解决这个问题也很简单,只需重启linux系统,然后引导进入linux的单用户模式(init 1),由于单用户模式是不需要输入登录密码的,因此,可以直接登录系统,修改root密码即可解决问题。

  下面是详细的处理方法,这里我们以Redhat linux为基准,操作步骤如下:

  (1) 重启系统,待linux系统启动到grub引导菜单时,找到当前系统引导选项(可以按方向键展开隐藏的菜单,单处理器只有一个引导项,多处理器有3个或3个以上引导项,一般默认选项就是系统当前引导选项)。

  (2) 通过方向键将光标放到当前系统引导项上,然后按键盘字母“e”,进入编辑状态。

  (3) 然后通过上下键,选中带有kernel指令的一行,继续按键盘字母“e”,编辑该行,在行末尾加个空格,然后添加single,类似与这样:

  kernel  /vmlinuz-2.6.18-8.el5 ro root=LABEL=/ rhgb quiet single

  (4) 修改完成,按回车键,返回到刚才的界面。

  (5) 最后按键盘“b”,系统开始引导。

  这样系统就启动到了单用户模式下,这里的单用户根windows下的安全模式类似,在单用户模式下,只是启动最基本的系统,网络以及应用服务均不启动。单用户模式启动完毕,系统会自动进入到命令行状态下,类似与“sh-3.1#”,然后直接执行passwd,回车,系统会提示输入新的root密码两次,最后会看到修改密码成功的提示,这样就完成了root密码的修改。如果需要正常启动系统,现在只需输入“init 3”,就进入了多用户模式。用root用户重新登录系统,看看设置的新密码是否生效。

  如果是普通用户的密码忘记了,比较简单:
  1. 在root账户下,打开/etc/shadow (不是passwd文件,因为密码实际上经过加密后放在了“影子口令”文件shadow中了。passwd文件每个用户均可见,但是shadow只有root可以见)。
  2. 找到普通用户名christine,然后删除第二个域即可,域之间用“:”隔开的,如下:
    user:TdkakkkYUukkjkjk:14672:0:99999:7:::
  上述红色部分就是经过加密的密码,删除即可
  3. 在普通用户下,输入passwd即可输入新密码

  二:linux系统无法启动的解决办法

  导致linux无法启动的原因有很多,常见的原因有如下几种:

  l 文件系统配置不当,比如/etc/inittab文件、/etc/fstab文件等配置错误或丢失,导致系统错误,无法启动。

  l 非法关机,导致root文件系统破坏,也就是linux根分区破坏,系统无法正常启动

  l Linux内核崩溃,从而无法启动

  l 系统引导程序出现问题,比如grub丢失或者损坏,导致系统无法引导启动。

  l 硬件故障,比如主板、电源、硬盘等出现问题,导致linux无法启动。

  从这些常见的故障可知,导致系统无法启动的主要有两个问题,硬件原因和操作系统原因,对于硬件出现的问题,只需通过更换硬件设备,即可解决,而对于操作系统出现的问题,虽然出现的问题可能千差万别,不过在多数情况下都可以用相对简单统一的一些方法来恢复系统,下面我们就针对上面提出的几个问题,结合Redhat Linux系统环境,给出一些常用的、普遍的解决问题的方法。

  1./etc/fstab文件丢失,导致系统无法启动

  /etc/fstab文件存放了系统中文件系统的相关信息,如果正确的配置了该文件,那么在linux启动时,系统会读取此文件,自动挂载linux的各个分区,如果此文件配置错误,或者丢失,就会导致系统无法启动,具体的故障现象是在检测mount partition时出现:

  starting system logger

  此后系统启动就停止了。

  针对这个问题,我们的第一思路就是想办法恢复/etc/fstab这个文件的信息,只要恢复了此文件,系统就能自动挂载每个分区,正常启动。可能很多读者首先想到的是将系统切换到单用户模式下,然后手动挂载分区,最后结合系统信息,重建/etc/fstab文件。

  但是这种方法是行不通的,因为fatab文件丢失导致linux无法挂载任何一个分区,即使linux还能切换到单用户下,那么此时的系统也只是一个read-only的文件系统,无法向磁盘写入任何信息。

  我们介绍另外一个方法,就是利用linux rescue修复模式登录系统,进而获取分区和挂载点信息,重构/etc/fstab文件。

  这里以rhel5为例,首先将系统第一章光盘放入光驱,设置BOIS从光驱启动,这样系统就从光驱引导,然后在boot后输入:linux rescue

  接着系统自动开始引导

  这里是选择模式使用的语言,可以按照自己需要设定,我们这里选择“English“,然后按tab键,选中“ok”,回车进入下一步。

  下面进入的是键盘选择界面,这里选择默认的“us”即可。

  下面进入网络配置界面

  这里是选择是否启用网络,由于系统已经无法启动,我们已经在linux系统上进行操作了,启用网络与否都无所谓。这里选择不启用。

  下面到了最关键的步骤了,如图5所示,修复模式会自动将系统的所有分区挂载到/mnt/sysimage目录下,选择“Continue”,则修复环境进入到read-write状态下,可以对分区进行读写操作,选择“Read-Only”,修复环境进入到只读模式,由于我们要重建fstab文件到/etc目录下,因此选择“Continue”进入可读写模式下。

  下面是一个友情提示界面,如图6所示,由于fstab文件丢失,修复模式找不到任何可挂载的分区,从这里可知,修复模式在这里也读取/etc/fstab文件,回车,进入下一步。

  下面就进入了修复环境下,可以进行操作了。

  上面详细演示了如何进入linux的修复模式,其实很多情况下,linux无法启动时,都可以通过这个方式登录系统进行修复和更改操作。

  下面是恢复/etc/fstab文件的详细过程:

  首先查看一下系统分区情况,如下所示:

  sh-3.1# 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        1682     3068415   83  Linux

  /dev/sda4            1683        5221    28427017+   5  Extended

  /dev/sda5            1683        1873     1534176   83  Linux

  /dev/sda6            1874        2064     1534176   83  Linux

  /dev/sda7            2065        2255     1534176   83  Linux

  /dev/sda8            2256        2382     1020096   83  Linux

  /dev/sda9            2383        2484      819283+  82  Linux swap / Solaris

  /dev/sda10           2485        5221    21984921   83  Linux

  因为分区并没有损坏,通过fdisk命令可以查看到系统分区的完整信息,但是每个分区对应的label name信息我们还不知道,下面通过e2label命令查看每个分区对应的label name:

  sh-3.1# e2label /dev/sda1

  /boot

  sh-3.1# e2label /dev/sda2

  /usr

  sh-3.1# e2label /dev/sda3

  /

  sh-3.1# e2label /dev/sda5

  /var

  sh-3.1# e2label /dev/sda6

  /tmp

  sh-3.1# e2label /dev/sda7

  /home

  sh-3.1# e2label /dev/sda8

  /opt

  sh-3.1# e2label /dev/sda10

  /webdata

  这样,就得到了所有分区的挂载点信息,接下来就可以构造一个fstab文件了。

  小技巧:可以参考其它系统中fstab文件的格式,结合本系统的分区和挂载点信息,构造出自己的fstab文件来。

  由于fstab文件是存放在系统根目录下的,因此需要挂载原来系统的根分区,从上面可知根分区对应的设备名为/dev/sda3,接着在修复模式创建的临时根分区下创建一个挂载点,然后挂载原来系统的根分区。操作过程如下所示:

  sh-3.1# pwd

  /

  sh-3.1# mkdir temp

  sh-3.1# mount /dev/sda3  /temp

  sh-3.1# df

  Filesystem           1K-blocks      Used Available Use% Mounted on

  /dev                    515644         0    515644   0% /dev

  /tmp/loop0               79872     79872         0 100% /mnt/runtime

  /dev/sda3              2972268    259916   2558932  10% /temp

  这样以来,原有根分区的文件全部挂载到了/temp目录下,接着就可以创建我们需要的fatab文件了。

  sh-3.1# vi /temp/etc/fstab

  LABEL=/                 /                       ext3    defaults        1

  LABEL=/boot             /boot                   ext3    defaults        1 2

  LABEL=/cicro            /cicro                  ext3    defaults        1 2

  devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

  tmpfs                   /dev/shm                tmpfs   defaults        0 0

  LABEL=/home             /home                   ext3    defaults        1 2

  LABEL=/opt              /opt                    ext3    defaults        1 2

  proc                    /proc                   proc    defaults        0 0

  sysfs                   /sys                    sysfs   defaults        0 0

  LABEL=/tmp              /tmp                    ext3    defaults        1 2

  LABEL=/usr              /usr                    ext3    defaults        1 2

  LABEL=/var              /var                    ext3    defaults        1 2

  LABEL=SWAP-sda9         swap                    swap    defaults        0 0

  配置完毕,保存退出,然后重启系统。

  sh-3.1#reboot

  2、root文件系统破坏,导致系统无法启动

  Linux下普遍采用的是ext3文件系统,ext3是一个具有日志记录功能的日志文件系统,可以进行简单的容错和恢复,但是在一个高负荷读写的ext3文件系统下,如果突然发生掉电,就很有可能发生文件系统内部结构不一致,导致文件系统破坏。

  Linux在启动时,会自动去分析和检查系统分区,如果发现文件系统有简单的错误,会自动修复,如果文件系统破坏比较严重,系统无法完成修复时,系统就会自动进入单用户模式下或者出现一个交互界面,提示用户介入手动修复,现象类似下面所示:

  checking root filesystem

  /dev/sdb5 contains a file system with errors, check forced

  /dev/sdb5:

  Unattached inode 68338812

  /dev/sdb5: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY

  (i.e., without -a or -p options)

  FAILED

  /contains a file system with errors check forced

  an eror occurred during the file system check

  ****dropping you to a shell;the system will reboot

  ****when you leave the shell

  Press enter for maintenance

  (or type Control-D to continue):

  give root password for maintenance

  从这个错误可以看出,系统根分区文件系统出现了问题,系统在启动时无法自动修复,然后进入到了一个交互界面,提示用户进行系统修复。

  这个问题发生的机率很高,引起这个问题的主要原因就是系统突然掉电,引起文件系统结构不一致。一般情况下解决此问题的办法是采用fsck命令,进行强制修复。

  根据上面的错误提示,当按下“Control-D”组合键后系统自动重启,当输入root密码后进入系统修复模式,在修复模式下,可以执行fsck命令,具体操作过程如下:

  [root@localhost /]#umount /dev/sdb5

  [root@localhost /]#fsck .ext3 -y  /dev/sdb5

  e2fsck 1.39 (29-May-2006)

  / contains a file system with errors, check forced.

  Pass 1: Checking inodes, blocks, and sizes

  Pass 2: Checking directory structure

  Pass 3: Checking directory connectivity

  Pass 4: Checking reference counts

  Inode 6833812 ref count is 2, should be 1.  Fix<y>? yes

  Unattached inode 6833812

  Connect to /lost+found<y>? yes

  Inode 6833812 ref count is 2, should be 1.  Fix<y>? yes

  Pass 5: Checking group summary information

  Block bitmap differences:  -(519--529) -9273

  Fix<y>? yes

  …… ……

  /: ***** FILE SYSTEM WAS MODIFIED *****

  /: 19/128520 files (15.8% non-contiguous), 46034/514048 blocks

  上面就是fsck修复受损文件系统的过程,fsck详细用法在本书第四章有详细的讲述,这里不在多讲。需要注意的是,在执行fsck的时候,一定要先卸载要修复的分区,然后再执行修复操作,切记!

  三:linux下常见网络故障处理

  linux网络服务功能非常强大,在linux上可以部署Web Server、DNS Server、Mail Server、Db server、Ftp server等等,但是也由此产生了很多网络问题,据统计,在linux系统下产生的故障,有60%来自网络方面,40%来自系统本身,可见熟练解决linux下故障,对于熟练掌握linux有着巨大的帮助。

  解决linux网络问题的顺序应该是首先从Linux操作系统自身的底层网络开始,然后逐步有点及面的向外扩展,网络问题的一般解决流程为:

  l 网络硬件传输问题,可以通过检查网线是否正常,网卡、集线器、路由器、交换机等是否正常来确认是否由硬件问题造成网络故障。

  l 检查网卡是否能正常工作,可以从网卡是否正常加载、网卡IP设置是否正确、系统路由是否设置正确3个方面进行检查确认。

  l 检查DNS是否设定正确,可以从linux的DNS客户端配置文件/etc/resolv.conf,本地主机文件/etc/hosts进行检查确认。

  l 服务是否正常打开,可以通过telnet或者netstat命令的方式检测服务是否开启。

  l 访问权限是否打开,可以从本机iptables防火墙、linux内核强制访问控制策略selinux两方面入手,进行检查确认。

  l 局域网主机之间联机是否正常; 可以通过ping自身IP,ping局域网其它主机IP,ping网关地址来确认局域网是否连接正常。

  接下来,我们就针对上面给出的解决网络问题的一般思路,详细展开讲述。

  1. 检查网络硬件传输问题

  检查网络故障,首先要排除的是网络硬件设备是否存在问题,比如网线是否正常,网卡、集线器、路由器、交换机等是否正常,这些是网络正常运行的基本条件,如果发现某些设备出现故障,只需更换硬件即可解决问题。

  2.检查网卡是否能正常工作

  (1)检查网卡是否正常加载


TAG:

 

评分:0

我来说两句

Open Toolbar