系统启动流程(三)

来源:互联网 发布:mac默认英文字体 编辑:程序博客网 时间:2024/05/19 17:04

一、GRUB简介

GNU GRUB 和GRUB是GRand Unified Bootloader的缩写,它是一个多重操作系统启动管理器。

二、grub的配置文件

/etc/grub.conf-->/boot/grub/grub.conf

(1)文件内容

default=#:设定默认启动的菜单项;落单项(title)编号从0开始timeout =#:指定菜单项等待选项选择的时间;splashimage=(hd#,#)/PATH/XPM_FILE:菜单背景图片文件路径;password [--md5] STRING进入grub启动菜单编辑认证;使用命令grub-md5-crypt生成加密口令hiddenmenu:隐藏菜单;title TITLE:定义菜单项“标题”;root(hd#,#):查找stage2及kernel文件所在设备分区,为grub的根(这个可以不用写,系统会自动识别);kernel /path/to/vmlinuz_file :启动的内核;还可以添加许多内核支持使用的cmdlinue参数;    rhgb:不加载图形    quite:静默输出内核启动过程    查看内核参数:cat /proc/cmdline

这里写图片描述
initrd /path/to/initramfs_file:内核匹配的ramfs文件;
password [–md5|–encrypted]STRING:启动选定的内核或操作系统时进行认证;
注意:同一版本的内核和光盘中的内核是相同的。如果kernel损坏或误删,可以复制过来使用 。
三、grub的安装
如果正常安装系统,grub目录下的文件中stage1,stage1.5,stage2这些结尾的文件起到备份作用,如果在使用命令修复grub目录,则起不到备份作用。

a、判断新安装系统中grub目录下stage*的文件是否起到备份作用

(1)切换至grub目录下

[root@localhost/app]#cd /boot/grub/  

(2) 复制该目录下所有文件到/app目录下

[root@localhost/boot/grub]#mv * /app/ [root@localhost/boot/grub]#ls

(3)grub.conf文件移动到/boot/grub目录下

[root@localhost/boot/grub]#mv /app/grub.conf .[root@localhost/boot/grub]#lsgrub.conf

(4)重启

[root@localhost/boot/grub]#reboot

(5)验证
这里写图片描述

说明在没有使用命令grub-install之前,/boot/grub目录下的stage#起到备份作用。

b、如果stage1破坏怎么恢复之?

(1)模拟stage1阶段损坏;备份MBR

[root@localhost~]#dd if=/dev/sda of=mbr bs=1 count=446

(2)破坏MBR

[root@localhost~]#dd if=/dev/zero of=/dev/sda bs=1 count=446

(3)重启

[root@localhost~]#reboot

(4)重启以后直接出现下面的界面
这里写图片描述
此时说明MBA被我们已损坏,直接不能引导。
(5)进入救援模式
之前介绍过如何进入救援模式,这里就不再累述。

方法一:

(1)救援模式默认/mnt/sysimage为根,切换到系统真正的根

bash-4.1#chroot /mnt/sysimagebash-4.1#df   #查看是否切换成功

(2)grub模式下修复

sh-4.1#grubgrub>root (hd0,0)grub>setup (hd0)

注意:使用这种模式修复,会依赖于grub/目录下stage1文件,如果没有这些文件,会修复失败的。
这里写图片描述

方法二:

(1)同样是进入救援模式下

bash-4.1#chroot /mnt/sysimagebash-4.1#df   #查看是否切换成功

(2)使用grub-install命令生成stage1文件

sh-4.1#grub-install --root-directory=/ /dev/sda   #--root-directory 执行根   /dev/DEVICE指定根在那块磁盘上

(3)查看是否创建成功

sh-4.1#ls /boot/grub

这里写图片描述
(4)重启

这里写图片描述
方法三:

可以进入救援模式,配置网络,在同一版本同一型号的主机上复制过来grub/目录下的文件

(c)如果把上述生成的stage#文件删除,尝试是否可以开机成功?
(1)切换到/boot/grub目录下

[root@localhost~]#cd /boot/grub/[root@localhost/boot/grub]#lsdevice.map     ffs_stage1_5      jfs_stage1_5       stage1         vstafs_stage1_5e2fs_stage1_5  grub.conf         minix_stage1_5     stage2         xfs_stage1_5fat_stage1_5   iso9660_stage1_5  reiserfs_stage1_5  ufs2_stage1_5

(2)删除stage#文件

[root@localhost/boot/grub]#rm -rf *

(3)重启
这里写图片描述

此时重启会报错error 15;证明使用命令生成的grub/目录下的文件有关联,不像安装操作系统此目录下的文件起备份作用。

此时进入救援模式修复如上述过程。

d、如果删除stage1.5阶段,如何恢复之?

(1)模拟stage1.5损坏

[root@localhost~]#dd if=/dev/zero of=/dev/sda bs=1 count=10240 skip=512 seek=512[root@localhost~]#hexdump -C -n 10240 /dev/sda  #查看是否损坏成功

(2)重新启动后,MBA正常启动,但是,stage1.5加载不了
这里写图片描述
(3)进入救援模式修改stage1.5阶段,方法同上

e如何grub.conf文件删除,如何启动?

在重新启动操作系统时,boot sequence下键入c键进入grub命令行模式下grub>root (hd0,0)grub>kernel /vmlinuz-`uname -r` root=/dev/DEVICE# 分区grub>initrd /initrd-`uname -r`.imggrub>boot

这里写图片描述

f 、grub.conf文件中password的作用

(1)生成密钥
[root@localhost~]#grub-md5-crypt
Password:
Retype password:
1hb5cS/$P8I2/Aeh6LD5Z/47secQN.
(2)编辑grub.conf文件
[root@localhost~]#vim /boot/grub/grub.conf

default=0timeout=5password=$1$hb5cS/$P8I2/Aeh6LD5Z/47secQN.title linux    root (hd0,0)    kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2    initrd /initramfs-2.6.32-696.el6.x86_64.img    password=$1$hb5cS/$P8I2/Aeh6LD5Z/47secQN.

这里写图片描述

    这个就是第一个password启动的作用,启动菜单认证;键入P输入密码,可以进入单用户模式。    第二个password作用:启动选用内核或操作系统时进行认证。

g如果删除第一启动文本/sbin/init,如何恢复之?

(1)删除该文件

[root@localhost~]#rm -rf /sbin/init

(2)重新启动
这里写图片描述
此时,不能输入任何的命令
(3)在boot sequence下键入“e”

grub>kernel /vmlinuz-`uname -r` init=/bin/bash

使用bash启动
这里写图片描述
键入“b”重新启动
(4)重新挂载根
此时重新启动进入bash并不能编辑根下的文件

bash-4.1#cd /rootbash-4.1#touch a.sh #不能编辑文件bash-4.1#mount -o remount,rw  /bash-4.1#mount /dev/sr0 /media/cdrom

bash-4.1#rpm -ivh /media/cdrom/Packages/upstart-VERSION.rpm –force
(5)测试
这里写图片描述

h 如果/etc/fstab和/boot下的文件误删除,如何恢复之?

(1)进入救援模式
(2)查看文件系统
sh-4.1#fdisk -l
sh-4.1#blkid
(3)创建临时挂载点并重新挂根
sh-4.1#mkdir /mnt/tmp
sh-4.1#mount /dev/sda2 /mnt/tmp
注意:如果之前不知道根文件系统在那个分区上,可以通过上述查看文件系统的方法查看,并尝试挂载查看里面的内容。
(4)编辑/etc/fstab文件
sh-4.1#vi /etc/fstab
/dev/sda1 /boot ext4 defaults 0 0
/dev/sda2 / ext4 defaults 0 0
/dev/sda5 swap swap defaults 0 0
(5)重新启动并进入救援模式

sh-4.1#df  查看挂载结果,这次已经自动挂载根

(6)重新挂载光盘,并安装kernel包

sh-4.1#mount /dev/sr0 /media/tmpsh-4.1#rpm -ivh /media/tmp/Packages/kernel-VERSION.rpm --force  sh-4.1#ls /boot   #/boot下的文件已经生成

(7)创建grub/下所需要的文件

sh-4.1#grub-install --root-directory=/ /dev/sda

(8)编辑grub.conf文件

defaults=0timeout=5title linuxkernel /vmlinuz-`uname -r` ro root=/dev/sda2initrd /initrd-`uname -r`.imguname -r 中间的命令要自己结果,这里为了方便就这样代替。

这里写图片描述
(9)重启测试

i逻辑卷环境破坏,同样是删除上面文件

(1)删除/etc/fstab和/boot下所有文件

[root@localhost~]#rm -rf /tec/fstab[root@localhost~]#rm -rf /boot/*

(2)查看系统分区情况

[root@localhost~]#fdisk -l[root@localhost~]#blkid[root@localhost~]#df

注意:逻辑分区不能当/boot使用
(3)激活逻辑卷状态

bash-4.1#lvdisplaybash-4.1#vgchange -ay

这里写图片描述

bash-4.1#blkid  #查看块设备信息

(4)编辑/etc/fstab文件
这里写图片描述
(5)重新启动,并切换根

bash-4.1#chroot /mnt/sysimage

(6)生成boot/目录下所需要的文件

sh-4.1#mount /dev/sr0 /mnt/tmpsh-4.1#cp /mnt/tmp/Packages/isolinux/vmlinuz  /bootsh-4.1#mkinitrd  /boot/initramfs  `uname -r`sh-4.1#grub-install --root-directory=/ /dev/sdash-4.1#vim /boot/grub/grub.confdefault=0timeout=5title linux    root (hd0,0)    kernel vmlinuz ro root=/dev/VolGroup-lv_root    initrd initramfs

(7)重启测试

二、系统文件丢失如何修复

系统在引导期间,很重要的一个过程就是init进程读取其配置文件/etc/inittab(如果删除,可以安装包),启动系统基本服务程序及默认运行级别的服务程序完成系统引导,如果/etc/inittab误删除或修改错误,Linux将无法正常启动。此时,只有通过救援模式才可以解决此类问题。

(1)如果对inittab文件备份,如何恢复之?

进入救援模式bash-4.1#chroot /mnt/sysimagesh-4.1#cp /PATH/TO/inittab.bak /etc/inittab重启即可

注意:在平时生产环境中,建议将系统中的重要数据目录备份,如etc/、boot/等。
(2)如果没有备份,如何恢复之?

进入救援模式bash-4.1#chroot /mnt/sysimagesh-4.1#rpm -qf /etc/inittabinitscripts-9.49.37-1.el7.x86_64 sh-4.1#exit #退出chroot模式 bash-4.1#mkdir /mnt/cdrom  #创建挂载点bash-4.1#mount /dev/sr0 /mnt/cdrombash-4.1#rpm -ivh /mnt/cdrom/Packages/initscripts-9.49.37-1.el7.x86_64.rpm  --force\--replacepkgs --root=/mnt/sysimage  重启即可

(3)如何提取rpm中的文件恢复?

进入救援模式bash-4.1#mkdir /mnt/cdrombash-4.1#mount /dev/sr0 /mnt/cdrom查询哪个包提供/etc/inittab文件了,所有就不累述了。bash-4.1#rpm2cpio /mnt/cdrom/Packages/initscripts-9.49.37-1.el7.x86_64.rpm |cpio -id   ./etc/inittab    cpio:copy files to and from archives    -i extract 提取文件    -d 创建所需要的目录bash-4.1#cp etc/inittab /mnt/sysimage/etc重新启动即可

注意:上述命令执行完成后并不能直接恢复/etc/目录中,只能提取到当前目录下,且恢复的文件所在路径要写完整路径。

原创粉丝点击