Linux 常见的trouble shooting故障排错
备份开机所必须运行的程序对一个运维人员来说是非常有必要的。在实际生产环境中,系统和数据基本都是安装在不同的硬盘上面,因为企业最关心的还是数据,系统崩溃了,最坏的方法就是重新安装系统,但是数据丢失了,那会直接给企业带来损失,如果系统和数据都放在同一个硬盘上面,那系统都进不去了,何谈数据。解决常见的trouble shooting,不要在系统出现故障的时候,想到的第一个就是重装系统。为解决常见的trouble shooting,首先必须先了解系统的启动流程。
常见的trouble shooting:
1.关于grub的故障
a)grub.conf的配置文件的丢失
故障系统信息
<a target="_blank" href="http://blog.51cto.com/attachment/201308/092610208.png"></a>
系统开机时,直接出现grub提示符,表示你的grub的配置文件损坏或者已经丢失。
思路:这种情况下,直接在grub提示符下,重新grub配置文件即可。
<a target="_blank" href="http://blog.51cto.com/attachment/201308/102343951.png"></a>
怎样获知系统根的挂载点,一般用于RHEL6.x版本上面,5.x版本不需要指定根的路径。
<a target="_blank" href="http://blog.51cto.com/attachment/201308/102958196.png"></a>
插入光盘选择第三个 Rescue,急救模式,或者连续按Esc键两次,在boot:提示符下面输入 linux rescue然后按Enter键。
<a target="_blank" href="http://blog.51cto.com/attachment/201308/103557158.png"></a>
选择本地光盘
<a target="_blank" href="http://blog.51cto.com/attachment/201308/103715979.png"></a>
选择Continue,继续。
<a target="_blank" href="http://blog.51cto.com/attachment/201308/103816429.png"></a>
进入急救模式之后,系统会把你的真正的根系统挂载到/mnt/sysimage目录下面,如果你想进入真正的根choot /mnt/sysimage切换你真正的根目录
<a target="_blank" href="http://blog.51cto.com/attachment/201308/105847412.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201308/110012841.png"></a>
2)boot分区损坏
当系统的boot分区损坏时,系统也无法正常进入
思路1:用一块新硬盘去接入到能进入系统的主机,且主机的内核版本信息,必须和坏掉系统boot分区的一样,为这块新的硬盘安装grub,且复制vmlinuz内核文件,initramfs内核镜像文件,然后建立grub的配置文件,在把这个新的硬盘接入到损坏boot分区的主机上面,用这个新硬盘的boot来引导系统启动
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<code>[root@Redhat6 boot]</code><code># fdisk /dev/sdb #为新添加的磁盘分区</code>
<code>Command (m </code><code>for</code> <code>help): n</code>
<code>Command action</code>
<code> </code><code>e extended</code>
<code> </code><code>p primary partition (1-4)</code>
<code>p</code>
<code>Partition number (1-4): 1</code>
<code>First cylinder (1-2610, default 1314):</code>
<code>Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610):+50M</code>
<code>Command (m </code><code>for</code> <code>help): w</code>
<code>[root@Redhat6 ~]</code><code># partprobe</code>
<code>[root@Redhat6 ~]</code><code>#mkfs -t ext4 /dev/sdb1 #格式化分区</code>
<code>[root@Redhat6 ~]</code><code># mkdir /mnt/boot #为新添加磁盘的分区建立一个挂载点</code>
<code>[root@Redhat6 ~]</code><code># mount /dev/sdb1 /mnt/boot/</code>
<code>[root@Redhat6 ~]</code><code># cd /mnt/boot/</code>
<code>[root@Redhat6 boot]</code><code># ls</code>
<code>lost+found</code>
<code>[root@Redhat6 boot]</code><code># grub-install --root-directory=/mnt /dev/sdb #为新添加的硬盘安装grub</code>
<code>Probing devices to guess BIOS drives. This may take a long </code><code>time</code><code>.</code>
<code>Installation finished. No error reported.</code>
<code>This is the contents of the device map </code><code>/mnt/boot/grub/device</code><code>.map.</code>
<code>Check </code><code>if</code> <code>this is correct or not. If any of the lines is incorrect,</code>
<code>fix it and re-run the script `grub-</code><code>install</code><code>'.</code>
<code>(fd0) </code><code>/dev/fd0</code>
<code>(hd0) </code><code>/dev/sda</code>
<code>(hd1) </code><code>/dev/sdb</code>
<code>grub lost+found</code>
<code>[root@Redhat6 boot]</code><code># cp /boot/vmlinuz-2.6.32-358.el6.x86_64 /mnt/boot/ #复制系统盘的内核文件到新添加的盘</code>
<code>[root@Redhat6 boot]</code><code># cp /boot/initramfs-2.6.32-358.el6.x86_64.img /mnt/boot/ #复制系统盘的内核镜像文件到新添加的盘</code>
<code>grub lost+found</code>
<code>initramfs-2.6.32-358.el6.x86_64.img vmlinuz-2.6.32-358.el6.x86_64</code>
把新的硬盘安装好grub分区后,接入到无法启动的主机上,作boot引导。
<a target="_blank" href="http://blog.51cto.com/attachment/201308/121925996.png"></a>
思路2:进入急救模式,为系统安装grub,然后挂载光盘,把光盘里面的vmlinuz内核文件和initrd.img内核的镜像文件拷贝到boot目录下面,然后手动编辑grub配置文件
<code>#设置为光盘启动,进行Rescue模式</code>
<code>bash</code><code>-4.1</code><code>#chroot /mnt/sysimage</code>
<code>sh-4.1</code><code>#mount /dev/cdrom /media</code>
<code>sh-4.1</code><code>#cd boot</code>
<code>sh-4.1</code><code>#grub-install --root-directory=/ /dev/sda #为硬盘安装grub</code>
<code>sh-4.1</code><code>#cp /media/isolinux/vmlinuz /boot/vmlinuz-2.6.32-358.el6.x86_64 #复制光盘的内核文件,并改名</code>
<code>sh-4.1</code><code>#cp /media/isolinux/initrd.img /boot/initramfs-2.6.32-358.el6.x86_64.img #复制光盘的内核镜像文件,并改名</code>
<code>sh-4.1</code><code>#cat >> /boot/grub/grub.conf << EOF #手动建立grub配置文件</code>
<code>> default=0</code>
<code>> timeout=5</code>
<code>> title CentOS (2.6.32-358.el6.x86_64)</code>
<code>> root (hd0,0)</code>
<code>> kernel </code><code>/vmlinuz-2</code><code>.6.32-358.el6.x86_64 ro root=</code><code>/dev/mapper/vg0-root</code>
<code>> initrd </code><code>/initramfs-2</code><code>.6.32-358.el6.x86_64.img</code>
<code>> EOF</code>
<code>sh-4.1</code><code>#exit</code>
<code>bash</code><code>-4.1</code><code>#reboot</code>
<code>#然后更改启动项,设置为本地硬盘启动</code>
2、/etc/inittab文件丢失
思路:查看inittab文件是由那个rpm包安装的,然后进入急救模式,挂载光盘重新安装rpm
<code>[root@Redhat5 ~]</code><code># rpm -qf /etc/inittab #查看RHEL5.x版本的inittab文件是由那个软件包安装的</code>
<code>initscripts-8.45.42-1.el5</code>
插入光盘进入急救模式
<code>sh-4.1</code><code>#cd /media/Packages/</code>
<code>sh-4.1</code><code>#rpm -ivh --replacepkgs initscripts-8.45.42-1.el5.rpm</code>
3、bash损坏无法进入登录界面
思路:查看bash命令是由那个rpm包安装的,然后进入急救模式,挂载光盘重新安装rpm
<code>sh-4.1</code><code>#rpm -ivh --replacepkgs bash-4.1.2-14.el6.x86_64.rpm</code>
4、遗忘root密码
1)、grub没有加密,修改root密码
进入单用户模式设置密码即可
<a target="_blank" href="http://blog.51cto.com/attachment/201308/144748873.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201308/144951327.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201308/145455355.png"></a>
2)、把密码添加到grub的配置文件启用内核镜像保护,修改root的密码
<a target="_blank" href="http://blog.51cto.com/attachment/201308/151917692.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201308/152608901.png"></a>
3)、启用grub编辑保护,修改root的密码
<a target="_blank" href="http://blog.51cto.com/attachment/201308/152949954.png"></a>
<a target="_blank" href="http://blog.51cto.com/attachment/201308/153518538.png"></a>
5、MBR扇区故障
系统启动盘的MBR扇区损坏
<code>[root@Redhat6 ~]</code><code># mkdir /mnt/backup</code>
<code>[root@Redhat6 ~]</code><code># mount /dev/sdb1 /mnt/backup/</code>
<code>[root@Redhat6 ~]</code><code># dd if=/dev/sda of=/mnt/backup/sda.mbr.bak bs=512 count=1 #备份系统盘的MBR扇区,一定是备份到另外的一块盘上面</code>
思路:进入急救模式,把之前备份的系统盘的MBR扇区恢复过来
<code>sh-4.1</code><code>#mkdir /dir #为备份有系统盘的MBR新建一个目录用于挂载</code>
<code>sh-4.1</code><code>#mount /dev/sdb1 /dir #挂载带有备份文件的分区</code>
<code>sh-4.1</code><code>#dd if=/dir/sda.mbr.bak of=/dev/sda bs=512 count=1 #恢复备份数据</code>
6、修复文件系统,修复inode节点的异常
<code>[root@Redhat6 /]</code><code># touch /mnt/backup/myfile</code>
<code>touch</code><code>: cannot </code><code>touch</code> <code>"/mnt/backup/myfile"</code> <code>:device does not have space </code><code>#创建文件显示没有可用空间</code>
<code>[root@Redhat6 /]</code><code># df -lh /dev/sdb1 #查看磁盘显示还有空间</code>
<code>Filesystem Size Used Avail Use% Mounted on</code>
<code>/dev/sdb1</code> <code>9.9G 780M 8.9G 9% </code><code>/mnt/backup</code>
<code>[root@Redhat6 /]</code><code># df -i /dev/sdb1 #查看inode节点,发现以没有可用inode节点</code>
<code>Filesystem Inodes IUsed IFree IUse% Mounted on</code>
<code>/dev/sdb1</code> <code>655776 655776 0 100% </code><code>/mnt/backup</code>
<code>[root@Redhat6 /]</code><code># find /mnt/backup/ -empty -a -type f -exec rm -rf {} \; #删除该分区为空的文件</code>
<code>[root@Redhat6 /]</code><code># df -lh /dev/sdb1</code>
<code>[root@Redhat6 /]</code><code># touch /mnt/backup/myfile #现在可以创建</code>
作为一个合格的运维人员,系统的关键文件要提前先做好备份操作,以免发生“亡羊补牢,为时已晚”的情况发生。
本文转自 jie783213507 51CTO博客,原文链接:http://blog.51cto.com/litaotao/1263946,如需转载请自行联系原作者