我的台式机上有一个 SATA 磁盘和一个 IDE 磁盘,我在 SATA 磁盘上安装了 Windows 7,在 IDE 上安装了 ArchLinux,grub 安装在 IDE 磁盘上。
在 ArchLinux /etc/fstab 中,我将根挂载设备设置为 /dev/sda2 而不是 /dev/sdb2,如 ArchLinux 安装程序中所检测到的。
但是,每次我从 grub 启动到 ArchLinux 时,initrd 都有可能无法从 /dev/sda2 读取,因为 /dev/sda 似乎是 Windows 7 磁盘,而不是 ArchLinux 磁盘。但有时它可以正常工作,因为 /dev/sda 变成了 ArchLinux 磁盘。换句话说,重启后 ArchLinux 磁盘是 /dev/sda 还是 /dev/sdb 会有所不同。
我想知道使用 UUID 来选择分区而不是设备路径是否有帮助。还有其他解决方案吗?
答案1
使用 UUID 始终是更好的选择。但话虽如此,你的问题来自你的 uDev。一些较旧的 Sata 控制器需要一些时间才能启动,到那时 udev 已经找到 IDE 驱动器并将其用作第一个驱动器。虽然我确实相信这只是来自冷启动。
在使用 Coreboot 时,我经常遇到这个问题,而我发现的唯一真正的解决方案就是暂停系统几秒钟(我的 1TB 最多花了 20 秒)以让驱动器旋转起来。
希望它能有所帮助!
答案2
正如 Crankyadmin 的回答所述,通过 UUID 识别分区比使用设备路径更可取。
另一种方法是通过分区标签进行识别。我更喜欢这种方式而不是 UUID,因为它更易于理解,但您确实需要确保您的分区使用唯一的标签,而分区标签中一些原本合法的字符可能会对此使用造成问题(特别是空格可能不太适用)。
您可以使用 为 ext(2,3,4) 分区添加标签tune2fs -L <new-label> <device>
,或者在格式化时使用 选项-L <new-label>
。在和mkfs.ext(2,3)
中,标签的使用方式与 UUID 相同:/etc/fstab
/boot/grub/menu.lst
# fstab w/ UUID
UUID=3a9a1209-47de-4959-8ba6-9724e4c3eb37 / ext3 defaults,errors=remount-ro 0 1
# fstab w/ label
LABEL=arch-root / ext3 defaults,errors=remount-ro 0 1
# GRUB config w/ UUID
kernel /boot/vmlinuz-2.6.20-15-generic root=UUID=3a9a1209-47de-4959-8ba6-9724e4c3eb37 ro quiet splash
# GRUB config w/ label
kernel /boot/vmlinuz-2.6.20-15-generic root=LABEL=arch-root ro quiet splash
答案3
我同意之前关于在配置中使用 UUID 而不是 /dev/sdX 的评论(例如在 /etc/fstab 中)。虽然这是一个老问题,但我想分享一下这我今天处理类似问题时发现的页面。它似乎是如何使用 UUID(或标签,如果您喜欢的话)的一个很好的参考。