系统启动流程(三)

xiaoxiao2021-02-28  109

一、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]#ls grub.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/sysimage bash-4.1#df #查看是否切换成功

(2)grub模式下修复

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

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

方法二:

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

bash-4.1#chroot /mnt/sysimage bash-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]#ls device.map ffs_stage1_5 jfs_stage1_5 stage1 vstafs_stage1_5 e2fs_stage1_5 grub.conf minix_stage1_5 stage2 xfs_stage1_5 fat_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`.img grub>boot

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

(1)生成密钥 [root@localhost~]#grub-md5-crypt Password: Retype password: 1 <script type="math/tex" id="MathJax-Element-1">1</script>hb5cS/$P8I2/Aeh6LD5Z/47secQN. (2)编辑grub.conf文件 [root@localhost~]#vim /boot/grub/grub.conf

default=0 timeout=5 password=$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 /root bash-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/tmp sh-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=0 timeout=5 title linux kernel /vmlinuz-`uname -r` ro root=/dev/sda2 initrd /initrd-`uname -r`.img uname -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#lvdisplay bash-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/tmp sh-4.1#cp /mnt/tmp/Packages/isolinux/vmlinuz /boot sh-4.1#mkinitrd /boot/initramfs `uname -r` sh-4.1#grub-install --root-directory=/ /dev/sda sh-4.1#vim /boot/grub/grub.conf default=0 timeout=5 title 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/sysimage sh-4.1#cp /PATH/TO/inittab.bak /etc/inittab 重启即可

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

进入救援模式 bash-4.1#chroot /mnt/sysimage sh-4.1#rpm -qf /etc/inittab initscripts-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/cdrom bash-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/cdrom bash-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/目录中,只能提取到当前目录下,且恢复的文件所在路径要写完整路径。

转载请注明原文地址: https://www.6miu.com/read-63233.html

最新回复(0)