Como renomeio um array de raid mdadm?

19

Por algum motivo, quando tento renomear um array mdadm raid para um nome textual, a mudança não é necessária.

Eu tentei o conselho desta pergunta de falha do 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 como omicron:0 e ainda pode ser acessado por meio do arquivo de dispositivo antigo. A tentativa de sudo mdadm --detail /dev/md/alpha funcionará e informará o mesmo nome errado até a próxima reinicialização, quando parar de funcionar.

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

ASIDE

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 tenha) sem ter que recriar explicitamente o superbloco? (por exemplo, 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 adicionar ARRAY /dev/md/alpha metadata=1.2 name=omicron:alpha UUID=c66a267... ao mdadm.conf, o arquivo de dispositivo nomeado desaparece e é substituído por um dos formatos padrão. (/ dev / md125 ou similar)

Como posso fazer um array mdadm renomeado manter seu nome? - ou seja - Como faço para o ubuntu persistir os arquivos do dispositivo entre as botas?

    
por Zaz 02.10.2011 / 18:31

6 respostas

16

Você tem que dar o nome com --name= como:

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

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

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

    
por pille 05.10.2011 / 09:49
9

A maneira de fazer com que o Ubuntu persista a mudança de nome nas botas é atualizar o initramfs. Depois de atualizar o nome da sua matriz e o mdadm.conf, você precisa 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.

Esta discussão foi útil .

    
por Swoogan 01.10.2013 / 04:45
6

A primeira resposta por pille e N.N funciona.

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

Desde que você especifique o nome do dispositivo ("alpha" aqui) para usar no comando assemble, ele criará e usará este nome de dispositivo. Mas no autostart mdadm cria um dispositivo baseado no nome que ele vê no superbloco, que é 0 neste caso, então o nome do dispositivo que você especificou no seu comando de montagem foi perdido.

Para tornar o seu nome mais coerente e coerente, você precisa usar o mesmo nome na última parte do nome do seu dispositivo e no novo nome da matriz. Neste caso, para o dispositivo "alpha" você teria que 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 isso você precisa declará-lo explicitamente usando a sintaxe -name=<hostname>:<array_name> .

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

    
por Khassad 08.12.2011 / 11:25
1

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

 mdadm --examine --scan --config=mdadm.conf >> /etc/mdadm.conf
    
por maniat1k 05.10.2011 / 15:52
1

Parece que a resposta que você procura está bem na página do 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 porque o atributo name não é fixo depois de definido. Se você fez isso funcionar, por favor, responda com um comentário que a resposta fez o truque para você. Alternativamente, você sempre pode criar links simbólicos usando uma regra do udev e o UUID da matriz como uma âncora.

Eu não vejo razão em adicionar o nome falso ao /etc/mdadm.conf, você já está usando o UUID que é o nome da matriz canônica. Adicionar outra variável, que você acha que pode mudar, é apenas uma manutenção desnecessária e um problema, por exemplo. matriz falha ao iniciar.

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

    
por ppetraki 29.11.2011 / 13:26
0

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

por verdy_p 28.06.2017 / 02:01