Bloco de unidade persistente usind udev

3

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.

    
por giovi321 14.07.2014 / 11:04

2 respostas

1

Use nomes persistentes, em vez de usar /dev/sdX você pode usar

/dev/disk/by-id/scsi-SATA_MODELNUMBER_XXXXXXXX
    
por 14.07.2014 / 12:30
1

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"
    
por 14.07.2014 / 12:38

Tags