Wie benenne ich ein mdadm-RAID-Array um?

23

Aus irgendeinem Grund wird die Änderung nicht wirksam, wenn ich versuche, ein mdadm-RAID-Array in einen Textnamen umzubenennen.

Ich habe den Rat dieser Serverfehlerfrage ausprobiert , aber ohne Erfolg.

~$ mdadm --version
mdadm - v3.1.4 - 31st August 2010

~$ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
  Creation Time : Tue Sep 27 08:32:32 2011
     Raid Level : raid1
     Array Size : 1953513424 (1863.02 GiB 2000.40 GB)
  Used Dev Size : 1953513424 (1863.02 GiB 2000.40 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Sun Oct  2 17:59:37 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : omicron:0  (local to host omicron)
           UUID : 75c4a555:482aecd0:ade70dfc:1547926a
         Events : 17

Number   Major   Minor   RaidDevice State
   0       8       80        0      active sync   /dev/sdf
   1       8       96        1      active sync   /dev/sdg

~$ sudo mdadm --stop /dev/md0
mdadm: stopped /dev/md0

~$ sudo mdadm --assemble /dev/md/alpha --update=name /dev/sd[gf]
mdadm: /dev/md/alpha has been started with 2 drives.

~$ sudo mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Tue Sep 27 08:32:32 2011
     Raid Level : raid1
     Array Size : 1953513424 (1863.02 GiB 2000.40 GB)
  Used Dev Size : 1953513424 (1863.02 GiB 2000.40 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Sun Oct  2 18:06:11 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : omicron:0  (local to host omicron)
           UUID : 75c4a555:482aecd0:ade70dfc:1547926a
         Events : 17

Number   Major   Minor   RaidDevice State
   0       8       80        0      active sync   /dev/sdf
   1       8       96        1      active sync   /dev/sdg

~$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdf[0] sdg[1]
      1953513424 blocks super 1.2 [2/2] [UU]

md126 : active (auto-read-only) raid1 sdd[0] sde[1]
      1953513424 blocks super 1.2 [2/2] [UU]

md127 : active (auto-read-only) raid1 sdb[0] sda[1]
      976762496 blocks [2/2] [UU]

unused devices: <none>

Wie Sie sehen, wird der Name weiterhin als omicron:0über die alte Gerätedatei erreichbar gemeldet . Der Versuch sudo mdadm --detail /dev/md/alphawird funktionieren und den gleichen, falschen Namen bis zum nächsten Neustart melden, wenn er nicht mehr funktioniert.

Es scheint, als würde mdadm beim Herausfinden des einzutragenden Namens verwirrt und erstellt stattdessen nur die Gerätedatei.


BEISEITE

Gibt es eine Möglichkeit, mdadm zu veranlassen, eine Aktualisierung des Namensteils des Superblocks zu erzwingen (dh den Namen, den das Array haben soll, explizit festzulegen), ohne den Superblock explizit neu erstellen zu müssen? (ie sudo mdam --zero-superblock /dev/sd[fg]; sudo mdadm --create /dev/md/alpha --raid-devices=2 --level=1 --assume-clean --name=alpha /dev/sd[fg])


Das Problem besteht darin, dass nach dem Neustart ARRAY /dev/md/alpha metadata=1.2 name=omicron:alpha UUID=c66a267...die angegebene Gerätedatei trotz des Hinzufügens zu mdadm.conf verschwindet und durch ein Standardformat ersetzt wird. (/ dev / md125 oder ähnlich)

Wie kann ich dafür sorgen, dass ein umbenanntes mdadm-Array seinen Namen behält? Wie kann ich Ubuntu dazu bringen, die Gerätedateien zwischen den Startvorgängen zu speichern?

Zaz
quelle

Antworten:

19

Du musst ihm eigentlich den Namen geben mit --name=wie:

sudo mdadm --assemble /dev/md/alpha --name=newname --update=name /dev/sd[gf]

Um beim Neustart ein konsistentes Verhalten zu erzielen, müssen Sie im Argument --name denselben Namen verwenden wie im letzten Teil des Geräts. Hier wäre es: sudo mdadm --assemble / dev / md / alpha --name = alpha --update = name / dev / sd [gf]

Siehe Khassads Post unten für eine vollständige Erklärung.

pille
quelle
1
Ein kleines Update für diese Befehlszeile, um die Übersichtlichkeit zu verbessern. Wie bei einem Boob wurde der ursprüngliche Name des Arrays nach "--update =" eingegeben. sudo mdadm --assemble /dev/md/alpha --name={newname} --update=name /dev/sd[gf] Hoffe das macht Sinn oder macht es klarer ....
Anastrophe
Hallo, nach der Ausgabe des Befehls # sudo mdadm --assemble / dev / md127 --name = md0 --update = name / dev / sd [ab] bekomme ich mdadm: / dev / sda ist beschäftigt - Überspringen von mdadm: / dev / sdb ist beschäftigt - überspringen Irgendwelche Gedanken? Natürlich habe ich das Array zuerst abgehängt!
Razor7
2
@ razor7mdadm --stop --scan md127
Daniel Dinnyes
12

Die Möglichkeit, Ubuntu zu veranlassen, die Namensänderung über die Startvorgänge hinweg beizubehalten, besteht darin, Ihre initramfs zu aktualisieren. Nach dem Aktualisieren Ihres Array-Namens und der Datei mdadm.conf müssen Sie den folgenden Befehl eingeben:

sudo update-initramfs -u

Der ganze Prozess:

sudo mdadm --stop /dev/md125
sudo mdadm --assemble /dev/md/alpha --name=alpha --update=name /dev/sd[fg]
sudo mdadm -Db /dev/md/alpha

Der dritte Befehl sollte etwa Folgendes zurückgeben:

ARRAY /dev/md/alpha metadata=1.2 name=omicron:alpha UUID=5b024352:3a940335:233aa23f:5c6b2a1f

Fügen Sie das Ergebnis in /etc/mdadm/mdadm.conf ein (ersetzen Sie die alte Zeile). Oder führen Sie aus:

sudo mdadm -Db /dev/md/alpha >> /etc/mdadm/mdadm.conf

Nächster Lauf:

sudo update-initramfs -u

Schließlich neu starten.

Diese Diskussion war nützlich .

Swoogan
quelle
8

Die erste Antwort von Pille und NN klappt.

Der Trick dabei ist, dass, wenn Sie die --nameOption nicht angeben, die einzige Umbenennung durch mdadmdie Zuweisung des Arraynamens anhand der zugewiesenen Gerätenummer erfolgt. In dieser Frage ist es 0, also ist der neue Arrayname 0.

Da Sie den Gerätenamen ("alpha" hier) angeben, der im Befehl assemble verwendet werden soll, wird dieser Gerätename erstellt und verwendet. Beim automatischen Start mdadmwird jedoch ein Gerät basierend auf dem Namen erstellt, der im Superblock angezeigt wird, in diesem Fall also 0, sodass der in Ihrem Assemble-Befehl angegebene Gerätename verloren geht.

Damit Ihr Name dauerhaft und kohärent geändert wird, müssen Sie im letzten Teil Ihres Gerätenamens und in Ihrem neuen Array-Namen denselben Namen verwenden. In diesem Fall müssten Sie für das Gerät "alpha" die folgende Befehlszeile verwenden:

mdadm --assemble /dev/md/alpha --name=alpha --update=name /dev/sd[gf]

Sie können auch den Hostnamen ändern. Dazu müssen Sie ihn explizit mithilfe der -name=<hostname>:<array_name>Syntax deklarieren .

Dies kann beispielsweise nach einer Änderung des Maschinennamens hilfreich sein.

Khassad
quelle
2

Es scheint, als ob die Antwort, die Sie suchen, in der Manpage von mdadm richtig ist

[create, build, grow]
      -N, --name=
          Set  a name for the array.  This is **currently only effective when creat‐
          ing an array** with a version-1 superblock, or an  array  in  a  DDF  con‐
          tainer.   The  name is a simple textual string that can be used to iden‐
          tify array components when assembling.  If name is needed but not speci‐
          fied, it is taken from the basename of the device that is being created.
          e.g. when creating /dev/md/home the name will default to home.

und zum zusammenbauen

       -N, --name=
          Specify the name of the array to assemble.  **This must be the  name  that
          was  specified  when  creating the array**.  It must either match the name
          stored in the superblock exactly, or it  must  match  with  the  current
          homehost prefixed to the start of the given name.

Dies erklärt, warum das Namensattribut nach dem Festlegen nicht klebrig bleibt. Wenn Sie es zum Laufen gebracht haben, bestätigen Sie bitte mit einem Kommentar, welche Antwort den Trick für Sie getan hat. Alternativ können Sie immer Symlinks mit einer udev-Regel und der UUID des Arrays als Anker erstellen.

Ich sehe keinen Sinn darin, den falschen Namen in die Datei /etc/mdadm.conf einzufügen. Sie verwenden bereits die UUID, bei der es sich um den Namen des kanonischen Arrays handelt. Das Hinzufügen einer weiteren Variablen, die Sie für änderungsfähig halten, ist nur eine unnötige Wartung, und Sie müssen nach Problemen fragen, z. B., dass das Array nicht gestartet werden kann.

Abgesehen von diesen Beobachtungen ist der beste Weg, um zu verstehen, warum Sie den Namen zur Laufzeit nicht aktualisieren können, das Pingen der Mailingliste für Linux-Raids.

ppetraki
quelle
1

Haben Sie versucht, Ihren Namen zu aktualisieren, nachdem Sie ihn geändert haben mdadm.conf?

 mdadm --examine --scan --config=mdadm.conf >> /etc/mdadm.conf
maniat1k
quelle
0

mdadm hat einen Fehler, wenn Raid-Volumes intern mit einem Leerzeichen im Namen erstellt wurden. Diese Volumes werden aufgrund eines Formatfehlers in der generierten Datei /etc/mdadm/mdadm.conf nicht korrekt eingebunden. Sie müssen sie dort umbenennen, aber es wird nicht dauerhaft sein. Das Umbenennen der internen Namen ist daher erforderlich. Dies wird jedoch nicht von allen RAID-Controllern unterstützt, die ihre Metadaten blockieren und die Namensoption nicht unterstützen. Ich verstehe nicht, wie man diese Volumes umbenennt (selbst wenn sie intern durch ihre UUID referenziert werden, sind die Namen die von Linux verwendeten; Windows hat im Gegenteil keinen solchen Fehler und hängt RAID-Volumes mit Leerzeichen in ihren Namen perfekt ein)!

verdy_p
quelle