有没有一种方法可以通过 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>
...事情就是这样。
这是一个有趣的实验。谢谢。