使用 udev 的持久驱动器块

使用 udev 的持久驱动器块

我的家庭服务器上有 8 个硬盘。有时我插拔一两个,如果重新启动系统,所有驱动器号都会混乱。我想根据每个硬盘的序列号或其他可以识别每个硬盘的属性为每个硬盘分配一个块。问题是使用udevadm info --attribute-walk --path /sys/block/sda我找不到udev规则可以匹配的任何唯一属性!这是以下的输出udevadm info --attribute-walk --path /sys/block/sda

looking at device '/devices/pci0000:00/0000:00:1c.6/0000:08:00.0/0000:09:00.0/host4/target4:0:0/4:0:0:0/block/sda':
  KERNEL=="sda"
  SUBSYSTEM=="block"
  DRIVER==""
  ATTR{range}=="16"
  ATTR{ext_range}=="256"
  ATTR{removable}=="0"
  ATTR{ro}=="0"
  ATTR{size}=="976773168"
  ATTR{alignment_offset}=="0"
  ATTR{discard_alignment}=="0"
  ATTR{capability}=="50"
  ATTR{stat}=="  303039  9092221 74569992  3246580    12765      996    11288  1415644        0  3250052  4661800"
  ATTR{inflight}=="       0        0"
  ATTR{events}==""
  ATTR{events_async}==""
  ATTR{events_poll_msecs}=="-1"

looking at parent device '/devices/pci0000:00/0000:00:1c.6/0000:08:00.0/0000:09:00.0/host4/target4:0:0/4:0:0:0':
  KERNELS=="4:0:0:0"
  SUBSYSTEMS=="scsi"
  DRIVERS=="sd"
  ATTRS{device_blocked}=="0"
  ATTRS{type}=="0"
  ATTRS{scsi_level}=="6"
  ATTRS{vendor}=="ATA     "
  ATTRS{model}=="ST3500630A      "
  ATTRS{rev}=="3.AA"
  ATTRS{state}=="running"
  ATTRS{timeout}=="30"
  ATTRS{iocounterbits}=="32"
  ATTRS{iorequest_cnt}=="0xa39aa"
  ATTRS{iodone_cnt}=="0xa39aa"
  ATTRS{ioerr_cnt}=="0xfa0d"
  ATTRS{evt_media_change}=="0"
  ATTRS{queue_depth}=="1"
  ATTRS{queue_type}=="none"

所有其他硬盘驱动器都有类似的输出,没有办法识别它们。 ATTRS{model} 不合适,因为我有 3 个型号相同的硬盘。

答案1

使用持久命名,而不是使用/dev/sdX您可以使用

/dev/disk/by-id/scsi-SATA_MODELNUMBER_XXXXXXXX

答案2

您是否真的关心驱动器号,或者您是否在正确且一致地在驱动器上安装文件系统方面遇到问题?

如果是后者,可以使用 UUID/etc/fstab而不是设备条目。blkid /dev/sd[a-z]*无论您是否想要检查目录,都可以找到 UUID /dev/disk/by-id/

我注意到在我的 RHEL 6 测试盒中,udev 使用帮助程序/lib/udev/ata_id来检索有关 (S)ATA 设备的更多信息,包括硬件序列号,从而产生以下规则:

# by-id (hardware serial number)
KERNEL=="hd*[!0-9]", IMPORT{program}="ata_id --export $tempnode"
KERNEL=="hd*[!0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_SERIAL}"
KERNEL=="hd*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_SERIAL}-part%n"

相关内容