Linux 系统启动过程 及系统修复

上一章讲了操作系统安装,这里重点讲下linux下的安装与修复,首先回忆一下操作系统启动流程:一般在操作系统安装时写入。总结为:BIOS–>MBR—>;PBR–>OS files
按照这个模式,详细讲解一下linux系统启动过程:
1首先加电时BIOS,进行加电自检。
2读取第一个启动设备的MBR的引导加载程序(即lilo、grub、spfdisk等)的启动信息。dd if=/dev/sda of=/dev/zero bs=512 count=1 备份 MBR.,把MBR破坏了,系统到这步就挂了。
3根据MBR找到装有系统文件的活动分区PBR,这里如把/etc/fstab 改成/etc/fstab.bak,这里找不到分区了,用光盘进入到系统修复模式下,用fdisk –l,会看不到在有效的分区
4 转到Grub引导程序(此步找到内核vmlinuz和根文件系统映像initrd)
这里损坏后,要kernel-2.6.18-164.e15.i686.rpm#grub-install /dev/sda
5-启动内核并加载根文件系统映像
6初始化系统环境->启动init进程(完成启动)

根据这个来具体百度◢︻刺客︻◣写的修复,这个自己也做个实验,原理过程类似,

LAB : Linux系统修复

实验目的: 

使用linux recuse模式修复Linux系统

 

实验步骤: 

一、人为删除系统关键文件

登陆linux系统之后依次执行以下命令人为破坏当前linux系统

 

#cd / 

#umount /boot---卸载/boot分区

#rm -rf /boot---删除/boot目录(boot目录下包含所有GRUB有关的文件) 

#rm -rf /etc/inittab---删除init表(此文件定义了系统运行级别和脚本) 

#rm -rf /etc/rc.d/rc.sysinit---删除init运行级别脚本文件

#rm -rf /etc/rc.d/rc.local---删除开机脚本文件

#mv /etc/fstab /etc/fstab.bak---备份系统挂载表fstab文件(此文件记录了linux分区信息) 

#sync---将系统缓冲区的内容写入硬盘(在Linux系统中当数据需要存入磁盘时通常会先放到缓

冲区内等到适当的时刻再写入磁盘如此可提高系统的执行效率) 

#reboot 

经过这一番蹂躏之后系统肯定是挂了的。。。。。最后一条reboot命令已经无法正常执行了。。。手动重启系统也是

无法进入系统了的。。。。。。但是只要根分区没有被格式化就可以进入linux修复模式恢复该linux系统。

二、修复linux系统思路: 恢复fstab文件找到分区修复引导里的内核文件修复grub –> 还原init相关文件

1.进入修复模式

通过RHEL5光盘引导进入安装会话,输入linux rescue或按F5键进入rescue修复模式。

 

进入修复模式之后系统会提示选择语言Language和键盘类型Keyboard, 直接回车就行了。

系统会再次询问是否配置网络, 选择No因为修复系统不需要用到网络。。然后会提示如下

 

Rescue程序将查找当前硬盘上是否有已安装的linux系统如果找到了的话就自动挂载到/mnt/sysimage下。

选择”Continue”继续rescue程序会搜索硬盘是否存在已安装过的linux和硬盘分区最终结果如下图

 

搜索结果显示找不到Linux分区因为/etc/fstab文件被删除了所以导致系统无法读取Linux分区但是如果找到了就将它挂到/mnt/sysimage里面可以读写。选择”OK”确定之后系统会进入到修复模式的shell下。

 

 

 

2.还原fstab文件

根据上面步骤得知rescue程序无法找到硬盘分区所以现在要做的事情就是恢复linux分区——也就是fstab

文件 (这个fstab文件在删除之前有做过备份/etc/fstab.bak)。

#fdisk -l查看磁盘分区

 

根据fdisk –l输出得到系统分区有两个/dev/sda1和/dev/sda2。可使用e2label命令查看这两个分区的卷标

 

由上图可得知/dev/sda1是/boot分区, 而/dev/sda2无法查看因为sda2是LVM分区。

使用命令激活LVM分区#lvm vgchange -ay这个命令的作用就是告诉系统建立相关的device-mapper这样

就可以看到/dev下建立了/dev/mapper/VGname-LVname和/dev/VGname/LVname的设备文件和链接文件. 

 

使用ls /dev/mapper命令可以看到VolGroup00-LogVol00就是/根分区和VolGroup00-LogVol01(就是swap分区) 

接下来要挂载/根分区并恢复fstab文件。

#mkdir test---建立一个空目录用于挂载分区

#mount -t ext3 /dev/VolGroup00/LogVol00 /test---挂载包含根分区的LVM分区到test目录下

 

将系统原来的/根分区挂载到/test目录之后就可以还原fstab.bak到fstab了

 

#cp /test/etc/fstab.bak /test/etc/fstab----还原fstab文件

#reboot----重启系统

 

 

3.修复内核和grub 

重启之后按ESC键选择CDROM引导输入linux rescue再次进入到修复模式。

此时再次进入到修复模式时rescue程序将会找到fstab文件也就是会找到linux分区!并且把损坏的原linux系

统挂载到/mnt/sysimage下。并且rescue程序会提示你可以使用#chroot(change root 修改根目录)修改根目录

进入到原系统中。如下图所示

选择OK之后系统已经全部挂载到了/mnt/sysimage如果想进去敲入#chroot /mnt/sysimage修改根目

录为/mnt/sysimage使用ls命令可以查看原系统里的文件和目录。使用exit可以退回rescue程序下再次使用ls

命令可以比较一下区别。

 

一般把处于resuce模式的系统称为伪系统把#chroot /mnt/sysimage后看到的称为真正的系统。

接下来要修复内核文件

#exit---退回到resecu模式下

#mount /dev/hdc /mnt/source---挂载光驱cdrom到/mnt/source目录

#rpm -ivh /mnt/source/Server/kernel-2.6.18-164.e15.i686.rpm --root=/mnt/sysimage/ --force 

需要修复的三个内核文件在系统盘server目录下kernel-2.6.18.rpm软件包里所以要挂载光盘之后并安装

kernel软件包

此时内核已修复完成再继续修复grub程序。。。

#chroot /mnt/sysimage进入到已损坏的linux系统中

#grub-install /dev/sda安装grub程序到/dev/sda 

#ls /boot/grub查看grub目录下是否存在grub.conf文件。如果没有就手动编辑一个。

#vim /boot/grub/grub.conf 

 

手动编辑grub.conf配置文件内容如下

保存退出。。。 grub修复完成

 

4、修复/etc/inittab等文件

#rpm -qf /etc/inittab查询包含inittab文件的软件包

#rpm -qf /etc/rc.d/rc.sysinit查询包含rc.sysinit文件的软件包

#rpm -qf /etc/rc.d/rc.local查询包含rc.local文件的软件包

 

经过rpm –qf查询命令可得知要修复的文件都包含在initscripts-8.45.rpm这个软件包里面。

下一步要把文件从这个RPM里面分离出来并还原到/etc目录下. 

#exit 

#cp /mnt/source/Server/initscripts-8.45.30-2.el5.i386.rpm/mnt/sysimage/tmp 

#chroot /mnt/sysimage 

#cd tmp/ 

#ls 

#rpm2cpio initscripts-8.45.30-2.el5.i386.rpm|cpio -imd解压软件包到当前目录

#ls两个ls命令注意比较区别

#cd etc/ 

#ls 

#cp inittab /etc/ 

#cp rc.sysinit /etc/rc.d/ 

#cp rc.local /etc/rc.d/

 

最后只需要reboot就可以正常进入到linux系统了OVER

 

Linux 系统启动过程 及系统修复,布布扣,bubuko.com

Linux 系统启动过程 及系统修复

上一篇:linux内核数据结构--进程相关


下一篇:newlisp 监控Linux进程 四