admin管理员组文章数量:1530845
一、 删除/boot/grub/*下所有文件,只保留grub.conf配置文件,系统能否正常启动修复?
1、未经修复过的系统。
[root@centos6 grub]# ls
device.map fat_stage1_5 grub.conf jfs_stage1_5 minix_stage1_5 splash.xpm.gz stage2 vstafs_stage1_5
e2fs_stage1_5 ffs_stage1_5 iso9660_stage1_5 menu.lst reiserfs_stage1_5 stage1 ufs2_stage1_5 xfs_stage1_5
[root@centos6 grub]# mv grub.conf /data
[root@centos6 grub]# rm -f ./*
[root@centos6 grub]# mv /data/grub.conf ./
[root@centos6 grub]# ls
grub.conf
系统能够正常启动
stage2阶段就是一个grub.conf配置文件,其它文件都不起到直接的作用
此时重新启动系统只会在一开始报一个没有启动图片的错误,此错误不影响系统的正常启动(可忽略),/boot/grub下的其他文件只做暂时备份使用即stage1 stage1_5阶段的备份文件,只有当1和1.5阶段出现故障的时候 可以通过一些命令进行修复,修复的时候会用到此处的备份文件
2、经过修复的系统。
再启动会出现报错,状态码为Error 15
修复方案:
1、进入救援模式
esc键进入boot menu菜单,这里选择第3项光盘引导
选择第三项Rescue installed system
2、使用grub-install命令修复,该命令可以修复1阶段,1.5阶段,2阶段。进救援模式的时候,可以看到提示说明,系统的根将被挂载到/mnt/sysimage目录下。因此进去之后我们还得执行切换根目录操作。
可以看到/boot/grub/目录下生成了一些文件。这时候退出,重启系统即可。
二、破坏MBR的前446字节的信息,修复(stage1阶段修复)
破坏stage1阶段,dd if=/dev/zero of=/dev/sda bs=1 cout=446
[root@centos6 ~]# dd if=/dev/zero of=/dev/sda bs=1 cout=446
dd: unrecognized operand `cout=446'
Try `dd --help' for more information.
[root@centos6 ~]# dd if=/dev/zero of=/dev/sda bs=1 count=446
446+0 records in
446+0 records out
446 bytes (446 B) copied, 0.00243429 s, 183 kB/s
[root@centos6 ~]# hexdump -C -n 512 /dev/sda
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 20 |............... |
000001c0 21 00 83 aa 28 82 00 08 00 00 00 00 20 00 00 aa |!...(....... ...|
000001d0 29 82 83 fe ff ff 00 08 20 00 00 80 1a 06 00 fe |)....... .......|
000001e0 ff ff 83 fe ff ff 00 88 3a 06 00 80 a9 03 00 fe |........:.......|
000001f0 ff ff 05 fe ff ff 00 08 e4 09 00 f8 1b 0f 55 aa |..............U.|
00000200
重启系统,此时进入光盘界面。说明磁盘MBR遭到破坏,没有找到启动项。
修复方案1:
选择第三项进入救援模式
1、切换根目录,chroot /mnt/sysiamge
2、grub-install命令修复,这个命令修复全阶段。
3、sync同步设置到磁盘,确保磁盘已经写入进去了。
4、退出shell,重新启动。
修复方案二:
使用grub交互命令修复
grub
grub> root (hd0,0)
grub> setup (hd0)
退出重启即可。
三 、破坏512字节之后的内容进行修复(stage1.5阶段过程)
dd if=/dev/zero of=/dev/sda bs=1 count=10000 skip=512 seek=512
[root@centos6 ~]# dd if=/dev/zero of=/dev/sda bs=1 count=10000 skip=512 seek=512
10000+0 records in
10000+0 records out
10000 bytes (10 kB) copied, 0.0185813 s, 538 kB/s
此时会发现菜单都看不到
stage1.5出故障使用光盘引导
修复方案1:
1.按Esc键进入光盘引导界面
2.选择第三项进入救援模式
3.切根 chroot /mnt/sysimage
4.使用grub-install命令
5、sync同步磁盘,此时grub目录已经修复好了。
6、exit退出,重启系统
修复方案2:
前三个步骤和方案1一样,然后使用grub命令修复。
sh-4.1# grub
grub>root (hd0,0) #表示boot在第一块磁盘第1个分区
grub>setup (hd0) #此步骤依赖于/boot/grub/*下面的文件
四、删除/boot/grub整个目录,如何修复?(破坏stage2阶段)
[root@centos6 ~]# rm -f /boot/grub/*
[root@centos6 ~]# ls /boot/grub/
重启后界面如下。
修复方案:
1、进入救援模式
2、chroot /mnt/sysimage 切根
3、使用grub-install /dev/sda
4、sync同步磁盘,此时grub目录已经修复好了
5、ls查看 /boot/grub目录,发现缺少grub.conf文件,因此这里需要手写一个grub.conf文件。
使用设备名称也是可以的,不过建议使用UUID
vim /boot/grub/grub.conf
#必须写三项分别是title kernel initrd
default 0
timeout 3
title Centos6
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2 selinux=0 #root这里可以使用UUID代替,ro表示只读挂载,临时禁用selinux
initrd /initramfs-2.6.32-696.el6.x86_64.img
可以小技巧,防止手敲出错
:r! ls /boot/vmlinuz-2.6.32-696.el6.x86_64 /boot/initramfs-2.6.32-696.el6.x86_64.img
查看系统根目录的UUID 注:r!blkid|grep /dev/sda2 #UUID后面注意去掉引号
6、重启系统即可。
五、删除grub.conf文件修复
[root@centos6 ~]# rm -f /boot/grub/grub.conf
[root@centos6 ~]# ls /boot/grub/grub.conf
ls: cannot access /boot/grub/grub.conf: No such file or directory
重启系统后界面如下
解释:stage1、stage1.5没有问题主要stage2有问题,连菜单都进不去,直接跳到grub
修复方案:
1、在界面上输入以下几行命令。
grub> root (hd#,#)
grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
2、重启系统后,进入/boot/grub目录下,手动编辑grub.conf文件即可。
[root@centos6 grub]# vim grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda2
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-696.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=e9bd1e7a-d025-4245-aba7-f480de3c3d60 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-696.el6.x86_64.im
grub支持交互式输入,如果没有grub.conf文件可以手动输入,也可以进入救援模式,手动编辑grub.conf文件。
六、设置grub背景图片
图片像素和格式是有要求的
使用convert工具对图片像素进行设置
首先得安装convert命令所提供的包
[root@centos6 ~]# yum install ImageMagick
[root@centos6 ~]# which convert
/usr/bin/convert
[root@centos6 ~]# rpm -qf /usr/bin/convert
ImageMagick-6.7.2.7-6.el6.x86_64
[root@centos6 ~]# convert -resize 640x480 -colors 14 beijing.jpg beijing.xpm #此命令必须在beijing.jpg位置使用,使用less zf.xpm可以在头部看到相关信息
[root@centos6 ~]# gzip beijing.xpm
[root@centos6 ~]# cp beijing.xpm.gz /boot/grub/
[root@centos6 ~]# ls /boot/grub/
beijing.xpm.gz e2fs_stage1_5 ffs_stage1_5 iso9660_stage1_5 minix_stage1_5 stage1 ufs2_stage1_5 xfs_stage1_5
device.map fat_stage1_5 grub.conf jfs_stage1_5 reiserfs_stage1_5 stage2 vstafs_stage1_5
[root@centos6 ~]# vim /boot/grub/grub.conf
splashimage=(hd0,0)/grub/beijing.xpm.gz
重启系统,进入grub界面就能看到设置的背景图片
七、调换kernel和initrd调换顺序,开机启动情况?
title CentOS 6 (2.6.32-696.el6.x86_64)
root (hd0,0)
initrd /initramfs-2.6.32-696.el6.x86_64.img
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=e9bd1e7a-d025-4245-aba7-f480de3c3d60 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
重启系统后界面如下
意思是linux kernel必须在initrd之前加载,否则系统无法启动。只有加载kernel才会知道操作系统的根,找到根了才会找到内存用户驱动。
修复:
1、进入GRUB界面,选择要编辑的内核,按“e”键进入编辑界面
2、选中initrd这行,按d键删除。
3、按o键开启新的一行
4、按e键编辑,添加initrd这行,支持tab键补全。
5、编辑完成后,按b键启动即可。
八、删除/boot下所有文件如何修复?
[root@centos6 ~]# rm -rf /boot
rm: cannot remove `/boot': Device or resource busy
[root@centos6 ~]# ls /boot
系统启动后,进入如下界面
分析:
/boot下面主要的文件有内核(kernel),和虚拟文件系统(initramfs),还有就是grub目录下的文件。内核文件可以从光盘拷贝或者去其它相同系统的机子上拷一份。
修复方案1:
1、进入救援模式
2、chroot /mnt/sysimage切换根目录。
3、df查看挂载情况,如果光盘没有挂载则先挂载光盘mkdir /mnt/cdrom mount /dev/sr0 /mnt/cdrom。这里可以看到光盘已经挂载。
4、进入挂载光盘的目录,内核文件在/mnt/cdrom/isolinux目录下,只需复制到/boot目录下即可。
cp /mnt/cdrom/isolinux/vmlinuz /boot/vmlinuz-‘uname -r’
vmlinuz文件的大小和刚开始文件系统大小是一样的,说明内核是一个固定不变的东西
5、生成新的initramfs文件mkinitrd /boot/initramfs-uname -r
.img uname -r
6、使用grub-install命令生成grub目录下的一些配置文件。
7、在/boot/grub目录下新建一个grub.conf文件
vim /boot/grub/grub.conf
#必须写三项分别是title kernel initrd
default 0
timeout 3
title Centos6
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2 selinux=0 #root这里可以使用UUID代替,ro表示只读挂载,临时禁用selinux
initrd /initramfs-2.6.32-696.el6.x86_64.img
8、同步数据,然后退出
9、重启系统
修复方案2:
1、进入救援模式
2、chroot /mnt/sysimage 切根,然后df查看光盘是否挂载
3、安装kernel包,kernel包包含了vmlinuz文件和initramfs文件。
4、grub-install /dev/sda
5、在/boot/grub目录下新建一个grub.conf文件
vim /boot/grub/grub.conf
#必须写三项分别是title kernel initrd
default 0
timeout 3
title Centos6
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2 selinux=0 #root这里可以使用UUID代替,ro表示只读挂载,临时禁用selinux
initrd /initramfs-2.6.32-696.el6.x86_64.img
6、重启恢复正常
九、误删除/sbin/init,无法进入系统如何修复
/sbin/init是用户空间的第一个应用程序,系统启动后将第一个运行。
[root@centos6 ~]# rm -f /sbin/init
系统启动后,直接进入如下界面
恢复方案1:
1、进入grub,按c键进入命令行
2、按a键在后面添加 init=/bin/bash,不用系统默认的init,使用/bin/bash来代替
用bash来作为计算机的第一个进程,bash内置了一些内部命令
4、回车之后进入如下界面,可以输入一些命令
可以输入一些命令
5、查看/sbin/bash命令来自哪个包
bash-4.1# rpm -qf /sbin/init
#upstart包提供
此时根目录的挂载是只读方式挂载,不能安装此包
6、重新挂载根,默认只读挂载
bash-4.1# mount -o remount,rw / #以可读可写方式挂载根目录
7、挂载光盘,安装upstart包
挂载光盘
安装包要强制安装,–force选项,upstart包毕竟已经安装过了
8、sync同步到磁盘
9、检查一下可以看到/sbin/init
总结:/sbin/init文件误删除后,不需要进入救援模式就可以直接通过命令进行修复,过程中发现根是只读挂载的,必须重新挂载,同时也要挂载光盘,才能安装upstart包。
10、重启系统
恢复方案2:
1、进入救援模式。
2、切换根目录,chroot /mnt/sysimage
3、df -h查看挂载情况,如果光盘挂载了则直接安装upstart包,如果没挂载则先挂载光盘。
df -h查看挂载
安装软件包
或者把upstart安装包解开。
4、退出,重启即可。
版权声明:本文标题:linux内核修复(一) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1726463343a1071648.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论