Debian GNU/Linux kernel 和initrd误删除后的解决方法

发布于 2022-09-18 05:03:51 字数 3631 浏览 10 评论 0

前几天,使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心碎的声音 2022-09-25 05:03:51

帮surprise_wang补充两点:
1、关于磁盘设备号:grub1 (0.97)是从0开始计数,grub2(1.97)后也从1开始计,与kernel保持一致
2、第三步可选,即,可不必安装系统自带kernel和initrd

简单气质女生网名 2022-09-25 05:03:51

楼主遇到的问题以及如何解决可以为:

问题:误删vmlinuz和initrd,导致系统不能启动。

解决思路:制作一个内核,启动系统并修复。(总体来说,就是如何给原来的系统安装一个kernel和initrd,比如可以用另外的系统mount来解决)

BTW:如果系统的grub能够正常启动,并不需要制作U盘的启动盘。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文