Como posso dizer ao meu kernel para não colocar unidades externas antes das internas?

1

Eu tenho alguns drivers internos, que normalmente levam os nomes /dev/sda ... /dev/sdc . No entanto, se eu conectar um disco rígido externo e reinicializar, isso será reordenado, com a unidade externa ocupando /dev/sdb por algum motivo.

Agora, sei que também posso me referir a dispositivos por meio de seus UUIDs, mas isso é difícil de memorizar. Eu quero evitar este reordenamento - a menos que eu mude meu hardware interno. No mínimo, eu quero impedir que o disco rígido externo seja inserido nos quatro primeiros.

    
por einpoklum 06.05.2018 / 22:52

1 resposta

3

Os nomes dos dispositivos /dev/sd* são atribuídos por ordem de chegada, por padrão, conforme os drivers do controlador de armazenamento são inicializados. Se você tiver vários controladores de armazenamento diferentes, poderá manipular sua ordem de carregamento.

Se isso não for possível, é hora de aprender a escrever regras do udev. Não é tão difícil assim.

Primeiro, execute udevadm info -q all -a -n /dev/sda . Isso listará todos os atributos que você pode usar para identificar o /dev/sda disk for udev. O comando será iniciado a partir do dispositivo de disco /dev/sda e, em seguida, subirá na árvore de dispositivos, gerando um bloco de atributos a cada vez. Você pode usar atributos do primeiro bloco e outro bloco de sua escolha .

O primeiro bloco é sempre o dispositivo de bloco real. Ele tende a não ter muitos atributos úteis, mas podemos usar o atributo SUBSYSTEM para garantir que nossa regra seja acionada apenas para o dispositivo de bloqueio real. Então, a primeira condição para nossa regra do udev será SUBSYSTEM=="block" .

O segundo bloco, para um disco SATA típico, contém informações no nível do driver sd . Ele tem ATTRS{model} e / ou ATTRS{wwid} , que pode ser usado para identificar exclusivamente esse disco específico. O ATTRS{wwid} pode ser uma cadeia longa com muitos espaços, mas deve incluir o número de série ou outro identificador exclusivo para a unidade - esse seria o melhor candidato. Se o número de série estiver cercado por espaços ou outras cadeias sem importância, você poderá combiná-lo assim:

ATTRS{wwid}=="*<serial number>*"

Quando houver condições suficientes para identificar exclusivamente seu dispositivo de disco, você poderá decidir o que fazer com ele. A melhor solução provavelmente seria usar SYMLINK+="custom_name" para criar um link que aponte automaticamente para o nome real do dispositivo, seja o que for.

Você também pode usar algo como NAME="sda" para codificar o nome real do dispositivo, mas, se fizer isso, é melhor criar essas regras para todos os seus discos atuais, para que um disco que ainda não tenha um nome personalizado A regra do udev não recebe uma atribuição sobreposta. (Se você fizer isso, você também deve atualizar seu /etc/fstab para coincidir com os novos nomes e saber como inicializar a partir de uma mídia externa para consertar as coisas no caso de você cometer um erro de digitação. Os links simbólicos são mais seguros a esse respeito.)

Portanto, para um disco com um número de série S12345 e uma string de modelo "HyperDisk " , você poderia atribuir um nome de alias de /dev/dsk_sys a uma regra como esta: (note: if udevadm info informa que um atributo tem trailing espaços, você deve incluir um curinga ou incluí-los na cadeia de regras exatamente conforme listado.)

SUBSYSTEM=="block", ATTRS{model}=="HyperDisk   ", ATTRS{wwid}="*S12345*", SYMLINK+="dsk_sys"

Coloque suas regras personalizadas em, e. /etc/udev/rules.d/custom.rules , depois reinicialize (ou talvez execute partprobe /dev/sda ) e agora você deve ter um link simbólico /dev/dsk_sys apontando para esse disco - e ele continuará apontando para esse disco mesmo se a nomenclatura /dev/sd* for alterada.

    
por 07.05.2018 / 00:44