我在 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
下一个。
- 项目清单
- 彻底关闭服务器电源。
- 拔出电源线。等待 10 秒。
- 重新插入电源。
- 插入拇指驱动器并打开电源。
- Linux 现在可以完全从拇指驱动器启动。
似乎有两个问题。它们与 grub.cfg 中引用的错误设备有关(即 hd1 应该是 hd0)。
其次,服务器 BIOS 中有一个错误。它一直引用我之前使用过的另一个拇指驱动器上的文件系统的 UUID。热重启似乎会将该 UUID 保留在那里。冷启动解决了这个问题。
答案2
类似的错误,我的错误是在创建文件系统后,我没有通过内核再次重新读取分区表。
解决方案重新启动/重新读取分区表并执行以下操作:
再次生成配置
grub-mkconfig > /boot/grub/grub.cfg
使用新配置重新安装
grub-install