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 / server / Perguntas / 1163715
Accepted
gcb
gcb
Asked: 2024-08-10 00:13:41 +0800 CST2024-08-10 00:13:41 +0800 CST 2024-08-10 00:13:41 +0800 CST

mdadm: O valor "arch1:2021" não pode ser definido como devname. Motivo: Não compatível com POSIX. Valor ignorado

  • 772

Conectei um antigo RAID ARRAY a um novo sistema e recebo esse erro em tudo que tento fazer com ele mdadm.

# mdadm --detail --scan 
ARRAY /dev/md/arch1:2021 metadata=1.2 UUID=c4c7cbde:5f6913a9:eb1c82ff:8fe6cd45

# mdadm --detail 
mdadm: Value "arch1:2021" cannot be set as devname. Reason: Not POSIX compatible. Value ignored.
mdadm: No devices given.

Tudo ainda funciona bem. Eu posso montar e usar o Array. E o nome "não compatível" aparece como um arquivo de dispositivo perfeitamente

 # ls -la /dev/md/
total 0
drwxr-xr-x  2 root root   60 2024-08-09 03:16 .
drwxr-xr-x 20 root root 4580 2024-08-09 03:16 ..
lrwxrwxrwx  1 root root    8 2024-08-09 03:16 arch1:2021 -> ../md127

arquivo de dispositivo que eu posso usar

 # mdadm --detail /dev/md/arch1\:2021 
/dev/md/arch1:2021:
           Version : 1.2
     Creation Time : Wed Jul  7 06:29:08 2021
        Raid Level : raid1

Qual é a melhor maneira de atualizar o nome da forma mais segura possível?

raid
  • 2 2 respostas
  • 227 Views

2 respostas

  • Voted
  1. Nikita Kipriyanov
    2024-08-10T12:28:52+08:002024-08-10T12:28:52+08:00

    Este dois pontos separa o nome do host proprietário do nome do array : <hostname>:<name>. Ele é armazenado como set_namecampo no superbloco MD 1.x (também suportado pelo formato de metadados externos DDF). É o superbloco a única fonte de verdade sobre o nome do array, não mdadm.conf. As entradas no último devem concordar com o que estiver armazenado no superbloco para que o sistema ative o array. A maneira mais fácil de gerar entradas corretas é usar a saída de mdadm --examine --scan. Ou simplesmente omita esse parâmetro de nome nas entradas, use ARRAY /dev/mdN UUID=...em vez disso e confie apenas em UUIDs do sistema de arquivos ou LVM ou quaisquer estruturas de nível superior que estejam em seus arrays.

    Ao criar, você fornece apenas a última parte, "nome", enquanto o nome do host é escolhido automaticamente, mas você também pode forçá-lo:

    mdadm --create /dev/mdxxx --name=2021 --homehost=arch1 ...
    

    irá armazenar arch1:2021.

    Durante a ativação, se o nome de host do sistema atual for o mesmo que o armazenado, os links simbólicos em /dev/md/omitem o nome de host (parecendo exatamente como /dev/md/<name>), e o incluem de outra forma, como é no seu caso. Você pode definir HOMEHOST hostnameem mdadm.conf, para usar esse nome de host para remover dos nomes armazenados no superbloco, em vez do nome de host do sistema atual.

    Veja também esta resposta maravilhosa

    • 3
  2. Best Answer
    frostschutz
    2024-09-14T16:55:10+08:002024-09-14T16:55:10+08:00

    mdadm: Value "arch1:2021" cannot be set as devname. Reason: Not POSIX compatible. Value ignored.

    Essa mensagem de erro foi introduzida no mdadm v4.3. Embora o desenvolvedor tenha admitido que é uma regressão em alguns casos, eles também deixaram claro que não vai desaparecer, então — apenas lide com isso, eu acho.

    Além de caracteres especiais em nomes, o mdadm v4.3 também se ofende com números >127 . Isso foi generosamente estendido para 1024 em um patch recente — no entanto, antes do mdadm v4.3, você podia usar até 1048575 (o limite do kernel).


    No seu caso, if arch1:2021não era para significar /dev/md2021, mas usar 2021 como um nome, infelizmente é o caso que mdadm não distingue nome de host, número (de preferência menor) ou nomes em seus metadados link1 link2 . Tudo vai para uma única e mesma string de 32 bytes e fica sujeito à interpretação.

    Então, se você deseja usar nomes mdadm, o nome deve evitar todos os caracteres especiais, e também evitar ser numérico. Então, se possível, use exclusivamente az. Se você precisa usar dígitos, certifique-se de que não seja o primeiro caractere do nome (use foo123em vez de apenas 123).


    Os nomes mdadm (em metadados) só podem ser alterados em tempo de montagem. Se o array já estiver em execução, você terá que pará-lo primeiro, o que só pode ser feito se não estiver em uso, então realmente nunca, a menos que você inicialize um sistema de recuperação.

    Então deveria ser assim, mas…:

    # mdadm --stop /dev/md42
    # mdadm --assemble --update=name --name=myraid /dev/md42
    Segmentation fault (core dumped)
    

    Falha de segmentação??? Bem, obviamente isso não deveria acontecer ... esse bug (corrigido no git) só é acionado se você tiver HOMEHOST <none>definido em seu mdadm.conf, ou seu nome de host estiver vazio.

    Então, até que essa correção seja lançada, você está mais ou menos preso a mdadmincluir seu nome de host no nome do array. A menos que hostname:arraynameseja maior que 32 bytes, já que os metadados não podem armazenar strings maiores.

    Então você pode trapacear passando um nome de host com 32 bytes de comprimento:

    # mdadm --assemble --update=name --name=myraid --homehost=thequickbrownfoxjumpsoverthelazydog /dev/md42
    

    E vai sair assim:

    # mdadm --detail /dev/md42
                  Name : myraid
    

    Então, se você quisesse se livrar dele arch1:em seu nome, essa seria a única maneira de fazer isso por enquanto.


    Altere seu /etc/mdadm.confpara usar /dev/md0(estilo numérico com números no intervalo, 0-127já que números maiores são rejeitados sem motivo). Ou use o estilo (symlink-)named /dev/md/namecom um nome não numérico.

    # numeric style:
    ARRAY  /dev/md42  UUID=cad97e3d:197232e1:b595f6f6:f14a0b9d
    
    # named style:
    ARRAY  /dev/md/name  UUID=cad97e3d:197232e1:b595f6f6:f14a0b9d
    

    Ao montar arrays nomeados, mdadmescolherá um número por conta própria. Para cada número, o mdadm analisa /proc/mdstatpara verificar se ele já está em uso, até encontrar um livre — isso é bom para montar 3 arrays, menos bom para montar 300 arrays, já que o mdstat é analisado milhares de vezes então.

    /dev/md/nameserá então um symlink para /dev/md127(ou outros números). O array nomeado também será mostrado como /dev/md127abaixo /proc/mdstate esses números podem mudar, então leve isso em consideração ao gerenciar múltiplos arrays.


    Há também um terceiro estilo de nomenclatura:

    CREATE  names=yes
    ARRAY  /dev/md_name  UUID=cad97e3d:197232e1:b595f6f6:f14a0b9d
    

    Isso coloca o nome diretamente no nome do dispositivo como /dev/md_name. Isso é muito incomum, pois nenhum outro driver de dispositivo faz isso. Este também é o único estilo em que um nome é mostrado em /proc/mdstatvez do número.

    No entanto, esse estilo é totalmente não documentado em man 4 md. E man 5 mdadm.confdesencoraja seu uso, pois outras ferramentas podem não esperar esse estilo. Portanto, ele deve ser evitado.


    No geral, mdadmele tem um suporte terrivelmente ruim para nomes. Você não pode defini-los, não pode alterá-los sem muito esforço, o mdadmutilitário não os usa nem os mostra. Na verdade, ele não mostra nada, você deveria olhar em /proc/mdstatvez disso, porque mdadmele mesmo não consegue nem mostrar uma lista bem impressa de arrays e seus estados.

    Isso está muito longe de como outros utilitários realmente ajudam você a gerenciar coisas e exibir nomes ao fazer isso, a ponto de ninguém se importar com números.

    • 1

relate perguntas

Sidebar

Stats

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

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 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