实验:破坏grub2阶段即删除/boot/⽬录下所有文件
目的
启动系统时/boot/目录下的文件是进入grub2阶段的必要文件,删除boot目录下的所有文件后,修复。
前提
可用的centos6系统,centos6的iso系统安装文件。
实验步骤
1. 删除/boot/⽬录下所有⽂件
[root@centos6 ~]# ls /boot/
config-2.6.32-754.el6.x86_64 grub lost+found System.map-2.6.32-754.el6.x86_64
efi initramfs-2.6.32-754.el6.x86_64.img symvers-2.6.32-754.el6.x86_64.gz vmlinuz-2.6.32-754.el6.x86_64
[root@centos6 ~]# rm -rf /boot/* #强制删除/boot目录下所有文件、*代表所有
[root@centos6 ~]# ls /boot #目录已经空了
[root@centos6 ~]# reboot #重启
2. 使用光盘启动,进入救援模式
- 在VMware环境下是按esc键进入boot menu菜单
- 这里选择第3项光盘引导
- 选择第三项Rescue installed system
- 语言English
- 键盘us
- 不需要配置网络,这里选择no
- 尝试挂载损坏引导的系统中的根,选择Continue,回车确定
- 已经挂载损坏系统上的根,回车确定
- 确认把损坏引导系统的根挂载在/mnt/sysimage⽬录下,回车确定
10.进⼊shell,选择第1⾏后,选择Ok,回车确定
3. 切根、安装grub
-
查看磁盘分区
-
切换根
bash-4.1# chroot /mnt/sysimage/
- 安装grub
sh-4.1# cd /boot/
sh-4.1# pwd
/boot
sh-4.1# grub-install /dev/sda
4. 复制vmlinuz内核文件
- 挂载磁盘并拷贝vmlinuz内核⽂件
sh-4.1# mount /dev/cdrom /media #临时挂载
sh-4.1# cp /media/isolinux/vmlinuz /boot/
注意:拷贝内核⽂件vmlinuz时,除了 /media/isolinux/vmlinuz所在的路径是内核⽂件,还有⼀个存放位置
是/mnt/Packages/kernel-2.6.32-754.el6.x86_64.rpm,只需把该⽂件解压即可,最后再介绍如何解压这个rpm内核
⽂件
- 查看
- 使用mkinitrd命令生成initramfs.img文件
sh-4.1# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
5. 创建grub.conf⽂件
查看根⽬录在grub.conf应该写⼊的位置
这⾥查到root指定位置为/dev/sda2,当然也可⽤UUID代替其写为root=UUID=a7f98a2f-4404-b768-d6e1cbae0b5e
sh-4.1# ls /boot
grub initramfs-2.6.32-754.el6.x86_64.img vmlinuz
sh-4.1# vim /boot/grub/grub.conf
default=0
timeout=5
title redhat ##描述,不写此条,开机起不来
root (hd0,0)
kernel /vmlinuz ro root=/dev/sda2 rhgb quiet #前边查到root指定位置为/dev/sda2、所以这里为/dev/sda2
initrd /initramfs-2.6.32-754.el6.x86_64.img #注意版本号 用这条命令写入":r! ls /boot/initra后面TAB自动补齐"
- 重启
sh-4.1# exit
bash-4.1# reboot
系统启动恢复正常
- 解压内核⽂件 为了演⽰解压内核⽂件,先确认光盘已挂载
[root@centos6 ~]# mkdir -p /data
[root@centos6 ~]# mount /dev/cdrom /mnt/
mount: block device /dev/sr0 is write-protected, mounting read-only
- 把/mnt/Packages/kernel-2.6.32-754.el6.x86_64.rpm复制到/root/data⽬录下
[root@centos6 ~]# cp /mnt/Packages/kernel-2.6.32-754.el6.x86_64.rpm /data
6. 使⽤rpm2cpio命令解压
[root@centos6 ~]# cd /data/
[root@centos6 data]# ls
kernel-2.6.32-754.el6.x86_64.rpm lost+found
[root@centos6 data]# rpm2cpio kernel-2.6.32-754.el6.x86_64.rpm | cpio -id #解压内核
232594 blocks
此时,当前⽬录解压后,出现了boot、etc、lib三个⽬录,其中boot/vmlinuz-2.6.32-754.el6.x86_64这个就是带有内 核版本的内核⽂件了。 这个⽂件boot/vmlinuz-2.6.32-754.el6.x86_64和/boot/vmlinuz两⽂件是⼀样的,只不过是名字不同⽽已。 我们也看把/boot/vmlinuz改名为带有内核版本的⽂件:
[root@centos6 data]# mv /boot/vmlinuz /boot/vmlinuz-$(uname -r)
7. 同时修改grub.conf配置文件中,内核文件的名称
[root@centos6 ~]# vim /boot/grub/grub.conf
default=0
timeout=5
title redhat
root (hd0,0)
kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=/dev/sda2 rhgb quiet
initrd /initramfs-2.6.32-754.el6.x86_64.img