Como forçar o mdadm a parar o array RAID5?

7

Eu tenho a matriz /dev/md127 RAID5 que consistia em quatro unidades. Eu consegui removê-los da matriz e atualmente o /dev/md127 não tem nenhuma unidade:

cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : active raid1 sdd1[0] sda1[1]
      304052032 blocks super 1.2 [2/2] [UU]

md1 : active raid0 sda5[1] sdd5[0]
      16770048 blocks super 1.2 512k chunks

md127 : active raid5 super 1.2 level 5, 512k chunk, algorithm 2 [4/0] [____]

unused devices: <none>

e

mdadm --detail /dev/md127
/dev/md127:
        Version : 1.2
  Creation Time : Thu Sep  6 10:39:57 2012
     Raid Level : raid5
     Array Size : 8790402048 (8383.18 GiB 9001.37 GB)
  Used Dev Size : 2930134016 (2794.39 GiB 3000.46 GB)
   Raid Devices : 4
  Total Devices : 0
    Persistence : Superblock is persistent

    Update Time : Fri Sep  7 17:19:47 2012
          State : clean, FAILED
 Active Devices : 0
Working Devices : 0
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 512K

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       0        0        1      removed
       2       0        0        2      removed
       3       0        0        3      removed

Eu tentei fazer mdadm --stop /dev/md127 , mas:

mdadm --stop /dev/md127
mdadm: Cannot get exclusive access to /dev/md127:Perhaps a running process, mounted filesystem or active volume group?

Assegurei-me de que foi desmontado, umount -l /dev/md127 e confirmei que realmente está desmontado:

umount /dev/md127
umount: /dev/md127: not mounted

Eu tentei zerar o superbloco de cada unidade e recebo (para cada unidade):

mdadm --zero-superblock /dev/sde1
mdadm: Unrecognised md component device - /dev/sde1

Aqui está a saída de lsof | grep md127 :

lsof|grep md127
md127_rai  276       root  cwd       DIR                9,0          4096          2 /
md127_rai  276       root  rtd       DIR                9,0          4096          2 /
md127_rai  276       root  txt   unknown                                             /proc/276/exe

O que mais posso fazer? O LVM nem está instalado, por isso não pode ser um fator.

Depois de muito cutucando eu finalmente encontrei o que estava me impedindo de parar o array. Foi o processo do SAMBA. Após o serviço smbd parar Eu consegui parar o array. É estranho porque, embora o array tenha sido montado e compartilhado via SAMBA em um determinado momento, quando tentei pará-lo, ele já estava desmontado.

    
por matt 07.09.2012 / 17:27

3 respostas

5

Eu percebo que essa é uma pergunta antiga e que o pôster original acreditava que o SAMBA era o problema, mas eu tive o mesmo problema e acho que o problema não era SAMBA (na verdade eu nem tenho SAMBA), já que ele não apareceu na saída lsof , mas o usuário já estava no diretório de ponto de montagem RAID quando mudou para root ou fez um sudo.

No meu caso, o problema foi que eu iniciei meu shell de root quando meu usuário regular estava em um diretório localizado na unidade /dev/md127 montada.

user1@comp1:/mnt/md127_content/something$ su -
root@comp1:~# umount /dev/md127
umount: /dev/md127: target is busy

Aqui está a saída de lsof no meu caso:

root@comp1:root@comp1:~# lsof | grep /dev/md127
md127_rai  145            root  cwd       DIR      253,0     4096          2 /
md127_rai  145            root  rtd       DIR      253,0     4096          2 /
md127_rai  145            root  txt   unknown                                /proc/145/exe

Mesmo que lsof | grep md125 não tenha exibido nenhum processo, exceto [md127_raid1] , não pude desmontar /dev/md127 . E enquanto umount -l /dev/md127 esconder /dev/md127 da saída de mount , a unidade aparentemente ainda está ocupada, e quando mdadm --stop /dev/md127 é tentado, o mesmo erro é mostrado:

mdadm: Cannot get exclusive access to /dev/md127:Perhaps a running process, mounted filesystem or active volume group?

SOLUTION é simples: verifique se há usuários conectados que ainda estão em um diretório nessa unidade. Especialmente, verifique se o shell raiz que você está usando foi iniciado quando o diretório atual do usuário regular estava nessa unidade. Mude para esse shell de usuários (talvez apenas exit sua raiz deve), mova para outro local e umount e mdadm --stop funcionará:

root@comp1:~# exit
user1@comp1:/mnt/md127_content/something$ cd /
user1@comp1:/$ su -
root@comp1:~# umount /dev/md127
root@comp1:~# mdadm --stop /dev/md127
mdadm: stopped /dev/md127
    
por 16.12.2015 / 19:26
2

Se você estiver usando o LVM em cima do mdadm, às vezes o LVM não excluirá os dispositivos do Device Mapper ao desativar o grupo de volumes. Você pode excluí-lo manualmente.

  1. Verifique se não há nada na saída de sudo vgdisplay .
  2. Procure em /dev/mapper/ . Além do arquivo control , deve haver um dispositivo do Mapeador de dispositivos com o nome do seu grupo de volumes, por exemplo, VolGroupArray-name .
  3. Execute sudo dmsetup remove VolGroupArray-name (substituindo VolGroupArray-name pelo nome do dispositivo Device Mapper).
  4. Agora você deve conseguir executar sudo mdadm --stop /dev/md0 (ou qualquer que seja o nome do dispositivo mdadm ).
por 20.09.2017 / 11:00
1

Eu estava com problemas parecidos, mas não tinha o dispositivo de ataque montado de alguma forma. Parar o SAMBA também não pareceu ajudar. lsof não mostrou nada.

Tudo resultou em:

# mdadm --stop /dev/md2
mdadm: Cannot get exclusive access to /dev/md2:Perhaps a running process, mounted filesystem or active volume group?

O que finalmente consertou para mim foi lembrar que era uma partição swap - então eu tive que swapoff /dev/md2 - isso me permitiu mdadm --stop /dev/md2 com sucesso.

    
por 04.02.2016 / 04:28