免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3584 | 回复: 2

Debian GNU/Linux kernel 和initrd误删除后的解决方法 [复制链接]

论坛徽章:
0
发表于 2009-11-09 15:01 |显示全部楼层
前几天,使用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 编辑 ]

论坛徽章:
0
发表于 2009-11-09 15:43 |显示全部楼层
帮surprise_wang补充两点:
1、关于磁盘设备号:grub1 (0.97)是从0开始计数,grub2(1.97)后也从1开始计,与kernel保持一致
2、第三步可选,即,可不必安装系统自带kernel和initrd

论坛徽章:
0
发表于 2009-11-09 21:33 |显示全部楼层
楼主遇到的问题以及如何解决可以为:

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

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

BTW:如果系统的grub能够正常启动,并不需要制作U盘的启动盘。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP