我最近在我的 Arch Linux 电脑上安装了另一个硬盘。第一次启动时一切正常。但下次我重新启动电脑时却出现了错误/dev/sda2 not found
。
瞧,基本上我的启动硬盘有时是sda
,有时是sdb
。它似乎是完全随机的,而且我在 BIOS 中没有看到任何可将其设为非随机的选项。我该如何解决这个问题?
答案1
如果您的两个硬盘位于不同的接口上并由不同的驱动程序控制,Linux 将按照驱动程序初始化的顺序命名它们。如果初始化是并行的,这确实会导致设备名称分配不同。
设备名称由udev。Arch wiki 中提到了您的问题,但是那里似乎没有解决方案。
我对 Arch 不太熟悉,所以我将解释如何在 Ubuntu 中解决这个问题;底层功能由 Linux 内核提供,它们是相同的,但可能存在配置设置使得这些功能在 Arch 上的工作方式不同。
除了在引导加载程序中/dev/sda2
用作根设备(root=
)设置外,您还可以使用 UUID 或标签,语法如下:
… /boot/vmlinuz root=UUID=01234567-89ab-cdef-0123-456789abcdef ro …
… /boot/vmlinuz root=LABEL=mylabel ro …
UUID 唯一地标识一个文件系统,因此您需要 上的文件系统的 UUID /dev/sda2
。在 Ubuntu 上,/dev/disk/by-uuid/01234567-89ab-cdef-0123-456789abcdef
是 的符号链接/dev/sda2
。如果您的文件系统有标签(手动设置,由您来强制唯一性), 下有一个符号链接/dev/disk/by-label
。标签和 UUID 链接由以下 udev 规则生成:
ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
答案2
看一眼持久块设备命名。
就我个人而言,我认为标签是最好的,因为它们赋予你 UUID 的唯一性,但却是人类可读的。
你最终会得到类似这样的 fstab:
LABEL=boot /boot ext2 defaults 0 1
LABEL=swap swap swap defaults 0 0
LABEL=root / ext4 defaults 0 1