我在一个(物理)硬盘上安装了 Ubuntu 10.10,在另一个硬盘上安装了 Windows。两个驱动器上都安装了 grub 来启动两个操作系统。当我想为 Win 7 安装 SP1 时,我必须在 Windows 启动的分区上添加一个可启动标志,否则 SP1 的安装将无法进行。我通过启动 Ubuntu 并使用 gparted 添加此标志来实现这一点。这样做之后,SP1 的更新就顺利完成了。
当尝试重新启动 Ubuntu 时,grub 抱怨说它再也找不到内核了!我尝试启动 Ubuntu 最小 CD,并使用 chroot、update-grub 和 grub-install 恢复 grub,但没有成功。我仍然遇到无法启动 Ubuntu 的问题,将我置于名为 initramfs 的最小系统中。不过,似乎分区的 uuid 发生了变化。我猜这是在我将 bootflag 添加到 Windows 磁盘时发生的。
我接下来尝试的是告诉 grub 不要使用 uuid 来加载内核,方法是取消注释 /etc/default/grub 中的某些内容。然后我启动了内核,但它突然停止了(我猜是当它试图挂载根文件系统时),说相关的 uuid 不存在,让我再次进入 initramfs。奇怪的是,我甚至无法使用 /dev/sdb1(在我的情况下是在这个分区上)挂载根分区。
如果有办法无需重新安装即可恢复系统,我会很高兴。
更新
如果有人关心的话,我解决了这个问题。出于某种原因,我还重置了 BIOS,它将 SATA 协议重新设置为 IDE。似乎 initrd 中没有这个驱动程序。所以我把它重新设置了一下,现在它又可以正常工作了。
答案1
啊,分区的 UUID。根据我的经验,这种方法只有在您不篡改分区的情况下才有效。我已决定删除 /etc/fstab 和 Grub 中对 UUID 的所有引用,然后一切就会正常。
有时,在最小系统中驱动器的名称会有所不同,因此您无法挂载 /dev/sdb1。尝试通过以下操作查看找到了哪些分区
fdisk -l
或者你可以非常仔细地观察内核启动,或者使用
消息
再次向您展示内核环形缓冲区……