由于缺少vmlinuz和intrd.img而无法恢复grub

我有一个专用的grub分区,在尝试诊断这个问题时,我决定将默认分区更改为ubuntu系统。

但是它没有用,所以,我从live cd启动,格式化了旧的启动分区并做了全新的grub安装,我确实复制了grub.cfg认为它足以启动系统。

但我错了,现在我是grub菜单,显示,但我不知道的是vmlinuzintrd.img也需要启动系统。

哪个不在哪里? 我怎样才能摆脱这个愚蠢的麻烦

很抱歉听到你不得不重新安装……但对于这个问题的未来读者,这是我的答案。

在我的情况下的原因:

我正在弄乱我的靴子……以为我用它备份了:

 # cd / # tar czf boot.tgz boot 

然后删除并重新格式化我的启动分区。 然后我打算把文件放回去,但是没有boot.tgz:/

 # file /initrd.img /vmlinuz /initrd.img: broken symbolic link to `/boot/initrd.img-3.2.0-23-generic' /vmlinuz: broken symbolic link to `boot/vmlinuz-3.2.0-23-generic 

所以我遇到了和你一样的问题。

而解决方案:

重新安装initramfs的东西(在/ boot中生成initramfs文件;不确定哪些是重要的,所以我做了所有,很快):

 # aptitude reinstall grub2-common grub-pc-bin grub-gfxpayload-lists grub-common 

仅供参考以获取上述命令的包列表,我这样做了:

 # aptitude search grub | grep -E "^i" 

重新安装内核的东西(将内核放入/ boot;这需要很长时间;首先使用搜索来找到正确的包名称):

 # aptitude reinstall linux-image-3.2.0-23-generic 

链接不再被打破。 🙂

 # file /initrd.img /vmlinuz /initrd.img: symbolic link to `/boot/initrd.img-3.2.0-23-generic' /vmlinuz: symbolic link to `boot/vmlinuz-3.2.0-23-generic' 

为了避免运行update-grub的错误“cat:/boot/grub/video.lst:没有这样的文件或目录”,我运行了grub-install。 (因为我使用raid,我不得不在多个磁盘上运行):

 grub-install /dev/sda grub-install /dev/sdb ... 

然后只是为了确定…再次更新grub(重新安装grub也应该已经完成​​,但没有video.lst,也许还需要内核文件或其他):

 # update-grub Generating grub.cfg ... Found linux image: /boot/vmlinuz-3.2.0-23-generic Found initrd image: /boot/initrd.img-3.2.0-23-generic done 

然后完成,我确保我的启动和fstab是正确的:

 # umount /boot # mount -a # ls /boot abi-3.2.0-23-generic config-3.2.0-23-generic grub initrd.img-3.2.0-23-generic lost+found System.map-3.2.0-23-generic vmlinuz-3.2.0-23-generic 

(不知道abi-3.2.0-23-generic是什么。我以前没有那个文件)

并再次生成initramfs,以防万一它生成一些相关的错误消息(在您的系统上用正确的文件替换文件名)。

 # mkinitramfs -o /boot/initrd.img-3.2.0-23-generic (no output if it works) 

例如,在修复我的启动并设置我的mdadm.conf文件之前,我会收到以下消息:

 grep: /boot/config-3.2.0-23-generic: No such file or directory W: mdadm: the array /dev/md0 with UUID 656eb2a6:21526b55:a6f1834a:d3cc95e4 W: mdadm: is currently active, but it is not listed in mdadm.conf. if W: mdadm: it is needed for boot, then YOUR SYSTEM IS NOW UNBOOTABLE! W: mdadm: please inspect the output of /usr/share/mdadm/mkconf, compare W: mdadm: it to /etc/mdadm/mdadm.conf, and make the necessary changes. 

在此之后,我测试了启动,它运行了。 🙂

以及一些基本的背景信息……这些都是将上述解决方案放在一起所必需的:

  • Grub需要安装到MBR中以告诉BIOS启动什么。 (使用grub-install创建)
  • MBR指向分区外某处磁盘上的grub引导代码(使用grub-install创建)。 (在我的GPT案例中,这是一个bios_grub分区)。
  • 然后这个启动代码找到/ boot来加载grub.cfg。 (使用grub-mkconfig -o或update-grub创建,它还会创建其他重要文件)
  • 当您选择引导选项时,grub将消失,取而代之的是Linux内核(vmlinuz)。 内核开始使用initramfs文件(使用mkinitramfs创建),我认为它包含有关系统的一些信息(raid,lvm等,以及一些uuids分区或raid / lvm卷)以及你需要的模块(ext3,ext4) ,lvm,raid等)。
  • 在某些时候它安装了常规系统,你的rc.d东西接管了

这就是为什么你需要所有这些文件。

如果你说的是真的,那么重建你的系统可能比它的价值更麻烦。 您可以尝试重新安装内核,它也应该更新磁盘上的grub,但是因为你覆盖了可能甚至无法工作的旧grub.cfg。 要开始,你需要从实时安装程序chroot磁盘然后apt-get install --reinstall你上次使用的内核版本。 其余的一切都取决于你,这是你为自己制造的一团糟。 您可以将其作为一个机会,以了解有关发行版如何启动和修复它的更多信息,或者您可以备份数据并重新开始。 祝好运。