Debian 或 Linux 通常如何在 ZFS 上分配设备名称(例如 /dev/sdX)?

Debian 或 Linux 通常如何在 ZFS 上分配设备名称(例如 /dev/sdX)?

我有三个相同的服务器,所有三个相同的布线和正确放置的硬盘。尽管其中一台服务器安装了/dev/sdg /dev/sdhSATA-SSD,而另外两台服务器也安装了它们/dev/sda /dev/sdb——我将Proxmox与ZFS一起使用。

SATA-SSD 在板上连接(SATA 布线到板),而硬盘则通过单电缆 (SAS) 连接到 SAS-HBA。

这些名称是如何分配的?序列号?在这里找不到对我有帮助的有效信息。有没有办法在 Debian + ZFS 安装后更改设备名称?

答案1

这些/dev/sd*名称只是按照检测顺序分配,如果存储驱动程序模块加载顺序每次不完全相同,或者磁盘插入或拔出,​​则每次启动时名称可能会有所不同。当前的明智做法是在配置中使用其他内容:

  • 在 中/etc/fstab,您可以使用UUID=orLABEL=语法代替设备名称
  • 如果您使用 LVM,它已经包含一种自动发现物理卷(无论设备名称如何)的机制,并使用保证持久的路径来呈现逻辑卷
  • 如果使用软件 RAID,它同样包含一种根据磁盘上实际内容(而不是设备名称)查找 RAID 成员的机制
  • 如果使用多路径 SAN LUN,device-mapper-multipath将自动发现各个/dev/sd*路径并构建一个持久设备名称,以便使用所有这些路径访问磁盘,可以通过 WWID、自动生成的持久名称或根据您的偏好自定义名称
  • 根据您到底要查找的内容,您可能会使用/dev/disk/by-*/目录中的符号链接找到以合适的方式命名的磁盘/分区:
    • /dev/disk/by-id/*按磁盘型号名称和序列号
    • /dev/disk/by-uuid/*/etc/fstab通过文件系统 UUID(对于不涉及的用途,实际上相当于UUID= 语法/etc/fstab
    • /dev/disk/by-label/*/etc/fstab通过文件系统标签(对于不涉及的使用,实际上相当于LABEL= 语法/etc/fstab
    • /dev/disk/by-path/*按硬件设备路径:“总线 X、插槽 Y、功能 Z、控制器插槽 N”(如果您想要基于布线的名称,可能会很有用)
    • 在 GPT 分区的磁盘上,还可以使用以下命令找到分区/dev/disk/by-partuuid/*/dev/disk/by-partlabel/*

某些发行版(例如 SuSE,如果我没记错的话)也可能具有基于 udev 规则的机制,/dev/sd*当操作系统首次看到该磁盘时,该机制会将特定磁盘与具有特定序列号或其他标识信息的磁盘绑定在一起。 Debian 没有这个。

启动 Debian 时,当系统仍在 initramfs 上运行时,首先加载根文件系统的磁盘控制器。如果您的系统仅使用一个磁盘控制器(例如台式机上的 AHCI SATA,或机架式服务器上的热插拔感知 SAS 硬件 RAID 控制器),它通常会以某种稳定的顺序(特定于驱动程序)检测连接到它的所有磁盘。 ,例如按 SATA 连接器编号或热插拔插槽顺序),这就是它的结尾:这样的顺序可能相当稳定。

但是,如果您有多个不同的存储控制器,您可能会感到头痛,因为systemd基于 的启动过程不能保证具有任何持久的确定性顺序,这意味着启动过程早期部分的微小时间差异可能会改变后面部分的顺序。在启动时,许多事情将并行发生,因此无论如何您都不应该依赖隐式排序。

ZFS FAQ 有很多关于在 Linux 上选择正确类型的设备名称的内容。基本上:

  • 仅用于/dev/sd*小型开发/测试设置
  • 对于小型池(少于大约 10 个磁盘),请使用/dev/disk/by-id/*
  • 对于较大的池,最佳解决方案是设置一个/etc/zfs/vdev.conf文件创建仍然反映底层硬件布局的漂亮短名称
  • 对于大型池的替代解决方案是/dev/disk/by-path/*名称又长又麻烦。

幸运的是,更改现有池的名称并不困难:它基本上只是导出并重新导入池,同时在导入时指定新的名称方案。

例如,如果您的池名为,您可以将其导出,然后使用如下名称zfspool重新导入:/dev/disk/by-id/*

# <prepare pool for export, i.e. unmount mount points or stop VMs as necessary>
zpool export zfspool
zpool import -d /dev/disk/by-id zfspool
# <resume using the pool>

(这表明 ZFS 实际上可能具有类似的自动发现系统,例如 Linux LVM;只是发现发生在导入池时,而不是每次启动时。)

相关内容