내 홈 서버에는 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"
다른 모든 하드 드라이브의 출력은 비슷하므로 이를 식별할 방법이 없습니다. 동일한 모델의 하드 드라이브가 3개 있으므로 ATTRS{model}은(는) 적합하지 않습니다.
답변1
사용하는 대신 지속적인 이름 지정을 사용하려면 /dev/sdX
다음을 사용할 수 있습니다.
/dev/disk/by-id/scsi-SATA_MODELNUMBER_XXXXXXXX
답변2
드라이브 문자에 정말로 관심이 있습니까? 아니면 드라이브에 파일 시스템을 올바르고 일관되게 마운트하는 데 문제가 있습니까?
후자의 경우 /etc/fstab
장치 항목 대신 UUID를 사용할 수 있습니다. 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"