Eu fiz esta configuração no udev:
KERNEL=="sdd", SYMLINK+="QUORUML", OWNER="test", GROUP="gtest", MODE="0660"
KERNEL=="sde", SYMLINK+="QUORUMR", OWNER="test", GROUP="gtest", MODE="0660"
e depois, adicionei outro disco e o novo disco se tornou o /dev/sde
e o antigo /dev/sde
se tornou /dev/sdf
, então a regra do udev acima ficou errada, pois o nome de sde
mudou para sdf
. Como posso garantir o disco correto? existe algum outro id? Eu tentei algo como blkid
, mas como não há partição, ele não retorna nenhum id.
[root@dbnode1 rules.d]# blkid /dev/sdd
[root@dbnode1 rules.d]#
Eu procuro algo como quando há discos iscsi, podemos fazer isso usando o id iscsi:
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$parent", RESULT=="360014054187384e668f45e58d036f19a", SYMLINK+="disk4", OWNER="xxxx", GROUP="xxxx", MODE="0660"
Você deve estar combinando
SUBSYSTEM=="block", ENV{ID_SERIAL}=="xxx"
(a marca/modelo E o número de série) de qualquer maneira. OuENV{ID_SERIAL_SHORT}
(somente o número de série). OuENV{ID_WWN}
(um identificador globalmente exclusivo para a unidade). Ou talvezENV{ID_PART_TABLE_UUID}
.Costumo usar
ID_SERIAL_SHORT
porque é exclusivo o suficiente para minhas necessidades (os fabricantes de unidades tendem a não reutilizar números de série e diferentes fabricantes têm estilos diferentes para seus números de série), e é o que eu imprimo em etiquetas adesivas para que eu possa identificar facilmente as unidades no meu baias de troca a quente. Eu não uso os WWNs porque IMO eles são muito parecidos, são difíceis de distinguir um do outro.Não há garantia explícita de que os nomes dos dispositivos persistam nas reinicializações - eles geralmente permanecem os mesmos por meses ou até anos, mas não é seguro confiar nisso. Os desenvolvedores do kernel documentaram e declararam várias vezes que não há garantia de que eles não mudarão na próxima vez que você inicializar. Por quê? Como uma unidade pode morrer (ou apenas demorar um pouco mais para girar ou responder quando o kernel procura dispositivos), você pode adicionar ou remover uma unidade, uma nova versão do kernel pode detectar dispositivos em uma ordem diferente ou qualquer outra razões. É por isso que o conselho há muitos anos tem sido "Não use nomes /dev/sdX em
/etc/fstab
. Use um UUID ou LABEL" . O mesmo conselho, use um identificador exclusivo, se aplica às regras do udev.Você pode encontrar os atributos para qualquer unidade com
udevadm info /dev/sdX
. Há muitas propriedades/atributos interessantes e úteis lá, mas por enquanto estou interessado apenas no número de série.por exemplo, eu tenho uma unidade Seagate de 8 TB no meu sistema que atualmente é
/dev/sda
. Eu posso encontrar seu número de série curto com:Para usar isso com uma regra do udev ficaria assim:
Observe
==
que para os dois primeiros atributos, eles são uma comparação e não uma atribuição (consulteman 7 udev
, especialmente aOperators
subseção).Se eu quisesse o número de série completo com o modelo etc, eu poderia usar o seguinte:
e uma regra do udev seria algo assim:
Se estou criando uma regra udev para um dispositivo específico (ou tipo de dispositivo), acho útil adicionar uma versão comentada da saída
udevadm info /dev/name
no arquivo de regras, caso precise dela para referência futura. Use#
para comentários.BTW, se precisar, você pode extrair o valor sozinho (sem o nome da propriedade) com ferramentas como
awk
oucut
: