如何将硬盘静态绑定到 /dev/sd* 名称?

如何将硬盘静态绑定到 /dev/sd* 名称?

也许这是一个XY问题,所以这是一个完整的情况:
我们现在有很多服务器将用作存储/数据库。它们都有相似的设置:用于操作系统的 SSD 驱动器 (Ubuntu 18.04.2 LTS) 和 6 个 HDD 作为 JBOD。这六个驱动器需要通过 mdadm 分组为 RAID-10 阵列。

我使用了 6 台服务器并使用服务器 ISO 手动安装了 Ubuntu,而不是实时服务器(没有 Cloud-Init)。在安装过程中和启动后,我注意到“系统”分区/dev/sda在某些服务器和其他服务器上的名称相同/dev/sdg。在这种情况下,我无法通过 xCat、Ansible 和其他“自动化”实用程序的某些脚本运行 mdadm 命令来自动创建 RAID 阵列。

我以“Legacy”模式安装了 Ubuntu,这 6 个 HDD 具有 MBR 分区方案,因此当我运行ls -l /dev/disk/by-uuid.我注意到乌德夫可能会有帮助,但仍然需要人工为选定的服务器编写规则并运行它,因此最好不要这样做,而是手动创建 RAID。但我们总共将拥有 100 多台服务器,我愿意尽可能地自动化此例程。有任何想法吗?

答案1

多年来,内核行为已被记录在案,即使在同一台服务器上重新启动,您也不能依赖一致的驱动器设备命名,更不用说在不同的服务器上了。

您必须编写自动 RAID 设置脚本来检测系统中的驱动器并区分根 SSD 和存储 JBOD 驱动器。

检测根驱动器的一种明显方法是运行mount | grep " on / ".

否则,您可以使用/dev/disk/by-id/,这是一个由 填充的符号链接场udev。每个条目都是一个符号链接,其名称基于驱动器的制造商和序列号,符号链接指向驱动器的块设备(以及分区,如果有)。例如,在我的一个系统上,/dev/disk/by-id包含:

lrwxrwxrwx 1 root root  9 Jul 24 16:56 ata-ST2000DL003-9VT166_5YD1QFAG -> ../../sdb
lrwxrwxrwx 1 root root 10 Jul 24 16:56 ata-ST2000DL003-9VT166_5YD1QFAG-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 Jul 24 16:56 ata-ST2000DL003-9VT166_5YD1QFAG-part9 -> ../../sdb9
lrwxrwxrwx 1 root root  9 Jul 24 16:56 ata-WDC_WD20EARS-00MVWB0_WD-WCAZA5353040 -> ../../sdd
lrwxrwxrwx 1 root root 10 Jul 24 16:56 ata-WDC_WD20EARS-00MVWB0_WD-WCAZA5353040-part1 -> ../../sdd1
lrwxrwxrwx 1 root root 10 Jul 24 16:56 ata-WDC_WD20EARS-00MVWB0_WD-WCAZA5353040-part9 -> ../../sdd9
lrwxrwxrwx 1 root root  9 Jul 24 16:56 ata-WDC_WD20EARS-00MVWB0_WD-WCAZA5379164 -> ../../sdc
lrwxrwxrwx 1 root root 10 Jul 24 16:56 ata-WDC_WD20EARS-00MVWB0_WD-WCAZA5379164-part1 -> ../../sdc1
lrwxrwxrwx 1 root root 10 Jul 24 16:56 ata-WDC_WD20EARS-00MVWB0_WD-WCAZA5379164-part9 -> ../../sdc9
lrwxrwxrwx 1 root root  9 Jul 24 16:56 ata-WDC_WD20EARX-008FB0_WD-WCAZAJ827116 -> ../../sda
lrwxrwxrwx 1 root root 10 Jul 24 16:56 ata-WDC_WD20EARX-008FB0_WD-WCAZAJ827116-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Jul 24 16:56 ata-WDC_WD20EARX-008FB0_WD-WCAZAJ827116-part9 -> ../../sda9

这是一个 Seagate 2TB 驱动器和三个 WD 2TB 驱动器,每个驱动器都有两个分区(分区 1 和 9 - 是的,它们用于 zfs 池)。

如果您的脚本在每个 RAID 驱动器上创建一个分区(强烈推荐),并使用该分区而不是整个驱动器,则可以轻松识别已在使用的驱动器(即有分区)和未使用的驱动器(因此可以安全地用于 raid 阵列)。

wwn-几乎可以肯定,该目录中也会有以 开头的设备名称。这些是全球通用名称属于每个驱动器的标识符。我发现它们不如供应商+序列号名称有用,因为它们不提供任何明显的方法来物理识别驱动器,而无需使用查找表将 OUI 代码转换为制造商。

相关内容