Unterschied zwischen UUID von blkid und mdadm?

26

Kann jemand den Unterschied zwischen den von blkidund gemeldeten UUIDs erklären mdadm? Auf einem unserer CentOS-Systeme zum Beispiel:

[root@server ~]# blkid | grep /dev/md1
/dev/md1: UUID="32cb0a6e-8148-44e9-909d-5b23df045bd1" TYPE="ext4"

[root@server ~]# mdadm --detail /dev/md1 | grep UUID
UUID : f204c558:babf732d:85bd7296:bbfebeea

Warum unterscheiden sie sich und wie würden wir die von verwendete UUID ändern mdadm?

Ich verstehe, dass wir verwenden würden tune2fs, um die UUID für die Partition zu ändern (was ändern würde, was zurückgegeben wird blkid), aber nicht sicher, wie zu ändern, was mdadmverwendet wird.

Chris
quelle

Antworten:

23

Die erste gibt die UUID des ext4-Dateisystems auf dem mdBlockgerät an. Es hilft dem System, das Dateisystem eindeutig unter den auf dem System verfügbaren Dateisystemen zu identifizieren. Dies ist in der Struktur des Dateisystems gespeichert, dh in den Daten, die auf dem md-Gerät gespeichert sind.

Die zweite ist die UUID des RAID-Geräts. Es hilft dem md-Subsystem, dieses bestimmte RAID-Gerät eindeutig zu identifizieren. Insbesondere hilft es dabei, alle Blockgeräte zu identifizieren, die zum RAID-Array gehören. Es wird in den Metadaten des Arrays (auf jedem Mitglied) gespeichert. Array-Mitglieder haben auch ihre eigene UUID (im md-System haben sie möglicherweise auch Partitions-UUIDs, wenn es sich um GPT-Partitionen handelt (die selbst in der GPT-Partitionstabelle gespeichert würden), oder LVM-Volumes ...).

blkidist etwas irreführend, da die ID der auf dem Gerät gespeicherten Struktur zurückgegeben wird (für Strukturen, die es kennt, wie die meisten Dateisysteme, LVM-Mitglieder und Swap-Geräte). Beachten Sie auch, dass Blockgeräte mit Strukturen mit identischen UUIDs (z. B. LVM-Snapshots) nicht selten sind. Und ein Blockgerät kann alles enthalten, auch Dinge, deren Struktur keine UUID enthält.

Als Beispiel könnten Sie ein System mit 3 Laufwerken und GPT-Partitionierung haben. Diese Laufwerke könnten einen weltweiten Namen haben, der sie eindeutig identifiziert. Angenommen, die drei Laufwerke sind mit jeweils einer Partition partitioniert ( /dev/sd[abc]1). In jeder Partition ist eine GPT-UUID in der GPT-Partitionstabelle gespeichert.

Wenn diese Partitionen ein md RAID5-Array bilden. Jeder erhält eine MD-UUID als RAID-Mitglied, und das Array erhält eine UUID als MD-RAID-Gerät.

Dies /dev/md0kann mit MSDOS- oder GPT-Partitionierung weiter partitioniert werden. Zum Beispiel könnten wir eine /dev/md0p1Partition mit einer GPT-UUID haben (gespeichert in der GPT-Partitionstabelle, die in den Daten von / dev / md0 gespeichert ist).

Dies könnte wiederum ein physischer Datenträger für LVM sein. Als solches erhält es eine PV-UUID. Die Volumengruppe wird auch eine VG-UUID haben.

In dieser Datenträgergruppe würden Sie logische Datenträger erstellen, die jeweils eine LV-UUID erhalten.

Auf einer dieser LVs (wie /dev/VG/LV) könnten Sie ein ext4-Dateisystem erstellen . Dieses Dateisystem würde eine ext4-UUID erhalten.

blkid /dev/VG/LVwürde dir die (ext4) UUID dieses Dateisystems geben. Als Partition innerhalb des VG-Volumes würde es jedoch auch eine Partitions-UUID erhalten (einige Partitionsschemata wie MSDOS / MBR haben keine UUIDs). Diese Volumengruppe besteht aus Mitgliedern von PVs, die selbst andere Blockgeräte sind. blkid /dev/md0p1würde dir die PV UUID geben. Es weist auch eine Partitions-UUID in der GPT-Tabelle auf /dev/md0. /dev/md0selbst wird aus anderen Blockgeräten gemacht. blkid /dev/sda1Gibt die UUID des RAID-Mitglieds zurück. Es weist auch eine Partitions-UUID in der GPT-Tabelle auf /dev/sda.

Stéphane Chazelas
quelle
Wie würden wir die UUID eines RAID-Geräts ändern, wie es von verwendet wird mdadm? Wir haben gerade einen Server neu abgebildet und die UUIDs sind unterschiedlich. Deshalb möchten wir die vorherigen UUIDs wiederherstellen, damit wir nicht alle Konfigurationsdateien ändern müssen. Hat im Wesentlichen /dev/md0eine neue UUID und wir möchten diese auf die alte zurücksetzen (anhand einer Sicherung identifiziert), sodass das System ohne weitere Änderungen gestartet werden kann.
Chris
@ Chris, Die MD UUID (siehe man mdadm) oder die ext4 UUID (siehe man tune2fs)? Liegt das Boot-Problem beim Finden des Root-Dateisystems oder beim Assemblieren des RAID-Arrays basierend auf der in initramfs gespeicherten Datei mdadm.conf vor? In jedem Fall klingt es für mich einfacher, die Datei mdadm.conf oder fstab / grub.cfg zu aktualisieren, als sich mit UUIDs zu vermischen.
Stéphane Chazelas
Die MD-UUID - Wir haben den Server aus dem Backup wiederhergestellt. Wissen Sie, wie Sie die UUID eines RAID-Geräts aktualisieren können? Ich kann diese Informationen in der Manpage nicht sehen. Wir versuchen nur, den einfachsten Weg zu finden, um es zum Laufen zu bringen (Testen der Wiederherstellungsprozedur).
Chris
@ Chris, du solltest eine andere Frage dazu stellen.
Stéphane Chazelas
@ Chris: Sie möchten, dass die UUIDs unterschiedlich sind. Wenn mdadm sieht, dass mehrere Festplatten zu demselben RAID gehören, obwohl es sich um unterschiedliche RAIDs handelt (aufgrund von UUID-Konflikten), treten echte Probleme auf.
Frostschutz
4

Die unterschiedliche UUID wurde bereits erläutert. Nicht nur Dateisysteme haben sie. Es gibt nur UUIDs für verschiedene Dinge: RAID-Array, Gerät, Partition, LUKS-Container, LVM-PVs ... und schließlich Dateisysteme.

Was mich persönlich stört, ist, dass selbst die Art und Weise, wie diese UUIDs formatiert werden, unterschiedlich ist.

blkid:

# blkid /dev/sda1
/dev/sda1: 
UUID="d8b8b4e5-e47b-2e45-2093-cd36f654020d"
UUID_SUB="3c3e6eac-2139-3f7a-16b7-57280934d88e"
PARTUUID="6a89cedf-69e1-40db-b08c-1c8e45af59f5" 

mdadm:

# mdadm --examine /dev/sda1 | grep UUID
     Array UUID : d8b8b4e5:e47b2e45:2093cd36:f654020d
    Device UUID : 3c3e6eac:21393f7a:16b75728:0934d88e

Wie Sie sehen, handelt es sich um dieselben UUIDs, die jedoch blkidmit Bindestrichen gedruckt werden, -während mdadmDoppelpunkte verwendet werden :. So erhalten Sie d8b8b4e5-e47b-2e45-2093-cd36f654020dgegen d8b8b4e5:e47b2e45:2093cd36:f654020d.

Sehr ärgerlich, besonders wenn Sie mit UUIDs in Skripten arbeiten möchten. Es ist nicht offensichtlich, wie von einer Formatierung in die andere konvertiert werden soll.

Frostschutz
quelle
Was ist mit s /: / - / g oder umgekehrt? ;)
ThiefMaster
Wirklich, der Doppelpunkt :oder Bindestrich -ist einfach da, damit Menschen die langen UUIDs in Stücken lesen können und nicht irgendwo in der Mitte verloren gehen. Die UUID ist in Wirklichkeit eine Binärzahl und enthält keine Gedankenstriche oder Doppelpunkte. Es wird in Linux als unsigned Zeichen - Array implementiert: unsigned char uuid_out[16]. Anscheinend hat die UUID-Spezifikation auch eine Vorstellung von Varianten und Versionen , die wir durch Setzen des höchstwertigen Bytes uuid_out[6]auf 4 implementiert sehen können .
TrinitronX,
-1

Die blkid-UUID über "32cb0a6e-8148-44e9-909d-5b23df045bd1" ist die richtige, und das Betriebssystem verwendet sie, um das RAID-Array zu finden.

mdadm hat eine eigene "interne" UUID, die nicht direkt vom Betriebssystem verwendet wird und die Sie in der Datei mdadm.conf verwenden, z.

"ARRAY / dev / md1 level = raid1 num-devices = 2 uuid = f204c558: babf732d: 85bd7296: bbfebeea"

mdadm sollte keine UUID aufrufen, wenn diese von derjenigen getrennt ist, die blkid und das Betriebssystem erkennen. Vielleicht sollte es mduuid oder etwas anderes heißen, um Verwirrung zu vermeiden.

cioby23
quelle