通过 UUID 在磁盘驱动器上安装 grub

通过 UUID 在磁盘驱动器上安装 grub

有没有一种方法可以通过 UUID 而不是使用 /dev/sdX 指示 grub 安装在设备 MBR 上?我正在使用 NixOS 设置外部 eSATA 硬盘,显然,硬盘不会总是相同的 /dev/sdX 设备?

我发现我可以使用 boot.loader.grub.device = "/dev/sdX" 来配置它,但可以将其设置为“/dev/disk/by-uuid/....”之类的东西吗?

答案1

grub-install /dev/by-uuid/XXX 不起作用,因为整个硬盘没有 UUID(至少在我的计算机上没有)。相反,我们可以使用通过硬盘序列号生成的 /dev/by-id/XXX。

在 NixOS 上,配置文件将是:

boot.loader.grub.device = "/dev/by-id/XXXX"

答案2

尝试 grub-install "UUID=700C663F-4183-4A8D-BAC2-EE34E5518B9C" /dev/sda0 UUID 是 "/" 分区 sda0 是 "/" 设备源是 grub2 手册 /dev/disk/by-uuid/ 不起作用,因为这个目录在启动之前不存在,最好使用 partuuid,因为这个 dos 不会随着重新格式化而改变 - uuid 会随着格式化而改变

答案3

是,修改/boot/grub/menu.cfg

root=/dev/disk/by-uuid/无论什么-blkid-输出-放置在这里

...尝试一下。

例如

set root=/dev/disk/by-uuid/'3a2adf19-8685-483c-9889-1b4d56788486'

答案4

不,你不能grub-install /dev/disk/by-uuid/foo。这并不是说不可能的, 一可能想出一种方法,但至少是不切实际的。

UUID(通用唯一标识符)是几乎分区的唯一标识符,而不是设备本身。也就是说,分区有 UUID,但寻址的 MBR 位置grub-install没有 UUID。

如果您为设备生成了 UUID(例如uuidgen /dev/sdb),那么您会遇到 GRUB 中的 device.map 问题。 grub-mkdevicemap无法自动纠正该问题。

例如,如果你grub-install /dev/disk/by-uuid/de305d54-75b4-431b-adb2-eb6b9e546013收到如下错误

grub-install: warning: File system `ext2' doesn't support embedding.
grub-install: warning:  Embedding is not possible.   GRUB can only be installed in this setup  by using blocklists. <blah, blah, blah>

...事情就是这样。

更多信息请见https://unix.stackexchange.com/questions/174206/warning-file-system-ext2-doesnt-support-embedding-but-my-system-isnt-emb

这是一个有趣的实验。谢谢。

相关内容