使用udev增强对ceph储存设备的管理

555 阅读2分钟

需求描述 默认情况下磁盘可以使用by-id/by-partlabel/by-parttypeuuid/by-partuuid/by-path/by-uuid等多种形式的名称对磁盘设备进行管理,但是在ceph中,如果磁盘数量过多,加上为了更好的区别每一个OSD对应的磁盘分区用途(比如filestore or journal),同时确保物理磁盘发生变更(故障盘替换后)后对应的名称不变,对OSD对应的磁盘设备命名提出新的管理需求。

本例使用udev的方式,将磁盘按照osd[N]的方式进行命名,比如/dev/osd5_filestore_1表示osd5的第一个filestore分区,/dev/osd5_journal_5表示osd5的第一个journal分区(表示该磁盘用于osd.5的filestore),以/dev/sdd为例

1.查看设备信息

root@demo:~# udevadm info --query=all --name=/dev/sdd
 P: /devices/pci0000:00/0000:00:0d.0/ata6/host5/target5:0:0/5:0:0:0/block/sdd
 N: sdd
 S: disk/by-id/ata-VBOX_HARDDISK_VB98806c01-1fe3494a
 S: disk/by-id/scsi-SATA_VBOX_HARDDISK_VB98806c01-1fe3494a
 S: disk/by-path/pci-0000:00:0d.0-scsi-0:0:0:0
 S: osd5data
 E: DEVLINKS=/dev/disk/by-id/ata-VBOX_HARDDISK_VB98806c01-1fe3494a /dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VB98806c01-1fe3494a /dev/disk/by-path/pci-0000:00:0d.0-scsi-0:0:0:0 /dev/osd5data
 E: DEVNAME=/dev/sdd
 E:DEVPATH=/devices/pci0000:00/0000:00:0d.0/ata6/host5/target5:0:0/5:0:0:0/block/sdd  #这个表示物理设备的系统ID
 ...

2.选取设备的标识码,示例中用的是DEVPATH(DEVPATH= /devices/pci0000:00/0000:00:0d.0/ata6/host5/target)

3.编写udev rules规则文件

root@demo:~# cat /etc/udev/rules.d/20-persistent-disk.rules
 KERNEL=="sd?", SUBSYSTEM=="block", DEVPATH=="*/devices/pci0000:00/0000:00:0d.0/ata6/host5/target5:0:0/5:0:0:0*", SYMLINK+="osd5", GOTO="END_20_PERSISTENT_DISK"
 KERNEL=="sd?*", ATTR{partition}=="1", SUBSYSTEM=="block", DEVPATH=="*/devices/pci0000:00/0000:00:0d.0/ata6/host5/target5:0:0/5:0:0:0*", SYMLINK+="osd5_filestore_%n"
 KERNEL=="sd?*", ATTR{partition}=="2", SUBSYSTEM=="block", DEVPATH=="*/devices/pci0000:00/0000:00:0d.0/ata6/host5/target5:0:0/5:0:0:0*", SYMLINK+="osd5_journal_%n"
 LABEL="END_20_PERSISTENT_DISK"

4.执行以下命令向内核发送event事件,触发udev rules的执行(类似模拟块设备的热插拔)。

udevadm trigger --subsystem-match=block --action=add

5.检查最终效果

image.png