Construir e migrar para raid de software (mdadm) no disco GPT, agora não é possível montar o array

1

mdadm, problemas de gpt, partições não reconhecidas.

Pergunta simplificada: Como faço para o mdadm reconhecer partições GPT?

Eu tenho tentado converter / copiar meu Ubuntu 11.10 OS de uma única unidade para software raid 1. Eu fiz similar no passado, mas neste caso, eu estava adicionando em uma unidade que foi configurada para GPT e Eu tentei trabalhar com isso sem analisar as implicações.

Atualmente, tenho um array RAID 1 não-inicializável do mdadm de / dev / md127 (o sistema operacional atribui isso e continua aumentando). Eu estou arrancando de chaves USB ao vivo, atualmente System Rescue CD de sysresccd. Enquanto o gdisk e o parted podem ver todas as partições, a maioria dos utilitários do sistema operacional não, incluindo o mdadm. Meu principal objetivo é apenas tornar o array de raid acessível para que eu possa puxar os dados e começar de novo (sem usar o GPT).

/dev/md127

/dev/sda
 /dev/sda1 <- GPT type partition
  /dev/sda1 <- exists within the GPT part, member of md127
  /dev/sda2 <- exists within the GPT part, empty

/dev/sdb
 /dev/sdb1 <- GPT type partition
  /dev/sdb1 <- exists within the GPT part, member of md127

Histórico:

PONTO A: O sistema operacional original foi instalado em sda (na verdade / dev / sda6). Eu usei um Ubuntu ao vivo usb para adicionar sdb. Eu recebi um aviso do fdisk sobre o GPT, então usei o gdisk para criar uma partição raid (sdb1) e mdadm para criar um espelho raid1 com uma unidade ausente. Eu tive muitos problemas para fazer isso funcionar (inclusive não conseguir instalar o grub), mas eventualmente consegui arrancar usando o grub em sda e / dev / md127 fora do sdb. Então, no ponto A, eu copiei meu sistema operacional de sda6 para md127 em sdb. Eu então inicializei em um modo de recuperação e tentei obter um gerenciador de inicialização em sdb, que falhou. Eu então descobri o meu erro: Eu tinha instalado o ataque em sdb em vez de sdb1, essencialmente sobrescrevendo a partição sdb1.

PONTO B: Eu agora tinha duas cópias dos meus dados - um em md127 / sdb e outro em sda. Eu destruí os dados em sda e criei uma nova tabela GPT em sda. Eu então criei sda1 para o array raid, e sda2 para uma partição scratch. Eu adicionei o sda1 no array do RAID e o deixei reconstruir. md127 agora cobriu / dev / sdb e / dev / sda1 como totalmente ativo e sincronizado.

PONTO C: Eu reiniciei o Linux novamente e ainda consegui acessar o RAID Array. Eu então removi o / dev / sdb do array e criei o / dev / sdb1 para o ataque. Eu adicionei sdb1 à matriz e deixei sincronizar. Eu era capaz de montar e acessar / dev / md127 sem problemas. Depois de concluído, ambos / dev / sda1 e / dev / sdb1 eram partições GPT e ativamente sincronizavam.

PONTO D (atual): Eu reiniciei novamente para testar se a matriz seria inicializada e o grub não carregaria. Eu saí do meu pen drive e descobri que não posso mais montar o array de raid. O mdadm não vê as partições necessárias.

--
root@freshdesk /root % uname -a
Linux freshdesk 3.0.24-std251-amd64 #2 SMP Sat Mar 17 12:08:55 UTC 2012 x86_64 AMD Athlon(tm) II X4 645 Processor AuthenticAMD GNU/Linux



===
/proc/partitions and parted look good:
root@freshdesk /root % cat /proc/partitions
major minor  #blocks  name

   7        0     301788 loop0
   8        0  976762584 sda
   8        1  732579840 sda1
   8        2  244181703 sda2
   8       16  732574584 sdb
   8       17  732573543 sdb1
   8       32    7876607 sdc
   8       33    7873349 sdc1


(parted) print all
Model: ATA ST31000528AS (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size   File system  Name                Flags
 1      1049kB  750GB   750GB  ext4
 2      750GB   1000GB  250GB               Linux/Windows data


Model: ATA SAMSUNG HD753LJ (scsi)
Disk /dev/sdb: 750GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End    Size   File system  Name        Flags
 1      1049kB  750GB  750GB  ext4         Linux RAID  raid


Model: SanDisk SanDisk Cruzer (scsi)
Disk /dev/sdc: 8066MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      31.7kB  8062MB  8062MB  primary  fat32        boot, lba


===
# no sda2, and I double the sdb1 is the one shown in parted
root@freshdesk /root % blkid
/dev/loop0: TYPE="squashfs"
/dev/sda1: UUID="75dd6c2d-f0a8-4302-9da4-792cc7d72355" TYPE="ext4"
/dev/sdc1: LABEL="PENDRIVE" UUID="1102-3720" TYPE="vfat"
/dev/sdb1: UUID="2dd89f15-65bb-ff88-e368-bf24bd0fce41" TYPE="linux_raid_member"

root@freshdesk /root % mdadm -E /dev/sda1
mdadm: No md superblock detected on /dev/sda1.

# this is probably a result of me attempting to force the array up, putting superblocks on the GPT partition
root@freshdesk /root % mdadm -E /dev/sdb1
/dev/sdb1:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 2dd89f15:65bbff88:e368bf24:bd0fce41
  Creation Time : Fri Mar 30 19:25:30 2012
     Raid Level : raid1
  Used Dev Size : 732568320 (698.63 GiB 750.15 GB)
     Array Size : 732568320 (698.63 GiB 750.15 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 127

    Update Time : Sat Mar 31 12:39:38 2012
          State : clean
 Active Devices : 1
Working Devices : 2
 Failed Devices : 1
  Spare Devices : 1
       Checksum : a7d038b3 - correct
         Events : 20195


      Number   Major   Minor   RaidDevice State
this     2       8       17        2      spare   /dev/sdb1

   0     0       8        1        0      active sync   /dev/sda1
   1     1       0        0        1      faulty removed
   2     2       8       17        2      spare   /dev/sdb1


===

root@freshdesk /root % mdadm -A /dev/md127 /dev/sda1 /dev/sdb1
mdadm: no recogniseable superblock on /dev/sda1
mdadm: /dev/sda1 has no superblock - assembly aborted
    root@freshdesk /root % mdadm -A /dev/md127  /dev/sdb1
mdadm: cannot open device /dev/sdb1: Device or resource busy
mdadm: /dev/sdb1 has no superblock - assembly aborted
    
por ytjohn 31.03.2012 / 17:42

1 resposta

1

O mdadm não reconhece partições, o kernel do Linux faz. Um array RAID de software não precisa saber ou se importar com o tipo de partição que o disco usa, porque ele usa apenas os dispositivos de bloco que o kernel fornece para as partições. Estou usando arrays do mdadm em discos GPT em vários computadores e eles funcionam bem.

O layout da partição que você descreveu não faz sentido:

/dev/sda
 /dev/sda1 <- GPT type partition
  /dev/sda1 <- exists within the GPT part, member of md127
  /dev/sda2 <- exists within the GPT part, empty

/dev/sdb
 /dev/sdb1 <- GPT type partition
  /dev/sdb1 <- exists within the GPT part, member of md127

Em particular, parece que você está dizendo que sda2 está localizado em sda1 . As partições não existem em outras partições e a GPT é uma característica do dispositivo de disco inteiro, não de uma partição. Eu acho que o que você realmente quer dizer é:

/dev/sda <- GPT disk
 /dev/sda1 <- member of md127
 /dev/sda2 <- empty

/dev/sdb <- GPT disk
 /dev/sdb1 <- member of md127

No entanto, sua saída blkid diz que /dev/sda1 atualmente contém um sistema de arquivos Ext4, não um superbloco RAID - não é membro de md127 . Não está claro como esse sistema de arquivos chegou lá, já que você disse que o estava usando como um componente RAID, mas como sua história é longa e cheia de reviravoltas, suspeito que pode ter havido pontos em que coisas aconteceram e você não percebeu aconteceu. Minha sugestão neste momento é:

  • Monte a matriz no modo degradado usando apenas /dev/sdb1 . Verifique se ele contém seus dados. se não, verifique se /dev/sda1 de alguma forma contém um sistema de arquivos intacto com seus dados, caso contrário, espero que você tenha um backup.
  • Faça um backup de todos os seus dados, se você não tiver um.
  • Limpe completamente /dev/sda : dd if=/dev/zero of=/dev/sda bs=1M . Em seguida, use gdisk para recriar a (s) partição (ões).
  • Crie um novo array degradado usando apenas uma partição em sda . Crie um sistema de arquivos e copie seus dados para ele.
  • Desmonte a matriz que está usando sdb1 e limpe completamente /dev/sdb : dd if=/dev/zero of=/dev/sdb bs=1M . Em seguida, use gdisk para recriar a partição.
  • Adicione /dev/sdb1 ao novo array e deixe sincronizar.

Quanto à instalação do GRUB, depende se sua máquina suporta EFI (e se você está usando para inicializar). Se você estiver usando o EFI, precisará criar uma partição do sistema EFI em algum lugar; deve ser aproximadamente 100MB, formatado FAT32. Então você instalaria a versão EFI do GRUB. Eu não vou entrar em muitos detalhes sobre isso; Inicialização EFI é um tópico para uma questão separada.

Se você não usar o EFI para inicializar, será necessário fazer uma partição "BIOS Boot" em algum lugar no disco em que você instalará o GRUB. (Este é o código do tipo de partição ef02 in gdisk .) A partição pode ser pequena; 1MB é suficiente. O GRUB usará isso para armazenar o código de inicialização que teria escrito nos setores 1 a 62 em um disco MBR. (Em um disco MBR, esses setores normalmente não são alocados, já que a primeira partição geralmente começa no setor 63, mas em um disco GPT, a tabela de partição está localizada nessa área.) O GRUB deve notar automaticamente que o disco está sendo instalado contém uma partição de inicialização do BIOS e coloca seu código de inicialização lá em vez de nos setores 1-62.

    
por 31.03.2012 / 18:15

Tags