Como renomear uma matriz de ataque mdadm?

23

Por alguma razão, quando tento renomear uma matriz mdadm raid para um nome textual, a alteração não é necessária.

Eu tentei o conselho desta questão de falha no servidor , mas sem sucesso.

~$ mdadm --version
mdadm - v3.1.4 - 31st August 2010

~$ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
  Creation Time : Tue Sep 27 08:32:32 2011
     Raid Level : raid1
     Array Size : 1953513424 (1863.02 GiB 2000.40 GB)
  Used Dev Size : 1953513424 (1863.02 GiB 2000.40 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Sun Oct  2 17:59:37 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : omicron:0  (local to host omicron)
           UUID : 75c4a555:482aecd0:ade70dfc:1547926a
         Events : 17

Number   Major   Minor   RaidDevice State
   0       8       80        0      active sync   /dev/sdf
   1       8       96        1      active sync   /dev/sdg

~$ sudo mdadm --stop /dev/md0
mdadm: stopped /dev/md0

~$ sudo mdadm --assemble /dev/md/alpha --update=name /dev/sd[gf]
mdadm: /dev/md/alpha has been started with 2 drives.

~$ sudo mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Tue Sep 27 08:32:32 2011
     Raid Level : raid1
     Array Size : 1953513424 (1863.02 GiB 2000.40 GB)
  Used Dev Size : 1953513424 (1863.02 GiB 2000.40 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Sun Oct  2 18:06:11 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : omicron:0  (local to host omicron)
           UUID : 75c4a555:482aecd0:ade70dfc:1547926a
         Events : 17

Number   Major   Minor   RaidDevice State
   0       8       80        0      active sync   /dev/sdf
   1       8       96        1      active sync   /dev/sdg

~$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdf[0] sdg[1]
      1953513424 blocks super 1.2 [2/2] [UU]

md126 : active (auto-read-only) raid1 sdd[0] sde[1]
      1953513424 blocks super 1.2 [2/2] [UU]

md127 : active (auto-read-only) raid1 sdb[0] sda[1]
      976762496 blocks [2/2] [UU]

unused devices: <none>

Como você pode ver, o nome ainda é relatado omicron:0e alcançável através do arquivo de dispositivo antigo. Tentar sudo mdadm --detail /dev/md/alphafuncionará e reportará o mesmo nome errado até a próxima reinicialização, quando ele parar de funcionar.

Parece que, ao descobrir qual nome colocar, o mdadm fica confuso e apenas cria o arquivo do dispositivo.


A PARTE, DE LADO

Existe alguma maneira de fazer o mdadm forçar uma atualização da parte do nome do superbloco (ou seja, definir explicitamente o nome que você deseja que o array) sem ter que recriar explicitamente o superbloco? (ie sudo mdam --zero-superblock /dev/sd[fg]; sudo mdadm --create /dev/md/alpha --raid-devices=2 --level=1 --assume-clean --name=alpha /dev/sd[fg])


O problema é que, após a reinicialização, apesar de ter sido adicionado ARRAY /dev/md/alpha metadata=1.2 name=omicron:alpha UUID=c66a267...ao mdadm.conf, o arquivo do dispositivo nomeado desaparece e é substituído por um de formato padrão. (/ dev / md125 ou similar)

Como faço para que uma matriz mdadm renomeada mantenha seu nome? - Ou seja - Como posso fazer o ubuntu persistir os arquivos do dispositivo entre as botas?

Zaz
fonte

Respostas:

19

Você precisa dar o nome a ele com --name=:

sudo mdadm --assemble /dev/md/alpha --name=newname --update=name /dev/sd[gf]

Para ter um comportamento consistente durante a reinicialização, use o mesmo nome no argumento --name que na última parte do dispositivo. Aqui estaria: sudo mdadm --assemble / dev / md / alpha --name = alpha --update = name / dev / sd [gf]

Veja o post de Khassad abaixo para uma explicação completa.

pille
fonte
1
Uma pequena atualização para esta linha de comando, para maior clareza, como se fosse um boob, digitei o nome original da matriz após '--update ='. sudo mdadm --assemble /dev/md/alpha --name={newname} --update=name /dev/sd[gf] Esperança de que faz sentido ou torna mais claro ....
anastrophe
Oi, depois de emitir o comando # sudo mdadm --assemble / dev / md127 --name = md0 --update = name / dev / sd [ab] Recebo mdadm: / dev / sda está ocupado - pulando mdadm: / dev / sdb está ocupado - pulando Alguma coisa? Claro, desmontei o array primeiro!
razor7
2
@ razor7mdadm --stop --scan md127
Daniel Dinnyes
12

A maneira de fazer com que o Ubuntu persista a mudança de nome entre as botas é atualizar o initramfs. Após atualizar o nome da matriz e o mdadm.conf, é necessário emitir o seguinte comando:

sudo update-initramfs -u

Todo o processo:

sudo mdadm --stop /dev/md125
sudo mdadm --assemble /dev/md/alpha --name=alpha --update=name /dev/sd[fg]
sudo mdadm -Db /dev/md/alpha

O terceiro comando deve retornar algo como:

ARRAY /dev/md/alpha metadata=1.2 name=omicron:alpha UUID=5b024352:3a940335:233aa23f:5c6b2a1f

Cole o resultado em /etc/mdadm/mdadm.conf (substituindo a linha antiga). Ou execute:

sudo mdadm -Db /dev/md/alpha >> /etc/mdadm/mdadm.conf

Próxima execução:

sudo update-initramfs -u

Finalmente, reinicie.

Essa discussão foi útil .

Swoogan
fonte
8

A primeira resposta de pille e NN funciona.

O truque aqui é que, quando você não especifica a --nameopção, a única renomeação feita mdadmé atribuir o nome da matriz a partir do número do dispositivo que ele alocou. Nesta pergunta, é 0, então o novo nome da matriz é 0.

Como você especifica o nome do dispositivo ("alpha" aqui) a ser usado no comando assemble, ele criará e usará o nome do dispositivo. Porém, no início automático, mdadmcria um dispositivo com base no nome que vê no superbloco, ou seja, nesse caso, 0; portanto, o nome do dispositivo especificado no comando assemble é perdido.

Para fazer com que seu nome mude de forma consistente e consistente, você deve usar o mesmo nome na última parte do nome do dispositivo e no novo nome da matriz. Nesse caso, para o dispositivo "alpha", você precisaria usar esta linha de comando:

mdadm --assemble /dev/md/alpha --name=alpha --update=name /dev/sd[gf]

Você também pode alterar o nome do host. Para fazer isso, você deve declará-lo explicitamente usando a -name=<hostname>:<array_name>sintaxe.

Isso pode ser útil, por exemplo, após a alteração do nome da máquina.

Khassad
fonte
2

Parece que a resposta que você procura está correta na página de manual do mdadm

[create, build, grow]
      -N, --name=
          Set  a name for the array.  This is **currently only effective when creat‐
          ing an array** with a version-1 superblock, or an  array  in  a  DDF  con‐
          tainer.   The  name is a simple textual string that can be used to iden‐
          tify array components when assembling.  If name is needed but not speci‐
          fied, it is taken from the basename of the device that is being created.
          e.g. when creating /dev/md/home the name will default to home.

e para montar

       -N, --name=
          Specify the name of the array to assemble.  **This must be the  name  that
          was  specified  when  creating the array**.  It must either match the name
          stored in the superblock exactly, or it  must  match  with  the  current
          homehost prefixed to the start of the given name.

O que explica por que o atributo name não fica fixo depois de definido. Se você conseguiu fazê-lo funcionar, aceite um comentário que resposta foi o que você fez. Como alternativa, você sempre pode criar links simbólicos usando uma regra udev e o UUID da matriz como uma âncora.

Não vejo sentido em adicionar o nome falso ao /etc/mdadm.conf, você já está usando o UUID, que é o nome do array canônico. Adicionar outra variável, que você considere adequada para alterar, é apenas manutenção desnecessária e pede problemas, por exemplo, a matriz falha ao iniciar.

Além dessas observações, o melhor lugar para entender por que você simplesmente não pode atualizar o nome em tempo de execução é executar ping na lista de discussão linux-raid.

ppetraki
fonte
1

depois de alterar o nome, você tentou atualizar o seu mdadm.conf?

 mdadm --examine --scan --config=mdadm.conf >> /etc/mdadm.conf
maniat1k
fonte
0

O mdadm tem um erro quando os volumes de invasão são criados internamente com um espaço em seu nome. Esses volumes não serão montados corretamente devido a um erro de formatação no arquivo /etc/mdadm/mdadm.conf gerado. Você precisa renomeá-los lá, mas não será persistente. Portanto, é necessário renomear os nomes internos ... mas não é suportado em todos os controladores RAID que bloqueiam seus metadados e não suportam a opção de nome. Não vejo como renomear esses volumes (mesmo que sejam referenciados internamente por seu UUID, os nomes são aqueles usados ​​pelo Linux; o Windows, pelo contrário, não possui esse bug e monta perfeitamente volumes RAID que contêm espaços em seus nomes)!

verdy_p
fonte