如何防止引导之间 /sda /sdb 发生变化?

如何防止引导之间 /sda /sdb 发生变化?

我打算将 Gentoo Linux 安装到一个旧硬件上,该主板同时具有 IDE 和 SATA 硬盘驱动器。我连接了两个 IDE 和一个 SATA 硬盘,并计划对它们进行 RAID。

但是我注意到一个问题:映射到 /dev/sda 的硬盘驱动器在每次启动时都会发生变化!

我正在从互联网上寻找答案。我发现持久设备名称可能是一个解决方案。但我担心它会遇到系统范围内的兼容性问题吗?另外,这很不方便(因为名称很长),除非我可以使用/dev/disk/by-label.但似乎by-label不能指/dev/sdaand-/dev/sdb只有/dev/sda1可能。此外,对于我使用 BIOS 的旧硬件,我认为我只能使用MBR,不能使用GPT。如何更改MBR环境下的磁盘标签?

另一方面,我认为理想的解决方案是/dev/sda在每次启动时映射到同一硬盘。想象一下,这可以通过在硬盘上保存一个名为“bootmap”的文件来实现。并且“/sda”写入“bootmap”文件中。系统启动时,如果在“bootmap”中找到“/sda”,则该驱动器将映射到/dev/sda.如果找到“/sdb”,则会映射到/dev/sdb.等等。 (但我知道这可能不是那么理想。)

那么,如何避免/dev/sda从开机到开机的映射变化呢?

作为替代方案,编辑标签的方式也很好。 - 鉴于它不会在任何地方出现兼容性问题。

(PS - 不管怎样,互联网上还没有解决方案。)

答案1

大多数文件系统都有唯一的 UUID 和标签,您可以将其设置为独特的值。这些允许您通过/dev/disk/by-uuid或引用包含文件系统的卷/dev/disk/by-label。其他类型的卷(RAID、LVM 等)通常也有一个名称。 RAID 和 LVM 卷是根据物理卷中的唯一标识符进行组装的,无论卷如何连接。因此需要引用磁盘本身是不寻常的。

如果您确实需要根据磁盘的连接方式来访问磁盘,则可以使用/dev/disk/by-id.条目的形式为或。所有子目录均由BUS-SERIALBUS-NAME-SERIAL/dev/disk/乌德夫顺便说一句,特别是持久存储规则

另一个解决方案是在 下创建您自己的符号链接/dev。您可以编写 udev 规则来执行此操作。添加/etc/udev/rules.d/50-local-persistent-disks.rules包含如下规则的文件

SUBSYSTEM=="block", ATTRS{model}=="Yoyodine HD9001", \
  ATTRS{serial}=="123-456-789", \
  SYMLINK+="myfancyname"

运行udevadm info -a /dev/sda看看…==…您可以使用哪些模式。如果您使用多个模式,它们必须来自同一输出块,您不能混合来自不同父设备的模式。

答案2

我认为您可以安全地使用仅绑定到磁盘类型/型号的 /dev/disk/by-id/ 链接:

lrwxrwxrwx 1 root root   9 Jul 14 15:13 ata-Hitachi_HDS123456789_PVC1234567890 -> ../../sda

/dev/disk/by-path 不太可能与控制器发生冲突:

lrwxrwxrwx 1 root root   9 Jul 14 15:13 pci-0000:00:1f.2-ata-2 -> ../../sda
lrwxrwxrwx 1 root root  10 Jul 14 15:13 pci-0000:00:1f.2-ata-2-part1 -> ../../sda1
lrwxrwxrwx 1 root root  11 Jul 14 15:40 pci-0000:00:1f.2-ata-2-part10 -> ../../sda10
lrwxrwxrwx 1 root root  11 Jul 14 15:43 pci-0000:00:1f.2-ata-2-part11 -> ../../sda11
lrwxrwxrwx 1 root root  11 Jul 14 15:13 pci-0000:00:1f.2-ata-2-part12 -> ../../sda12

答案3

就我而言,我通过在我的主目录(例如:/home/username/Data)中安装 /dev/sdb(额外的 HDD)来修复它。但如果我将 /dev/sdb 安装在 /mnt 内,每次重新启动计算机时它都会交换 sda 和 sdb。

相关内容