jst*_*err 0 debian udev devices disk
我有三个相同的服务器,所有三个相同的布线和正确放置的硬盘。尽管其中一台服务器/dev/sdg /dev/sdh使用了 sata-ssds,而另外两台服务器使用了它们/dev/sda /dev/sdb- 我将 Proxmox 与 ZFS 一起使用。
SATA-SSD 连接到板载(SATA 布线到板),而硬盘通过单电缆 (SAS) 连接到 SAS-HBA。
这些名字是如何分配的?序列号?在这里找不到对我有帮助的有效信息。在 Debian + ZFS 中安装后有没有办法更改设备名称?
这些/dev/sd*名称只是按检测顺序分配的,如果每次启动时存储驱动程序模块加载顺序不完全相同,或者如果插入或拔出磁盘,则可能会从一次启动到下一次启动。当前的智慧是在您的配置中使用其他东西:
/etc/fstab,您可以使用UUID=orLABEL=语法代替设备名称device-mapper-multipath将自动发现各个/dev/sd*路径并构建一个持久设备名称,以使用所有这些路径访问磁盘,通过 WWID、自动生成的持久名称或根据您的偏好自定义名称/dev/disk/by-*/目录中的符号链接找到以合适方式命名的磁盘/分区:
/dev/disk/by-id/* 按磁盘型号名称和序列号/dev/disk/by-uuid/*通过文件系统 UUID(/etc/fstab对于不涉及的用途,实际上等效于UUID= 语法/etc/fstab)/dev/disk/by-label/*按文件系统标签(/etc/fstab对于不涉及的用途,实际上等效于LABEL= 语法/etc/fstab)/dev/disk/by-path/* 按硬件设备路径:“总线 X、插槽 Y、功能 Z、控制器插槽 N”(如果您想要基于布线的名称,可能会很有用)/dev/disk/by-partuuid/*和/dev/disk/by-partlabel/*某些发行版(例如,如果我没记错的话,例如 SuSE)也可能具有基于 udev 规则的机制,/dev/sd*当操作系统首次看到它时,该机制会将特定信息与具有特定序列号或其他识别信息的磁盘联系起来。Debian 没有。
启动 Debian 时,当系统仍在 initramfs 上运行时,首先加载根文件系统的磁盘控制器。如果您的系统仅使用一个磁盘控制器(例如台式机上的 AHCI SATA,或机架式服务器上的热插拔感知 SAS 硬件 RAID 控制器),它通常会以某种稳定的顺序(特定于驱动程序)检测连接到它的所有磁盘,例如通过 SATA 连接器编号或热插拔插槽顺序),这就是它的结尾:这样的顺序可能非常稳定。
但是如果你有多个不同的存储控制器,你可能会头疼,因为systemd基于 -based 的启动过程不能保证有任何持久的确定性顺序,这意味着启动过程早期部分的小时间差异可能会改变后面部分的顺序. 并且在启动时,许多事情会并行发生,所以无论如何你都不应该依赖隐式排序。
ZFS FAQ 有很多关于在 Linux 上选择正确类型的设备名称的内容。基本上:
/dev/sd*的小型开发/测试设置只/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>
Run Code Online (Sandbox Code Playgroud)
(这表明 ZFS 实际上可能具有与 Linux LVM 类似的自动发现系统;只是发现发生在导入池时,而不是在每次启动时。)