AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 707567
Accepted
Harry
Harry
Asked: 2022-06-27 00:11:25 +0800 CST2022-06-27 00:11:25 +0800 CST 2022-06-27 00:11:25 +0800 CST

Como aplicar a regra udev a um disco local não particionado?

  • 772

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/sdee o antigo /dev/sdese tornou /dev/sdf, então a regra do udev acima ficou errada, pois o nome de sdemudou 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"
linux udev
  • 1 1 respostas
  • 201 Views

1 respostas

  • Voted
  1. Best Answer
    cas
    2022-06-27T01:49:55+08:002022-06-27T01:49:55+08:00

    Você deve estar combinando SUBSYSTEM=="block", ENV{ID_SERIAL}=="xxx"(a marca/modelo E o número de série) de qualquer maneira. Ou ENV{ID_SERIAL_SHORT}(somente o número de série). Ou ENV{ID_WWN}(um identificador globalmente exclusivo para a unidade). Ou talvez ENV{ID_PART_TABLE_UUID}.

    Costumo usar ID_SERIAL_SHORTporque é 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:

    $ udevadm info -q property --property=ID_SERIAL_SHORT /dev/sda 
    ID_SERIAL_SHORT=ZA9EL9YL
    

    Para usar isso com uma regra do udev ficaria assim:

    SUBSYTEM=="block", ENV{ID_SERIAL_SHORT}=="ZA9EL9YL", SYMLINK+="QUORUML", OWNER="test", GROUP="gtest", MODE="0660"
    

    Observe ==que para os dois primeiros atributos, eles são uma comparação e não uma atribuição (consulte man 7 udev, especialmente a Operatorssubseção).

    Se eu quisesse o número de série completo com o modelo etc, eu poderia usar o seguinte:

    $ udevadm info -q property --property=ID_SERIAL /dev/sda 
    ID_SERIAL=ST8000VN0022-2EL112_ZA9EL9YL
    

    e uma regra do udev seria algo assim:

    SUBSYTEM=="block", ENV{ID_SERIAL}=="ST8000VN0022-2EL112_ZA9EL9YL", SYMLINK+="QUORUML", OWNER="test", GROUP="gtest", MODE="0660"
    

    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/nameno 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 awkou cut:

    $ udevadm info -q property --property=ID_SERIAL_SHORT /dev/sda | awk -F= '{print $2}'
    ZA9EL9YL
    
    $ udevadm info -q property --property=ID_SERIAL_SHORT /dev/sda | cut -d= -f2
    ZA9EL9YL
    
    • 7

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve