Debian GNU/Linux kernel 和initrd误删除后的解决方法
前几天,使用Debian linux时不小心把 /boot目录下的vmlinuz及initrd给误删除了,今天将具体解决方案与大家一起分享:
system version: Debian GNU/Linux debian-503
kernel version :vmlinuz-2.6.26-2-686
initrd version :initrd.img-2.6.26-2-686
一、在另外一台可以正常启动的linux上,下载一个kernel(如:linux-2.6.29),根据原来无法启动的pc 的硬件来配置新的内核,并生产bzImage;
注意:配置时基本的驱动要直接编译到内核里面,比如硬盘驱动,CDROM等,这样可以在使用生成的新bzImage启动时直接加载驱动,从而实现mount 本地rootfs的目的。
二、制作linux usb启动盘
1.在一台正常的Linux机器上,插入优盘,
# mkfs.ext3 /dev/sdb1 #格式化优盘为ext3格式,一般情况下,/dev/sdb1为我们刚刚插入的优盘;
# mount /dev/sdb1 /mnt/ #挂载优盘至 /mnt目录下;
# mkdir /mnt/boot/grub -p #在刚刚格式化OK的优盘上面创建/boot/grub文件夹;
# cp /boot/grub/stage* /mnt/boot/grup # copy /boot/grub/目录下的stage1 和stage2到我们刚刚创建的grub目录下为安装grub到优盘张做准备;
# cp /boot/grub/menu.lst /mnt/boot/grub #copy /boot/grub/目录下的menu.lst,至刚刚创建的grub目录下;
# cp arch/x86/boot/bzImage /mnt/boot #copy刚刚生成的内核到优盘的/boot目录下面;
#vi /mnt/boot/grub/menu.lst
编辑menu.lst里面的显示菜单内容,添加如下内容;
title Debian GNU/Linux repaired mode #此菜单是我们启动gurb时选择的菜单,可以根据自己喜欢来修改;
root (hd0,0)
kernel /boot/bzImage root=/dev/sdb1
注意:上面 root (hd0,0)里面的hd0为启动时kernel的存放的磁盘,(由于从usb启动,所以hd0,代表优盘,hd1代表pc上硬盘),0代表优盘的第一个分区;
kernel /boot/bzImage为启动时加载内核的存放目录,root=/dev/sdb1 表示内核启动后要挂载的rootfs存放的分区,由于从优盘启动,pc机上的硬盘为sdb,
而我原来的rootfs存放在第一分区上所以root=/dev/sdb1
小知识:在grub里面磁盘的排序是从0开始,(hd0,0),(hd0,1),(hd0,2)......
在rootfs里面的磁盘排序是从1开始,sda1,sda2,sda3......
2.安装grub到优盘上,
#grub
grub> root (hd1,0) #(此时在正常启动的linux下,优盘为hd1)
grub> setup(hd1) #安装grub的stage1 到优盘的MBR;
提示安装成功信息后,卸载优盘;
三、使用新内核进入系统并修复
1.插入欲修复的机器上 ,开机设置BIOS从优盘引导;
进入grub菜单后选择刚才定制的菜单Debian GNU/Linux repaired mode,此时装载新的内核并启动系统,由于内核里面已经具有硬盘等基本驱动,所以可以挂载
本机上的rootfs进入系统;
2.插入Debian GNU/Linux debian-503的安装光盘或者mount 安装光盘的iso文件至/cdrom
#apt-get install update #更新系统
#apt-get purge linux-image-2.6.26-2-686(卸载原来的配置信息)
#apt-get install linux-image-2.6.26-2-686 (安装指定版本内核)
3.安装完成后,再次查看/boot目录下,熟悉的vmlinuz-2.6.26-2-686及initrd.img-2.6.26-2-686已经存在,重新启动pc,设置BIOS从本机启动,便可进入linux系统了
至此整个系统的修复已经结束,希望对出现过类似问题的朋友有所帮助,谢谢!
[ 本帖最后由 surprise_wang 于 2009-11-9 15:39 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
帮surprise_wang补充两点:
1、关于磁盘设备号:grub1 (0.97)是从0开始计数,grub2(1.97)后也从1开始计,与kernel保持一致
2、第三步可选,即,可不必安装系统自带kernel和initrd
楼主遇到的问题以及如何解决可以为:
问题:误删vmlinuz和initrd,导致系统不能启动。
解决思路:制作一个内核,启动系统并修复。(总体来说,就是如何给原来的系统安装一个kernel和initrd,比如可以用另外的系统mount来解决)
BTW:如果系统的grub能够正常启动,并不需要制作U盘的启动盘。