如何让 USB 拇指驱动器使用 grub2 进行启动?

如何让 USB 拇指驱动器使用 grub2 进行启动?

我在 USB 闪存驱动器上安装了 grub2。
同时还安装了 ubuntu server 10.04 LTS。

这是使用 debootstrap 实用程序创建的。

但是,现在我试图让它启动,但却遇到了麻烦。

该拇指驱动器上有一个 ext2 主分区,我已将引导加载程序连同我需要的内核和内核模块以及 grub.d 脚本复制到了它上面。

我认为既然这是一个拇指驱动器,我应该使用 uuid 而不是设备名称。

无论如何,当它尝试启动 grub2 时,会将其返回到救援提示并出现此错误。

error: no such device: 792f......aaee3

因此我像这样运行了 ls 命令:

grub rescue> ls
(hd0) (hd0,msdos1)

这让人困惑。grub2 是否假设第一个分区是 msdos 而不是 ext2?这可能是它无法启动的原因吗?我记得在某处看到过一些 bios 将拇指驱动器视为软盘驱动器并将第一个分区设为 msdos?这是怎么回事?

编辑

有趣的是,Ubuntu 的制作启动盘也产生了完全相同的错误。但是,我对此并不十分确定,因为当我运行它时,它无法安装引导加载程序。所以我用命令“grub-install /dev/sdb”手动安装了它

更新1

我发现,由于我在另一个系统上创建了 grub.cfg,所以它的所有条目中都有 hd1。所以我把它改成了 hd0。

现在我注意到我可以在救援提示符下运行这些命令。

ls (hda,1)/

我决定尝试

insmod 正常 正常

果然,它出现了菜单,我可以选择一个菜单项并启动 Linux。

现在,我该如何修复“没有这样的设备”错误。/dev/sda1 的 uuid 肯定是它本身。

更新2

好吧,这真的很奇怪。我拔出闪存驱动器并将其重新插入我的另一台计算机。blkid 说了以下内容:

/dev/sdb1: LABEL="Transcend" UUID="597D-50B2" TYPE="vfat" 
/dev/sda5: UUID="0c81f24b-edeb-4be9-9859-074f3783e618" TYPE="swap" 

首先,/dev/sda1 没有显示出来。这可能与它在 LVM 上有关吗?

其次,我的 tranced 拇指驱动器 sdb1 的 UUID 很短?并且与之前的 UUID 不同。这是怎么回事?UUID 是在创建文件系统时生成的吗?还是有时会由我可能运行的一些实用程序重新生成?

更新3: 卸载驱动器并重新安装后,UUID 恢复正常。也许这是 Kubuntu 11.10(我的台式机)中的一个错误。

答案1

修复。

以防有人好奇。这就是我让它运行的方法。

拇指驱动器显示为 /dev/sdb

运行这些命令

sudo mount /dev/sdb1 /mnt
for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt/$i;  done
sudo chroot /mnt
grub-install /dev/sdb
update-grub

然后编辑 /boot/grub/grub.cfg 将所有 (hd1,1) 行更改为 (hd0,1)

然后运行...

exit
for i in /dev/pts /dev /proc /sys; do sudo umount /mnt/$i ; done

下一个。

  1. 项目清单
  2. 彻底关闭服务器电源。
  3. 拔出电源线。等待 10 秒。
  4. 重新插入电源。
  5. 插入拇指驱动器并打开电源。
  6. Linux 现在可以完全从拇指驱动器启动。

似乎有两个问题。它们与 grub.cfg 中引用的错误设备有关(即 hd1 应该是 hd0)。

其次,服务器 BIOS 中有一个错误。它一直引用我之前使用过的另一个拇指驱动器上的文件系统的 UUID。热重启似乎会将该 UUID 保留在那里。冷启动解决了这个问题。

答案2

类似的错误,我的错误是在创建文件系统后,我没有通过内核再次重新读取分区表。

解决方案重新启动/重新读取分区表并执行以下操作:

再次生成配置

grub-mkconfig > /boot/grub/grub.cfg

使用新配置重新安装

grub-install

相关内容