我有一个专用的 grub 分区,在尝试诊断时这问题,我决定将默认分区改为ubuntu系统。
但它不起作用,所以,我从 live cd 启动,格式化旧的启动分区并重新安装了 grub,我确实复制了,grub.cfg
认为这足以启动系统。
但是我错了,现在我是 grub 菜单,它出现了,但我不知道是什么,vmlinuz
也是intrd.img
启动系统所需要的。
哪里都没有?我该如何摆脱这种愚蠢的麻烦?
答案1
很遗憾听到您必须重新安装...但对于这个问题的未来读者,这是我的答案。
我的情况的原因是:
我正在弄乱我的靴子......以为我用以下方法支持它:
# 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 等,以及一些分区或 raid/lvm 卷的 uuid)以及您需要的模块(ext3、ext4、lvm、raid 等)。
- 在某个时候,它会挂载常规系统,然后你的 rc.d 内容就会接管
所以这就是为什么您需要所有这些文件。
答案2
如果您所说的是真的,那么重建系统可能会带来更多麻烦。您可以尝试重新安装内核,这也应该会更新磁盘上的 grub,但由于您覆盖了旧的 grub.cfg,因此可能根本不起作用。要开始,您需要从实时安装程序 chroot 磁盘,然后使用apt-get install --reinstall
您上次使用的内核版本。其余的都取决于您,您自己造成了很大的麻烦。您可以借此机会了解有关发行版如何启动和修复它的更多信息,或者您可以备份数据并重新开始。祝您好运。