# Update mdadm/RAID - Devices von md[0,1,2] auf [125,126,127]

## KaterGonzo

Servus liebe Community,

folgendes Problem mit meinem Home-Server: mdadm steuert die Raid-Devices nicht mehr als /dev/md[0,1,2], sondern willkürlich als /dev/md[125,126,127] an, was das System unbootable macht.

Ich fange erst einmal mit ein paar allgemeinen Informationen an: 

Kernel-Version: 2.6.34-gentoo-r6

mdadm-Version: mdadm-3.0

Software-Raid: Raid-1 (spiegeln)

Vorgeschichte

Vor langer Zeit habe ich das Software-Raid mit diesem Befehl angelegt:

```
mdadm -C /dev/md0 -l 1 -n 2 /dev/sda1 /dev/sda2

mdadm -C /dev/md1 -l 1 -n 2  /dev/sda2 /dev/sda2

mdadm -C /dev/md2 -l 1 -n 2  /dev/sda3 /dev/sda3
```

Hier die daraus resultierende /etc/mdadm.conf:

```
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=0.90 UUID=cb28a94e:40d93554:4fc4e4ff:e7b86def

ARRAY /dev/md1 level=raid1 num-devices=2 metadata=0.90 UUID=860e225c:1d59d285:9224bc57:2ab24b23

ARRAY /dev/md2 level=raid1 num-devices=2 metadata=0.90 UUID=f93c01cd:70d9be28:a740eabd:3d89ce85
```

Ich habe regelmäßig world und system geupdatet, aber das System seit längerem nicht neugestartet (d.h. packages auf dem aktuellsten Stand, Kernel nicht). Nachdem die Kiste neugestartet wurde, stellte sich heraus, dass udev nicht mit dem alten Kernel läuft, so dass ich mit ner Gentoo-Live-CD den Kernel aktualisiert habe. 

Problem: RAID-Devices werden willkürlich benannt

Neuer Kernel funktioniert, nur waren die Raid-Devices md[0,1,2] auf einmal als als 125,126,127 in der Live-CD angegeben! Ist zwar nicht toll, wenn sich die Namen ändern, aber ich habe die Devices brav in der grub.conf und fstab angepasst. Das Problem: die Devices /dev/md125, /dev/md126, /dev/md127 wechselten nach jedem Neustart!

Tja, danach habe ich wirklich aufgrund meiner Zeitnot probiert, probiert und probiert, wo ich sehr wahrscheinlich auch einige Fehler gemacht habe. Irgendwann habe ich sogar die zweite Festplatte vom System getrennt, um im Falle eines Totalausfalls zumindest ein Backup zu haben.

Der aktuelle Stand

Irgendwie habe ich die Kiste wieder zum Laufen gebracht (ohne wechselnden RAID-Devices). Was mich wundert ist, dass die RAID-Devices auf dem Echtsystem anders angesprochen werden als bei der GENTOO LIVE-CD:

```
# ls -l /dev/md*

brw-rw---- 1 root disk 9,   0 Dec  3 14:46 /dev/md0

brw-rw---- 1 root disk 9,   1 Dec  3 14:46 /dev/md1

brw-rw---- 1 root disk 9, 126 Dec  3 14:46 /dev/md126

brw-rw---- 1 root disk 9, 127 Dec  3 14:46 /dev/md127

/dev/md:

total 0

lrwxrwxrwx 1 root root 8 Dec  3 14:46 126_0 -> ../md126

lrwxrwxrwx 1 root root 8 Dec  3 14:46 127_0 -> ../md127

lrwxrwxrwx 1 root root 6 Dec  3 14:46 1_0 -> ../md1
```

Verstehe ich nicht, aber die Bezeichnungen bleiben konstant, so dass das System wieder problemlos bootet.

Leider fehlt dem Vogel ein Flügel zur Zeit:

```
 # cat /proc/mdstat 

Personalities : [raid1] 

md126 : active raid1 sda1[0]

      104320 blocks [2/1] [U_]

      

md1 : active raid1 sda2[0]

      1003968 blocks [2/1] [U_]

      

md127 : active raid1 sda3[0]

      77039616 blocks [2/1] [U_]

      

unused devices: <none>
```

Meine Fragen

1.) Warum wurden die Devices umbenannt und wie kann ich aus dem laufenden Betrieb die Bezeichnung "fix machen". Ich habe noch ein weiteres System welches ebenfalls aktualisiert werden müsste. Würde mir hier das Theater gerne ersparen.

2.) Wie kann ich die fehlende HDD hinzufügen, ohne das es Probleme gibt. Ich darf hier keinen Fehler machen, ansonsten ist das System futsch.Last edited by KaterGonzo on Wed Dec 08, 2010 7:01 pm; edited 1 time in total

----------

## r3tep

Ich habe vor einiger Zeit aus einem anderem Grund (SATA-DVD-Brenner eingebaut) von den absoluten Geräten (/dev/md1, /dev/sda ...) auf diese umgestellt:

fstab:

```

/dev/disk/by-id/md-uuid-1ab16093:f8ba3b9c:5f642827:99c02b6d etc.

```

mdadm.conf 

```

ARRAY /dev/md1 metadata=0.90 UUID=1ab16093:f8ba3b9c:5f642827:99c02b6d

DEVICE /dev/disk/by-id/ata-ST3500412AS_6VV2LENC-part1 /dev/disk/by-id/ata-ST3500412AS_6VV2M0BD-part1

```

Da Du eine Platte Deines RAID1 entfernt hast, müssen die Platten ohnehin synchronisiert werden.

Wie bei allen anderen Arbeiten an Festplatten solltest Du natürlich ein Backup parat haben.

----------

## KaterGonzo

Ist die UUID (ok, der name sagt es eigentlich schon aus) eindeutig und ändert ich NIE? 

1. FRAGE: Was müsste in meinem Beispiel in die /etc/fstab, was in die grub.conf eingetragen werden?

```
# mdadm --detail /dev/md127

/dev/md127:

        Version : 0.90

  Creation Time : Wed Sep  5 08:36:21 2007

     Raid Level : raid1

     Array Size : 77039616 (73.47 GiB 78.89 GB)

  Used Dev Size : 77039616 (73.47 GiB 78.89 GB)

   Raid Devices : 2

  Total Devices : 1

Preferred Minor : 127

    Persistence : Superblock is persistent

    Update Time : Mon Dec  6 17:09:12 2010

          State : clean, degraded

 Active Devices : 1

Working Devices : 1

 Failed Devices : 0

  Spare Devices : 0

           UUID : 860e225c:1d59d285:9224bc57:2ab24b23

         Events : 0.40474146

    Number   Major   Minor   RaidDevice State

       0       8        3        0      active sync   /dev/sda3

       1       0        0        1      removed

```

2. FRAGE: Erkennt mdadm ausschließlich anhand des superblocks, welche Platten zu welchem RAID gehört?

```
# mdadm -E /dev/sda3

/dev/sda3:

          Magic : a92b4efc

        Version : 0.90.00

           UUID : 860e225c:1d59d285:9224bc57:2ab24b23 <--------------- !!!!!!!!!!!!!!

  Creation Time : Wed Sep  5 08:36:21 2007

     Raid Level : raid1

  Used Dev Size : 77039616 (73.47 GiB 78.89 GB)

     Array Size : 77039616 (73.47 GiB 78.89 GB)

   Raid Devices : 2

  Total Devices : 1

Preferred Minor : 127

    Update Time : Mon Dec  6 18:29:42 2010

          State : clean

 Active Devices : 1

Working Devices : 1

 Failed Devices : 1

  Spare Devices : 0

       Checksum : a6b08bd2 - correct

         Events : 40478144

      Number   Major   Minor   RaidDevice State

this     0       8        3        0      active sync   /dev/sda3

   0     0       8        3        0      active sync   /dev/sda3

   1     1       0        0        1      faulty removed

```

3. FRAGE: Warum wurde nach dem Update die mdadm.conf ignoriert?

Wenn Frage 2 mit Ja beantwortet: Die UUIDs passen auch mit dem Einträgen im Superblock(?) überein. Oder hält mdadm an einer anderen Stelle die konfiguration vor?

```
## AUSZUG mdadm.conf

ARRAY /dev/md0 level=raid1 num-devices=2 metadata=0.90 UUID=cb28a94e:40d93554:4fc4e4ff:e7b86def

ARRAY /dev/md1 level=raid1 num-devices=2 metadata=0.90 UUID=860e225c:1d59d285:9224bc57:2ab24b23

ARRAY /dev/md2 level=raid1 num-devices=2 metadata=0.90 UUID=f93c01cd:70d9be28:a740eabd:3d89ce85
```

----------

## r3tep

Der UUID ist eindeutig, Software- oder Bedienungsfehler sind natürlich nicht ausgeschlossen.

1.:

In der fstab steht bei mir:

```

# <fs>                  <mountpoint>    <type>          <opts>          <dump/pass>

/dev/sda1               /boot           auto            noatime         1 2

/dev/sda3               /                  ext3            noatime         0 1

/dev/sda2               none            swap            sw              0 0

#/dev/md1               /mnt/newhome    auto    rw,noatime,noauto       0 0

/dev/disk/by-id/md-uuid-1ab16093:f8ba3b9c:5f642827:99c02b6d     /home   auto    rw,noatime      0 2

```

Der UUID ersetzt bei mir einfach den Gerätenamen:

```

ls /dev/disk/by-id/md-uuid-1ab16093:f8ba3b9c:5f642827:99c02b6d -l

lrwxrwxrwx 1 root root 9  7. Dez 12:08 /dev/disk/by-id/md-uuid-1ab16093:f8ba3b9c:5f642827:99c02b6d -> ../../md1

```

GRUB hat seine eigene Art und Weise die Geräte zu beschreiben. Da Du anscheinend von dem Array bootest, sollte der bisherige Eintrag weiterhin funktionieren.

2.:

Die Zuweisung von Platten zu Arrays wird bei jedem Systemstart nach Bedarf festgelegt. Bei mir hat ein neu eingebauter DVD-Brenner (jetzt sdc) das Array (sdc + sdd) verschoben (sdd +sde). Daher benutze ich jetzt die eindeutige Zuweisung.

Dazu kommt, dass die Erkennung auch durch die Kernelkonfiguration beeinflusst werden kann. Genaueres weiß ich jetzt aber auf Anhieb nicht auswendig.

Später folgt evtl. noch eine Ergänzung.

----------

## KaterGonzo

 *r3tep wrote:*   

>  Da Du anscheinend von dem Array bootest, sollte der bisherige Eintrag weiterhin funktionieren.

 

Naja, wenn Du meine Story gelesen hast: die Devices haben sich ja geändert. Daher meine Frage, ob man die UUID auch in grub.conf eintragen kann. Ich habe mal anhand dieses Artikels die UUID in der grub.conf angegeben: https://forums.gentoo.org/viewtopic-t-700980-start-0.html

Leider ohne Erfolg (man braucht dafür initramfs image), das habe und will ich nicht.

 *Quote:*   

> You have to have an initramfs (initrd) image, that was built by genkernel, loaded in order to get this support. The kernel itself does not, (and won't according to the kernel devs), support this syntax.
> 
> 

 

Warum und wer verändert denn die Devices. Bei mir siehts echt durcheinander aus:

```
# ls -n /dev/disk/by-uuid/

total 0

lrwxrwxrwx 1 0 0 11 Dec  3 14:46 37e82044-18ef-48de-a48b-7444d23cffc5 -> ../../md127

lrwxrwxrwx 1 0 0 11 Dec  3 14:46 ff448824-764f-4097-84f9-2971ded3ab01 -> ../../md126

# ls -n /dev/disk/by-id/

lrwxrwxrwx 1 0 0 11 Dec  3 14:46 md-uuid-860e225c:1d59d285:9224bc57:2ab24b23 -> ../../md127

lrwxrwxrwx 1 0 0 11 Dec  3 14:46 md-uuid-cb28a94e:40d93554:4fc4e4ff:e7b86def -> ../../md126

lrwxrwxrwx 1 0 0  9 Dec  3 14:46 md-uuid-f93c01cd:70d9be28:a740eabd:3d89ce85 -> ../../md1
```

Kann es sein, dass die LIVE-CD in irgendeiner Form die Superblocks der Partitionen geändert hat? Der Inhalt in /dev/disk/by-uuid/ und /dev/disk/by-id/ unterscheidet sich nicht nur in der Menge, sondern die UUIDs sind völlig unterschiedlich. Das was in /dev/disk/by-id/ steht, stimmt mit den Werten überein, was mdadm anzeigt.

----------

## Max Steel

Gebe statt diesem root=UUID=foo-bar-123-456 welches wie du richtig erkannt hast durch eine initrd erst umgesetzt werden muss,

Lieber den kompletten Pfad an, also root=/dev/disk/by-uuid/foo-bar-123-456.

Davon abgesehen verwendet mein Vater lieber die Zuweißung per ID

also /dev/disk/by-id/ata-MAXTOR_STM3320620A_9QF31Y34-part1 (als Bsp.)

Denn anders als die UUID die sich mit jeder formatierung ändern können, kann sich die ID nicht ändern, da sie die Seriennummer der Festplatte sowie die Partitionierung "enthält".

Analog gibt es für die dm-Geschichten:

/dev/disk/by-id/dm-name-vg0-distfiles

(Ist hier ein lvm2)

----------

## firefly

 *Max Steel wrote:*   

> Gebe statt diesem root=UUID=foo-bar-123-456 welches wie du richtig erkannt hast durch eine initrd erst umgesetzt werden muss,
> 
> Lieber den kompletten Pfad an, also root=/dev/disk/by-uuid/foo-bar-123-456.
> 
> Davon abgesehen verwendet mein Vater lieber die Zuweißung per ID
> ...

 

sicher dass der kernel ohne eine initrd/initramfs die Einträge unter /dev/disk/ kennt? AFAIK werden die Einträge unter /dev/disk/*/* von udev angelegt. 

siehe auch

https://forums.gentoo.org/viewtopic-p-6172663.html

https://bbs.archlinux.org/viewtopic.php?id=53351

https://wiki.archlinux.org/index.php/Persistent_block_device_naming#In_your_boot_manager

EDIT: Gerade in ner VM mit gentoo, grub2 und einem 2.6.34 kernel getestet. Der kernel kann das root-device nicht finden, wenn als root=/dev/disk/by-uuid/* angegeben wird.

----------

## Max Steel

So schnell kanns gehen: Habe da etwas durcheinandergewürfelt.

Danke dir.

----------

## KaterGonzo

Richtig! Bei mir bootet die Kiste auch nicht und sagt, dass das Device nicht gefunden wird. 

Außerdem: Deine Aussage, dass die Einträge in /dev/disk/by-id fest sind, scheint nicht zu stimmen. Außerdem haben meine RAID-Devices keinen Hardware-Hersteller  :Smile: 

```
# ls -n /dev/disk/by-uuid/

total 0

lrwxrwxrwx 1 0 0 11 Dec  3 14:46 37e82044-18ef-48de-a48b-7444d23cffc5 -> ../../md127

lrwxrwxrwx 1 0 0 11 Dec  3 14:46 ff448824-764f-4097-84f9-2971ded3ab01 -> ../../md126

# ls -n /dev/disk/by-id/

lrwxrwxrwx 1 0 0 11 Dec  3 14:46 md-uuid-860e225c:1d59d285:9224bc57:2ab24b23 -> ../../md127

lrwxrwxrwx 1 0 0 11 Dec  3 14:46 md-uuid-cb28a94e:40d93554:4fc4e4ff:e7b86def -> ../../md126

lrwxrwxrwx 1 0 0  9 Dec  3 14:46 md-uuid-f93c01cd:70d9be28:a740eabd:3d89ce85 -> ../../md1
```

In by-id sind die aktuellen UUIDs, welche vom RAID verwendet werden. Die passen aber nicht mit dem Inhalt aus by-uuid überein.

Irgendjemand (verdammt, aber wer????) hat die UUIDs angepasst. Macht das die GENTOO-LIVE-CD?

----------

## Josef.95

Jo, sofern in der GRUB Kernelzeile etwas wie

root=UUID=xxxxxxxx

oder

root=LABEL="xxx"

verwendet werden soll wird eine initrd benötigt.

So eine kann aber zb mithilfe der genkernel Scripte recht einfach und schnell erstellt werden,

zb 

```
# genkernel --oldconfig --no-ramdisk-modules ramdisk
```

 erstellt eine schlanke initrd ohne Module --> /boot

(diese muss dann natürlich noch in der grub.conf mit angegeben werden)

----------

## firefly

Hinweis: ab 2.6.37 unterstützt der kernel auch ohne eine initrd das mounten des root-dateisystems über eine UUID: 

source: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=b5af921ec02333e943efb59aca4f56b78fc0e100

----------

