Use nomes persistentes, em vez de usar /dev/sdX
você pode usar
/dev/disk/by-id/scsi-SATA_MODELNUMBER_XXXXXXXX
Eu tenho 8 discos rígidos em um servidor doméstico. Às vezes eu conecto e desconecto um ou dois, e se eu reiniciar o sistema, todas as letras do drive estão bagunçadas. Eu gostaria de atribuir um bloco para cada disco rígido com base em seu número de série ou outros atributos que possam identificar cada disco rígido. O problema é que usando udevadm info --attribute-walk --path /sys/block/sda
não consigo encontrar nenhum atributo exclusivo que uma regra udev
possa igualar!
Esta é a saída para 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"
Todos os outros discos rígidos têm saída semelhante, não há como identificá-los. ATTRS {model} não é adequado porque tenho 3 discos rígidos que são do mesmo modelo.
Use nomes persistentes, em vez de usar /dev/sdX
você pode usar
/dev/disk/by-id/scsi-SATA_MODELNUMBER_XXXXXXXX
Você realmente se preocupa com a letra da unidade, ou o seu problema é montar os sistemas de arquivos corretamente e de forma consistente?
Se este for o caso, talvez use o UUID em /etc/fstab
em vez de uma entrada de dispositivo. O UUID pode ser encontrado com blkid /dev/sd[a-z]*
e independentemente de você querer verificar o diretório /dev/disk/by-id/
.
Percebi que na minha caixa de testes do RHEL 6 o udev usa um programa auxiliar /lib/udev/ata_id
para recuperar mais informações sobre dispositivos (S) ATA, incluindo um número de série HW, resultando na seguinte regra:
# 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"