MDADM Recoveren

Pagina: 1
Acties:

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
Ik heb sinds zaterdag het probleem dat mijn mdadm RAID6 stuk is en ik deze werkend probeer te krijgen.
Nu heb ik alleen één probleem en dat is dat ik de juiste volgorde niet meer weet van mijn harde schijven, zoals ik ooit de RAID6 config heb opgebouwd. Ik gebruik OpenSuse als OS.

Ik heb met wat Google werk het volgende gevonden: http://serverfault.com/qu...array-instead-of-re-using
Hierin wordt uitgelegd dat je je data terug kan krijgen zolang je maar de juiste volgorde van je schijven weet, als tip word gegeven als je de config niet meer weet je eens in /var/spool/mail/root kan kijken.

Bij mij staat het volgende.
code:
1
2
3
4
5
Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sdd1[12](F) sdh1[10] sdg1[6](F) sdb1[7] sdf1[8] sdi1[9] sdc1[5] sdj1[3] sde1[2] sdk1[11]
      15628095488 blocks super 1.2 level 6, 512k chunk, algorithm 2 [10/8] [UUUU_UUUU_]

unused devices: <none>


Heeft iemand enig idee hoe ik deze volgorde er weer in kan krijgen of mogelijk andere tips?

  • SanderH_
  • Registratie: Juni 2010
  • Laatst online: 18-01 18:07
Je hebt dus problemen om de defecte schijf te identificeren?

Misschien kan je wel iets doen met dit shell script: http://pastebin.com/JGsFqpQg
Gewoon runnen (sh drives.sh) en dan kan je aan de hand van het serienummer de defecte schijf er uitplukken?

EDIT: niet goed gelezen :D }:O

[ Voor 10% gewijzigd door SanderH_ op 04-03-2015 17:52 ]


  • Mijzelf
  • Registratie: September 2004
  • Niet online
Die informatie komt uit /var/spool/mail/root, of uit /proc/mdstat? Indien het laatste, wat is het probleem? De array is gestart met 2 missende schijven. Zou gewoon moeten kunenn gemount.

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
SanderH_ schreef op woensdag 04 maart 2015 @ 17:43:
Je hebt dus problemen om de defecte schijf te identificeren?

Misschien kan je wel iets doen met dit shell script: http://pastebin.com/JGsFqpQg
Gewoon runnen (sh drives.sh) en dan kan je aan de hand van het serienummer de defecte schijf er uitplukken?

EDIT: niet goed gelezen :D }:O
De defecte schijf weet ik wel.
Mijzelf schreef op woensdag 04 maart 2015 @ 17:50:
Die informatie komt uit /var/spool/mail/root, of uit /proc/mdstat? Indien het laatste, wat is het probleem? De array is gestart met 2 missende schijven. Zou gewoon moeten kunenn gemount.
Het probleem zit hem er in dat ik toen ik er achter kwam ik per ongeluk een mdadm -- create ... gedaan heb i.p.v een mdadm --assemble, hierdoor klopt mijn schijf volgorde niet meer.

In de url in mijn TS, wordt als tip gegeven om dan te kijken in /var/spool/mail/root voor de juiste volgorde bij mij is de laatste entry:
code:
1
2
md0 : active raid6 sdd1[12](F) sdh1[10] sdg1[6](F) sdb1[7] sdf1[8] sdi1[9] sdc1[5] sdj1[3] sde1[2] sdk1[11]
      15628095488 blocks super 1.2 level 6, 512k chunk, algorithm 2 [10/8] [UUUU_UUUU_]


Maar zoals je ziet telt die hier tot [12] terwijl ik maar 10 schijven heb, en aangezien mdadm begint te tellen bij 0. Mis ik dus ook nog eens de 0 en de 1.

Heel toevallig kwam ik nog een oude mdadm -D /dev/md0 tegen waarin ik dit vond:
code:
1
2
3
4
5
6
7
8
9
10
11
    Number   Major   Minor   RaidDevice State
       0       8      129        0      active sync   /dev/sdi1
       1       8       65        1      active sync   /dev/sde1
       2       8       81        2      active sync   /dev/sdf1
       3       8       17        3      active sync   /dev/sdb1
       4       8       49        4      active sync   /dev/sdd1
       5       8       33        5      active sync   /dev/sdc1
       9       8      145        6      active sync   /dev/sdj1
       8       8       97        7      active sync   /dev/sdg1
       7       8      161        8      active sync   /dev/sdk1
       6       8      113        9      active sync   /dev/sdh1


Moet ik dan deze volgorde aanhouden, of veranderd deze volgorde na verloop van tijd?
code:
1
mdadm --create /dev/md0 --chunk=512 --level=6 --raid-devices=10 /dev/sdi1 /dev/sde1 /dev/sdf1 /dev/sdb1 /dev/sdd1 /dev/sdc1 /dev/sdh1 /dev/sdk1 /dev/sdg1 /dev/sdj1


Tevens de UUID code die in deze mdadm.conf staat is:
code:
1
UUID : d10a8b8d:87011393:f1450e9d:1c4abf35

En komt overeen met de UUID die in mijn fstab staat, dus deze config zou juist moeten zijn...

[ Voor 17% gewijzigd door FabiandJ op 04-03-2015 18:01 ]


  • Nvidiot
  • Registratie: Mei 2003
  • Laatst online: 11-01 23:32

Nvidiot

notepad!

Ik zou uitkijken met --create, dat is het commando om een nieuwe array aan te maken. Zou het eerst proberen met --assemble.

What a caterpillar calls the end, the rest of the world calls a butterfly. (Lao-Tze)


  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
Nvidiot schreef op woensdag 04 maart 2015 @ 18:07:
Ik zou uitkijken met --create, dat is het commando om een nieuwe array aan te maken. Zou het eerst proberen met --assemble.
--create schijnt dus niks te slopen, hier heeft iemand een hele test gedaan waaruit dit blijkt, je kan zelfs een --zero-superblock uitvoeren en nog krijg je alles terug: http://serverfault.com/qu...g?answertab=votes#tab-top

In het kort komt het erop neer dat je een mdadm array kan fixen zolang je maar de juiste volgorde van drives (partities), Chunk Size en Layout weet. En ik loop vast op de juiste volgorde van de drives (partities).

[ Voor 23% gewijzigd door FabiandJ op 04-03-2015 19:03 ]


  • Mijzelf
  • Registratie: September 2004
  • Niet online
FabiandJ schreef op woensdag 04 maart 2015 @ 17:58:
Heel toevallig kwam ik nog een oude mdadm -D /dev/md0 tegen waarin ik dit vond:
code:
1
2
3
4
5
6
7
8
9
10
11
    Number   Major   Minor   RaidDevice State
       0       8      129        0      active sync   /dev/sdi1
       1       8       65        1      active sync   /dev/sde1
       2       8       81        2      active sync   /dev/sdf1
       3       8       17        3      active sync   /dev/sdb1
       4       8       49        4      active sync   /dev/sdd1
       5       8       33        5      active sync   /dev/sdc1
       9       8      145        6      active sync   /dev/sdj1
       8       8       97        7      active sync   /dev/sdg1
       7       8      161        8      active sync   /dev/sdk1
       6       8      113        9      active sync   /dev/sdh1


Moet ik dan deze volgorde aanhouden, of veranderd deze volgorde na verloop van tijd?
Ten eerste: je *moet* --assume-clean toevoegen, om te voorkomen dat hij de parities opnieuw gaat berekenen. Dat is dodelijk als je de verkeerde volgorde hebt.
Verder, ja, je zou die volgorde moeten aanhouden, en ja, die kan veranderd zijn. De schijven krijgen hun devicenaam in de volgorde waarin ze gevonden worden, en die zou kunnen wijzigen.

Je hebt dus 10 schijven. In principe is het niet zo'n heksentoer om een scriptje te schrijven die alle combinaties probeert, met een geslaagde mount als uitgang. Maar dat kunnen wel 3.6 miljoen pogingen worden. Dus hopen maar dat de volgorde de eerste keer klopt.

Had je trouwens nog een defecte schijf? Die moet je vervangen door 'missing' bij de create.

Verwijderd

md-raid heeft ook de default metadata locatie veranderd; dus een nieuwe array aanmaken op de oude disks kan heel gevaarlijk zijn. Doe dit enkel als je een 100% goede ruwe backup hebt van alle disks, zodat je bij een foutje of een onsuccesvolle poging het opnieuw kunt proberen.

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
Mijzelf schreef op woensdag 04 maart 2015 @ 21:26:
[...]

Ten eerste: je *moet* --assume-clean toevoegen, om te voorkomen dat hij de parities opnieuw gaat berekenen. Dat is dodelijk als je de verkeerde volgorde hebt.
Verder, ja, je zou die volgorde moeten aanhouden, en ja, die kan veranderd zijn. De schijven krijgen hun devicenaam in de volgorde waarin ze gevonden worden, en die zou kunnen wijzigen.

Je hebt dus 10 schijven. In principe is het niet zo'n heksentoer om een scriptje te schrijven die alle combinaties probeert, met een geslaagde mount als uitgang. Maar dat kunnen wel 3.6 miljoen pogingen worden. Dus hopen maar dat de volgorde de eerste keer klopt.

Had je trouwens nog een defecte schijf? Die moet je vervangen door 'missing' bij de create.
/dev/sdk1 is de defect schijf.

Als ik het goed begrijp moet het dan als volgt worden, correct?
code:
1
mdadm --create --assume-clean /dev/md0 --chunk=512 --level=6 --raid-devices=10 /dev/sdi1 /dev/sde1 /dev/sdf1 /dev/sdb1 /dev/sdd1 /dev/sdc1 /dev/sdh1 missing /dev/sdg1 /dev/sdj1

  • Mijzelf
  • Registratie: September 2004
  • Niet online
Je gaat uit van deze lijst?
code:
1
2
3
4
5
6
7
8
9
10
11
    Number   Major   Minor   RaidDevice State
       0       8      129        0      active sync   /dev/sdi1
       1       8       65        1      active sync   /dev/sde1
       2       8       81        2      active sync   /dev/sdf1
       3       8       17        3      active sync   /dev/sdb1
       4       8       49        4      active sync   /dev/sdd1
       5       8       33        5      active sync   /dev/sdc1
       9       8      145        6      active sync   /dev/sdj1
       8       8       97        7      active sync   /dev/sdg1
       7       8      161        8      active sync   /dev/sdk1
       6       8      113        9      active sync   /dev/sdh1
Dan lijkt het me niet correct.
Het zou moeten zijn:
code:
1
mdadm --create --assume-clean /dev/md0 --chunk=512 --level=6 --raid-devices=10 /dev/sdi1 /dev/sde1 /dev/sdf1 /dev/sdb1 /dev/sdd1 /dev/sdc1 /dev/sdj1 /dev/sdg1 /dev/sdk1 /dev/sdh1
Nou heb jij een missing ingevuld in plaats van sdg1. Dat betekend dat alle schijven daarna een plaatsje opschuiven. Dan kom ik hierop uit:
code:
1
/dev/sdh1 /dev/sde1 /dev/sdf1 /dev/sdb1 /dev/sdd1 /dev/sdc1 /dev/sdi1 missing /dev/sdj1 /dev/sdg1
Maar omdat de volgorde van groot belang is, en een ontbrekende schijf mogelijk effect heeft of de volgorde daarna (heb daar geen idee van, eigenlijk), zou ik willen voorstellen om een dummy schijf aan te sluiten op die poort om de /dev/sdg device te pakken. Dan hoef je alleen /dev/sdg1 door missing te vervangen, zonder schuiverij,

Die chunk size, hoe kom je daaraan?

  • FabiandJ
  • Registratie: Oktober 2001
  • Niet online
Mijzelf schreef op donderdag 05 maart 2015 @ 09:30:
[...]


Je gaat uit van deze lijst?
[...]
Dan lijkt het me niet correct.
Het zou moeten zijn:
code:
1
mdadm --create --assume-clean /dev/md0 --chunk=512 --level=6 --raid-devices=10 /dev/sdi1 /dev/sde1 /dev/sdf1 /dev/sdb1 /dev/sdd1 /dev/sdc1 /dev/sdj1 /dev/sdg1 /dev/sdk1 /dev/sdh1
Nou heb jij een missing ingevuld in plaats van sdg1. Dat betekend dat alle schijven daarna een plaatsje opschuiven. Dan kom ik hierop uit:
code:
1
/dev/sdh1 /dev/sde1 /dev/sdf1 /dev/sdb1 /dev/sdd1 /dev/sdc1 /dev/sdi1 missing /dev/sdj1 /dev/sdg1
Maar omdat de volgorde van groot belang is, en een ontbrekende schijf mogelijk effect heeft of de volgorde daarna (heb daar geen idee van, eigenlijk), zou ik willen voorstellen om een dummy schijf aan te sluiten op die poort om de /dev/sdg device te pakken. Dan hoef je alleen /dev/sdg1 door missing te vervangen, zonder schuiverij,

Die chunk size, hoe kom je daaraan?
Ik ga inderdaad uit van die lijst, het is mij alleen niet helemaal duidelijk of ik in die lijst de volgorde moet bepalen aan de hand van de cijfer volgorde in de Number kolom, of dat ik die van RaidDevice moet aanhouden.

De chunk size komt ook uit de mdadm -d /dev/md0 die ik nog had.

  • Mijzelf
  • Registratie: September 2004
  • Niet online
Daar zeg je wat. Het was me eigenlijk niet opgevallen dat ze verschillend zijn. Ik kan in de documentatie ook niet terugvinden wat de preciese betekenis van die kolommen is. De broncode van mdadm zegt dit:
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        printf("    Number   Major   Minor   RaidDisk   State\n");
    
    for (d= 0; d<array.raid_disks+array.spare_disks; d++) {
        mdu_disk_info_t disk;
        char *dv;
        disk.number = d;
        if (ioctl(fd, GET_DISK_INFO, &disk) < 0) {
            fprintf(stderr, Name ": cannot get disk detail for disk %d: %s\n",
                d, strerror(errno));
            continue;
        }
        if (!brief) {
            printf("   %5d   %5d    %5d    %5d     ", 
                   disk.number, disk.major, disk.minor, disk.raid_disk);
Dus de Number is het disk volgnummer waarmee de informatie aan fd wordt opgevraagd (fd is een file descriptor van het md device). De numbers worden op volgorde aangevraagd, dus blijkbaar kan het nummer wijzigen bij het vullen van de mdu_disk_info_t struct door het md device. De enige reden die ik daarvoor kan verzinnen is om de RaidDisk kolom op volgorde te krijgen.
Dan vermoed ik dat de Number kolom aangeeft in welke volgorde de schijven zijn toegevoegd bij het assembleren, en dat de RaidDisk kolom aangeeft welke rol de schijven hebben.

Kun je je afvragen waarom de schijven in zo'n vreemde volgorde zijn toegevoegd. Je zou verwachten dat ze òf op Minor òf op RaidDisk volgorde worden toegevoegd.
Een reden die ik kan verzinnen is dat ooit de array is gecreate, dat daarna de disks zijn gehusseld, dat vervolgens met 'mdadm --scan' een mdadm.conf is aangemaakt die voortaan werd gebruikt voor assembleren, en dat daarna nog eens een paar schijven zijn uitgewisseld.
Als dat zo is kun je je gaan afvragen hoe groot de kans is dat de schijven een 3e keer zijn verwisseld na het maken van deze dump. Maar goed.

Een andere reden kan zijn dat de array oorspronkelijk 2 spares had (vandaar de 12 schijven), en dat er veel schijven zijn overleden, waarbij telkens een nieuwe spare werd toegevoegd. Dan kun je op den duur wel de Minor volgorde krijgen die jij nu hebt. Alleen zou dan de Number kolom de Minor kolom moeten volgen, lijkt me.

TLDR, het lijkt me dus dat je de RaidDisk kolom moet hebben.
Pagina: 1