¿Diferencia entre UUID de blkid y mdadm?

26

¿Alguien puede explicar la diferencia entre los UUID informados por blkidy mdadm? En uno de nuestros sistemas CentOS, por ejemplo:

[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

¿Por qué son diferentes y cómo cambiaríamos el UUID utilizado por mdadm?

Entiendo que tune2fsusaríamos para cambiar el UUID para la partición (que cambiaría lo que devuelve blkid), pero no estoy seguro de cómo cambiar qué mdadmusos.

Chris
fuente

Respuestas:

23

El primero informa el UUID del sistema de archivos ext4 en el mddispositivo de bloque. Ayuda al sistema a identificar el sistema de archivos de manera única entre los sistemas de archivos disponibles en el sistema. Eso se almacena en la estructura del sistema de archivos, es decir, en los datos almacenados en el dispositivo md.

El segundo es el UUID del dispositivo RAID. Ayuda al subsistema md a identificar ese dispositivo RAID particular de manera única. En particular, ayuda a identificar todos los dispositivos de bloque que pertenecen a la matriz RAID. Se almacena en los metadatos de la matriz (en cada miembro). Los miembros de la matriz también tienen su propio UUID (en el sistema md, también pueden tener UUID de partición si son particiones GPT (que a su vez se almacenarían en la tabla de particiones GPT), o volúmenes LVM ...).

blkides un poco engañoso, ya que lo que devuelve es la ID de la estructura almacenada en el dispositivo (para ese tipo de estructuras que conoce como la mayoría de los sistemas de archivos, miembros LVM y dispositivos de intercambio). También tenga en cuenta que no es raro tener dispositivos de bloque con estructuras con UUID idénticos (por ejemplo, instantáneas LVM). Y un dispositivo de bloque puede contener cualquier cosa, incluidas cosas cuya estructura no incluye un UUID.

Entonces, como ejemplo, podría tener un sistema con 3 unidades, con particionamiento GPT. Esas unidades podrían tener un nombre mundial que lo identifica de manera única. Digamos que las 3 unidades están particionadas con una partición cada una ( /dev/sd[abc]1). Cada partición tendrá un UUID GPT almacenado en la tabla de particiones GPT.

Si esas particiones forman una matriz md RAID5. Cada uno obtendrá un UUID md como miembro RAID, y la matriz obtendrá un UUID como dispositivo md RAID.

Eso /dev/md0puede dividirse aún más con MSDOS o particiones tipo GPT. Por ejemplo, podríamos tener una /dev/md0p1partición con un UUID GPT (almacenado en la tabla de particiones GPT que se almacena en los datos de / dev / md0).

Eso a su vez podría ser un volumen físico para LVM. Como tal, obtendrá un UUID PV. El grupo de volúmenes también tendrá un VG UUID.

En ese grupo de volúmenes, crearía volúmenes lógicos, cada uno con un UUID de LV.

En uno de esos LV (como /dev/VG/LV), podría crear un sistema de archivos ext4. Ese sistema de archivos obtendría un UUID ext4.

blkid /dev/VG/LVle daría el UUID (ext4) de ese sistema de archivos. Pero como una partición dentro del volumen VG, también obtendría un UUID de partición (algunos esquemas de partición como MSDOS / MBR no tienen UUID). Ese grupo de volúmenes está formado por miembros PV que son otros dispositivos de bloque. blkid /dev/md0p1te daría el PV UUID. También tiene un UUID de partición en la tabla GPT /dev/md0. /dev/md0en sí está hecho de otros dispositivos de bloque. blkid /dev/sda1devolverá el UUID de miembro de la redada. También tiene un UUID de partición en la tabla GPT /dev/sda.

Stéphane Chazelas
fuente
¿Cómo cambiaríamos el UUID de un dispositivo RAID tal como lo utiliza mdadm? Acabamos de volver a crear una imagen de un servidor y los UUID son diferentes, por lo que queremos restaurar los UUID anteriores para que no necesitemos cambiar todos los archivos de configuración. Esencialmente, /dev/md0tiene un nuevo UUID y queremos devolverlo al anterior (identificado desde una copia de seguridad) para que el sistema arranque sin necesidad de más cambios.
Chris
@Chris, el MD UUID (ver man mdadm) o el UU4 ext4 (ver man tune2fs)? Es el problema de arranque sobre encontrar el sistema de archivos raíz o sobre ensamblar la matriz RAID basada en el mdadm.conf almacenado en initramfs. De cualquier manera, me parece más simple actualizar mdadm.conf o fstab / grub.cfg que mezclarme con UUID.
Stéphane Chazelas
MD UUID: restauramos el servidor desde la copia de seguridad. ¿Sabes cómo actualizar el UUID de un dispositivo RAID? No puedo ver esa información en la página de manual. Solo estamos tratando de encontrar la forma más simple de hacerlo funcionar (probando el procedimiento de restauración).
Chris
@ Chris, deberías plantear otra pregunta para eso.
Stéphane Chazelas
@ Chris: Desea que los UUID sean diferentes. Si mdadm ve que varios discos creen pertenecer a la misma incursión, aunque se trate de incursiones diferentes (debido a conflictos con UUID), tendrá problemas reales.
frostschutz
4

Ya se explicó el diferente UUID. No solo los sistemas de archivos los tienen. Solo hay UUID para diferentes cosas: matriz de incursiones, dispositivo, partición, contenedores LUKS, PV LVM ... y finalmente sistemas de archivos.

Lo que me molesta personalmente es que incluso la forma en que se formatean esos UUID es diferente.

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

Como puede ver, son los mismos UUID, pero los blkidimprime con guiones -mientras mdadmusa dos puntos :. Para que pueda obtener d8b8b4e5-e47b-2e45-2093-cd36f654020dvs d8b8b4e5:e47b2e45:2093cd36:f654020d.

Muy molesto, especialmente si quieres trabajar con UUID en scripts. No es obvio cómo convertir de un formato a otro.

Frostschutz
fuente
¿Qué pasa con s /: / - / go o viceversa? ;)
ThiefMaster
realmente el colon :o el guión -están ahí simplemente para que los humanos puedan leer los UUID largos en trozos y no perderse en algún lugar en el medio. El UUID es realmente un número binario y no tiene guiones ni dos puntos. Está implementado en Linux como un array de caracteres sin signo: unsigned char uuid_out[16]. Aparentemente, la especificación UUID también tiene una idea de variantes y versiones , que podemos ver implementadas al establecer el byte más significativo uuid_out[6]en 4 .
TrinitronX
-1

El UUID blkid arriba de "32cb0a6e-8148-44e9-909d-5b23df045bd1" es el correcto, eso es lo que usará el sistema operativo para encontrar la matriz RAID.

mdadm tiene su propio UUID "interno" que no es utilizado directamente por el sistema operativo y es lo que usa en el archivo mdadm.conf, por ejemplo:

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

mdadm no debería llamar a nada UUID cuando está separado del que blkid y el sistema operativo reconocen. Tal vez debería llamarse mduuid u otra cosa para evitar confusiones.

cioby23
fuente