O software RAID1 do Debian não está funcionando quando eu removo o disco rígido

2

Eu tenho tentado todo o final de semana para obter RAID trabalhando em um computador servidor antigo com o controlador SATA-II Intel ICH7 / ICH7-R executando disco rígido duplo com RAID 1.

Depois de desistir no ataque ao hardware, mudei para o software.

Atualmente, o sistema inicializará bem em ambas as unidades e inicializará bem com o sdb, mas quando tento inicializar o sda, fico com um cursor piscando em uma tela preta.

Com isso, quero dizer remover fisicamente as unidades. Eu removo uma unidade, inicializo e funciona. Substitua essa unidade e remova a outra, inicie e não funcionará.

Meu palpite é que não instalei o GRUB corretamente em sda.

Eu removo o disco rígido sdb e inicializo o disco de instalação no modo de recuperação. Eu então montei o volume RAID e entrei no shell.

Primeiro, vou tentar o que este tutorial que eu segui para o software RAID me disse para fazer:

# grub
grub> device (hd0) /dev/sda

grub> root (hd0,0)
 Filesytem type is ext2fs, partition type 0xfd

grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists ... no
 Checking if "/grub/stage1" exists ... no

Error 2: Bad file or directory type

Então, tento algo diferente:

Ao digitar:

grub-install /dev/sda

Eu obtenho

Searching for the GRUB installation directory ... found: /boot/grub
The file /boot/grub/stage1 not read correctly.

Estou usando partições ext4.

O que devo tentar agora?

Editar:

Aqui está a saída de fdisk -l

root@debian:~# fdisk -l

    Disk /dev/sda: 153.4 GiB, 164696555520 bytes, 321672960 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x8225e6c2

    Device     Boot   Start       End   Sectors   Size Id Type
    /dev/sda1  *       2048    194559    192512    94M fd Linux raid autodetect
    /dev/sda2        194560   4194303   3999744   1.9G fd Linux raid autodetect
    /dev/sda3       4194304 321671167 317476864 151.4G fd Linux raid autodetect

    Disk /dev/sdb: 153.4 GiB, 164696555520 bytes, 321672960 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x3cfa42ad

    Device     Boot   Start       End   Sectors   Size Id Type
    /dev/sdb1  *       2048    194559    192512    94M fd Linux raid autodetect
    /dev/sdb2        194560   4194303   3999744   1.9G fd Linux raid autodetect
    /dev/sdb3       4194304 321671167 317476864 151.4G fd Linux raid autodetect

    Disk /dev/md2: 151.3 GiB, 162413936640 bytes, 317214720 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk /dev/md0: 93.9 MiB, 98435072 bytes, 192256 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk /dev/md1: 1.9 GiB, 2046820352 bytes, 3997696 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes

Aqui está a saída de mdadm --detail --scan

ARRAY /dev/md/2 metadata=1.2 name=repeater:2 UUID=cd8443a8:ca0b3a29:05496e49:b063704f
ARRAY /dev/md/0 metadata=1.2 name=repeater:0 UUID=c8a204e2:3e5a5e2c:50a136c7:d43777a7
ARRAY /dev/md/1 metadata=1.2 name=repeater:1 UUID=25bebb1e:c7f3245d:128bee5d:d58d9100

Aqui está a saída de lsblk

NAME    MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
fd0       2:0    1     4K  0 disk  
sda       8:0    0 153.4G  0 disk  
├─sda1    8:1    0    94M  0 part  
├─sda2    8:2    0   1.9G  0 part  
└─sda3    8:3    0 151.4G  0 part  
  └─md2   9:2    0 151.3G  0 raid1 /
sdb       8:16   0 153.4G  0 disk  
├─sdb1    8:17   0    94M  0 part  
│ └─md0   9:0    0  93.9M  0 raid1 /boot
├─sdb2    8:18   0   1.9G  0 part  
│ └─md1   9:1    0   1.9G  0 raid1 [SWAP]
└─sdb3    8:19   0 151.4G  0 part  
sr0      11:0    1  1024M  0 rom 

EDIT 2: Aqui está a saída de cat /proc/mdstat

root@debian:~# cat /proc/mdstat
Personalities : [raid1] 
md1 : active (auto-read-only) raid1 sdb2[1]
      1998848 blocks super 1.2 [2/1] [_U]

md0 : active raid1 sdb1[1]
      96128 blocks super 1.2 [2/1] [_U]

md2 : active raid1 sda3[0]
      158607360 blocks super 1.2 [2/1] [U_]
      bitmap: 2/2 pages [8KB], 65536KB chunk

unused devices: <none>
    
por Skyler 440 15.12.2015 / 04:53

2 respostas

2

Da sua saída do lsblk e / proc / mdstat, vejo que todos os RAIDs foram degradados. Veja [_U] ou [U_] ? Em cada RAID apenas uma linha é preenchida (marcada com U ), a outra não é (marcada com _ ).

Então, parece que meu palpite estava correto: você tem o sistema de arquivos normal / de inicialização somente em uma unidade, que agora é chamada de sdb. Seu sda tem uma partição destinada à mesma coisa, mas essa partição não parece conter um sistema de arquivos de inicialização válido e corretamente preenchido.

Se você tiver certeza de que ambos os seus discos estão bem, você poderá adicioná-los novamente aos ataques. Você precisa limpar superblocos md raid de parições não utilizadas. A ferramenta mdadm irá reclamar se você tentar limpar os rótulos das unidades ativas, mas ainda vale a pena verificar novamente seus comandos. De sua saída / proc / mdstat e fdisk, deduzimos que:

  • md0 (boot) deve estar em sda1 e sdb1, mas somente sdb1 está funcionando.
  • md1 (swap) deve estar em sda2 e sdb2, mas somente o sdb2 está funcionando.
  • md2 (root) deve estar em sda3 e sdb3, mas somente sda3 está funcionando - o que é estranho, isso está em outro disco.

Para limpar o rótulo de sda1, sda2, sdb3 (todos não usados atualmente) que você usa:

mdadm --zero-superblock /dev/sda1
mdadm --zero-superblock /dev/sda2
mdadm --zero-superblock /dev/sdb3

Pode reclamar alguma coisa, você pode precisar adicionar --force ao comando, mas acho que isso não seria necessário. Eu falo de novo, verifique tudo para limpar marcas de ataque apenas em dispositivos não utilizados!

Depois, você adiciona esses dispositivos não usados a seus arrays:

mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2
mdadm --add /dev/md2 /dev/sdb3

Ele começará a ressincronizar em segundo plano. Observe também que ele detectará que todos os arrays usam os mesmos dispositivos, portanto, por exemplo, atrasará a ressincronização do md2 até que o md1 seja concluído. Você verá o progresso da ressincronização em / proc / mdstat.

Quando a ressincronização for concluída, todos os dispositivos em / proc / mdstat terão [UU] após eles, indicando que esses arrays estão no estado ideal.

Seu / boot funciona, então o sdb1 contém um sistema de arquivos corretamente preenchido. Quando o seu / boot md0 está no estado ideal, podemos dizer que o sda1 agora tem os mesmos dados (somente o superblock é um pouco diferente, porque diferentes dispositivos de apoio na mesma matriz possuem números de linhas diferentes). Você pode reinstalar o grub manualmente:

device (hd0) /dev/sda
root (hd0,0)
setup (hd0)

Eu sugiro strongmente que você configure o mdadm para fazer verificações de matriz periodicamente (digamos, uma vez por semana ou uma vez por mês), para rastrear os erros de leitura da unidade mais cedo. Certa vez, resolvi um problema quando os dois drives RAID possuíam blocos ruins (em locais diferentes), e a verificação regular poderia evitar esse problema, ejetando o disco defeituoso mais cedo, mesmo quando o bloco defeituoso estivesse raramente usado no sistema de arquivos. Isso foi complicado. Para iniciar um teste, faça

echo "check" >> /sys/block/md127/md/sync_action

e procure por erros nos registros do dmesg e do mdmon.

NÃO simplesmente carregue o sistema de arquivos para outro dispositivo. Dois sistemas de arquivos com os mesmos rótulos e os mesmos UUIDs não são um estado normal. Isso é permitido transitoriamente durante a recuperação ou algum outro processo forense, mas não para uma execução / inicialização normalmente. O Ubuntu monta partições pelo UUID (verifique / etc / fstab), e como você vai adivinhar qual será montado na próxima vez? Não há como dizer, isso é aleatório, mas essa coisa não deve ser aleatória.

O acesso aos dispositivos de raidback é um pouco bloqueado pelo código md no kernel, então enquanto eles estão em raid, o sistema só vê md0, que é um único dispositivo e você não terá nenhum problema.

Para manter o non-raid / boot em ambos os discos, você basicamente precisa clonar o sistema de arquivos toda vez que você atualizar o boot, e então sempre mudar o UUID e o label. Isso é propenso a erros e inconveniente. É normal ter / boot como RAID1.

Eu prefiro ter o metadata 1.0 para / boot, porque neste caso os metadados são colocados no final do dispositivo, então, mesmo no caso de eu não ter suporte ao RAID, eu simplesmente monto o sistema de arquivos do partititon como se não houve nenhum ataque. Mas se funcionar para você agora, é melhor deixar as coisas como estão agora.

    
por 16.12.2015 / 09:54
0

Você precisa instalar o carregador de boot (grub stage1) nos dois discos. Você deve fazer isso manualmente, pois o carregador de boot está fora de qualquer partição e, portanto, fora de qualquer matriz MDRAID.

Emita o seguinte comando: grub-install /dev/sda e tente novamente inicializar sda

    
por 15.12.2015 / 14:47