Diferença entre UUID de blkid e mdadm?

24

Alguém pode explicar a diferença entre os UUIDs relatados por blkid e mdadm ? Em um dos nossos sistemas CentOS, por exemplo:

[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 que eles são diferentes e como mudaríamos o UUID usado por mdadm ?

Entendo que usaríamos tune2fs para alterar o UUID da partição (o que mudaria o que é retornado por blkid ), mas não saberemos como alterar o que mdadm usa.

    
por Chris 15.05.2014 / 13:29

3 respostas

22

O primeiro relata o UUID do sistema de arquivos ext4 no dispositivo de bloco md . Ele ajuda o sistema a identificar o sistema de arquivos exclusivamente entre os sistemas de arquivos disponíveis no sistema. Isso é armazenado na estrutura do sistema de arquivos, ou seja, nos dados armazenados no dispositivo md.

O segundo é o UUID do dispositivo RAID. Isso ajuda o subsistema md a identificar esse dispositivo RAID específico de maneira exclusiva. Em particular, ajuda a identificar todos os dispositivos de bloco que pertencem à matriz RAID. Ele é armazenado nos metadados da matriz (em cada membro). Os membros da matriz também têm seu próprio UUID (no sistema md, eles também podem ter UUIDs de partição se forem partições GPT (que seriam armazenadas na tabela de partições GPT) ou volumes LVM ...).

blkid é um pouco enganador, já que o que ele retorna é o ID da estrutura armazenada no dispositivo (para aqueles tipos de estruturas que ele conhece como a maioria dos sistemas de arquivos, membros do LVM e dispositivos de troca). Observe também que não é incomum ter dispositivos de bloco com estruturas com UUIDs idênticos (por exemplo, instantâneos LVM). E um dispositivo de bloco pode conter qualquer coisa, incluindo coisas cuja estrutura não inclua um UUID.

Assim, como exemplo, você pode ter um sistema com 3 unidades, com particionamento GPT. Essas unidades podem ter um nome mundial que o identifica de forma exclusiva. Digamos que as 3 unidades sejam particionadas com uma partição cada ( /dev/sd[abc]1 ). Cada partição terá um UUID GPT armazenado na tabela de partições GPT.

Se essas partições formam um array RAID5 md. Cada um receberá um MDU UUID como um membro RAID e o array obterá um UUID como o dispositivo md RAID.

Esse /dev/md0 pode ser particionado com o particionamento do tipo MSDOS ou GPT. Por exemplo, poderíamos ter uma partição /dev/md0p1 com um UUID GPT (armazenado na tabela de partições GPT que é armazenada nos dados de / dev / md0).

Isso poderia ser um volume físico para o LVM. Como tal, obterá um PV UUID. O grupo de volumes também terá um UUID VG.

Nesse grupo de volumes, você criaria volumes lógicos, cada um recebendo um UUID de LV.

Em um desses LVs (como /dev/VG/LV ), você poderia criar um sistema de arquivos ext4. Esse sistema de arquivos obteria um UUID ext4.

blkid /dev/VG/LV você obteria o UUID (ext4) desse sistema de arquivos. Mas, como uma partição dentro do volume VG, ele também obteria um UUID de partição (alguns esquemas de particionamento como o MSDOS / MBR não têm UUIDs). Esse grupo de volumes é constituído por membros PVs que são eles próprios outros dispositivos de bloco. blkid /dev/md0p1 lhe daria o PV UUID. Ele também tem uma partição UUID na tabela da GPT em /dev/md0 . /dev/md0 em si é feito de outros dispositivos de bloco. blkid /dev/sda1 retornará o UUID do membro raid. Ele também tem uma partição UUID na tabela GPT em /dev/sda .

    
por 15.05.2014 / 13:37
4

O UUID diferente já foi explicado. Não apenas os sistemas de arquivos os possuem. Existem apenas UUIDs para coisas diferentes: RAID array, dispositivo, partição, contêineres LUKS, PV's do LVM ... e finalmente sistemas de arquivos.

O que me incomoda é que mesmo o formato desses UUIDs é 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 você pode ver, eles são os mesmos UUIDs, mas blkid os imprime com traços - , enquanto mdadm usa dois-pontos : . Então você recebe d8b8b4e5-e47b-2e45-2093-cd36f654020d vs. d8b8b4e5:e47b2e45:2093cd36:f654020d .

Muito irritante, especialmente se você quiser trabalhar com UUIDs em scripts. Não é óbvio como converter de uma formatação para outra.

    
por 15.05.2014 / 17:22
-1

O UUID blkid acima de "32cb0a6e-8148-44e9-909d-5b23df045bd1" é o correto, é o que o SO usará para encontrar o array RAID.

O mdadm tem seu próprio UUID "interno" que não é usado diretamente pelo sistema operacional e é o que você usa no arquivo mdadm.conf, por exemplo:

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

O mdadm não deve chamar nada do UUID quando estiver separado daquele que o blkid e o SO reconhecem. Talvez devesse ser chamado de mduuid ou qualquer outra coisa para evitar confusão.

    
por 15.05.2014 / 13:38