como posso definir o deslocamento de dados em um dispositivo mdadm?

2

Estou tentando recuperar de uma matriz RAID degradada. Eu estupidamente usei mdadm --create em algum lugar ao longo do caminho, e agora alguns dos meus dispositivos têm superblocos incorretos. Por sorte, guardei uma cópia das superquadras antigas:

/dev/sdd1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 7318877d:a7538da2:dbdff5e9:613cc676
           Name : vern:2
  Creation Time : Thu Oct 20 21:58:58 2011
     Raid Level : raid5
   Raid Devices : 3

 Avail Dev Size : 1953517954 (931.51 GiB 1000.20 GB)
     Array Size : 1953517568 (1863.02 GiB 2000.40 GB)
  Used Dev Size : 1953517568 (931.51 GiB 1000.20 GB)
    Data Offset : 2048 sectors
   Super Offset : 8 sectors
          State : clean
    Device UUID : 3dc62a0d:71ad83cf:f0dea827:6919f67c

    Update Time : Mon Mar  4 19:53:30 2013
       Checksum : a1b473f6 - correct
         Events : 152880

         Layout : left-symmetric
     Chunk Size : 512K

Comparando isso com o novo superbloco:

          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : 53e45e96:bc283e07:77748762:24fade80
           Name : Velma:2  (local to host Velma)
  Creation Time : Fri May  3 17:35:48 2013
     Raid Level : raid5
   Raid Devices : 3

 Avail Dev Size : 1953257858 (931.39 GiB 1000.07 GB)
     Array Size : 1953257472 (1862.77 GiB 2000.14 GB)
  Used Dev Size : 1953257472 (931.39 GiB 1000.07 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
          State : clean
    Device UUID : bae87034:ba42a7ed:c4fa2854:5888d619

    Update Time : Fri May  3 17:35:48 2013
       Checksum : b3c99dd4 - correct
         Events : 0

         Layout : left-symmetric
     Chunk Size : 512K

A principal diferença aqui está no deslocamento de dados. Se eu puder definir manualmente o deslocamento de dados de volta para 2048 setores, então tenho uma chance de recuperar os dados no volume RAID.

Então ... como posso definir esse deslocamento?

    
por Kkkev 03.05.2013 / 19:18

1 resposta

2

Encontrei a resposta nas entranhas do link : acontece que há um ramo de mdadm que permite compensações de dados personalizadas. Para obtê-lo:

git clone -b data_offset git://neil.brown.name/mdadm
cd mdadm
make

Isso adiciona a capacidade de definir o deslocamento de dados em uma base por dispositivo, anexando o ID do dispositivo com a: e o deslocamento. Por exemplo:

./mdadm --create /dev/md2 --level=5 -raid-devices=3 --assume-clean \ 
    /dev/sdb3:89088 /dev/sdd1:1024 /dev/sdc3:131072

Eu tive que dividir o deslocamento por 2, como é em K e não em setores. Eu acho que eu poderia ter usado

./mdadm --create /dev/md2 --level=5 -raid-devices=3 --assume-clean \ 
    /dev/sdb3:178176s /dev/sdd1:2048s /dev/sdc3:262144s

em vez disso, mas eu não verifiquei isso.

De qualquer forma, isso construiu a matriz com o tamanho correto e consegui recuperar alguns dos dados dela. Resultado!

    
por 03.05.2013 / 22:07

Tags