Diferença entre UUID de blkid e mdadm?

26

Alguém pode explicar a diferença entre os UUIDs relatados por blkide 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 mdadm?

Entendo que tune2fsusaríamos para alterar o UUID da partição (o que mudaria o que é retornado por blkid), mas não tenho certeza de como alterar o que mdadmusa.

Chris
fonte

Respostas:

23

O primeiro relata o UUID do sistema de arquivos ext4 no mddispositivo de bloco. 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, nos dados armazenados no dispositivo md.

O segundo é o UUID do dispositivo RAID. Ajuda o subsistema md a identificar esse dispositivo RAID específico exclusivamente. 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, pois o que ele retorna é o ID da estrutura armazenada no dispositivo (para aqueles tipos de estruturas conhecidas como a maioria dos sistemas de arquivos, membros 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 do LVM). E um dispositivo de bloco pode conter qualquer coisa, incluindo itens cuja estrutura não inclui um UUID.

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

Se essas partições formarem uma matriz md RAID5. Cada um deles obterá um md UUID como membro RAID, e a matriz obterá um UUID como dispositivo md RAID.

Isso /dev/md0pode ser particionado ainda mais com o particionamento do tipo MSDOS ou GPT. Por exemplo, poderíamos ter uma /dev/md0p1partição com um GPU UUID (armazenado na tabela de partições GPT armazenada nos dados de / dev / md0).

Por sua vez, isso poderia ser um volume físico para o LVM. Como tal, receberá um PV UUID. O grupo de volumes também terá um VG UUID.

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

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

blkid /dev/VG/LVobteria o UUID (ext4) desse sistema de arquivos. Mas, como uma partição dentro do volume VG, também obteria uma UUID de partição (algum esquema de particionamento como MSDOS / MBR não possui UUIDs). Esse grupo de volumes é composto de PVs de membros que são outros dispositivos de bloco. blkid /dev/md0p1daria a você o PV UUID. Ele também possui um UUID de partição na tabela GPT /dev/md0. /dev/md0em si é feito de outros dispositivos de bloco. blkid /dev/sda1retornará o UUID do membro da invasão. Ele também possui um UUID de partição na tabela GPT /dev/sda.

Stéphane Chazelas
fonte
Como mudaríamos o UUID de um dispositivo RAID conforme usado mdadm? Acabamos de criar uma nova imagem de um servidor e os UUIDs são diferentes, portanto, queremos restaurar os UUIDs anteriores para não precisarmos alterar todos os arquivos de configuração. Essencialmente, /dev/md0possui um novo UUID e queremos devolvê-lo ao antigo (identificado a partir de um backup) para que o sistema inicialize sem a necessidade de alterações adicionais.
22414 Chris
@ Chris, O MD UUID (veja man mdadm) ou o ext4 UUID (veja man tune2fs)? O problema de inicialização é encontrar o sistema de arquivos raiz ou montar a matriz RAID com base no mdadm.conf armazenado no initramfs. De qualquer forma, me parece mais simples atualizar o mdadm.conf ou o fstab / grub.cfg do que misturar-se com os UUIDs.
Stéphane Chazelas
O MD UUID - restauramos o servidor do backup. Você sabe como atualizar o UUID de um dispositivo RAID? Não consigo ver essas informações na página de manual. Estamos apenas tentando descobrir a maneira mais simples de fazê-lo funcionar (testando o procedimento de restauração).
22414 Chris
@ Chris, você deve levantar outra questão para isso.
Stéphane Chazelas
@ Chris: Você quer que os UUIDs sejam diferentes. Se o mdadm vir vários discos que acreditam pertencer ao mesmo ataque, mesmo que sejam ataques diferentes (por causa de conflitos de UUID), você terá problemas reais.
Frostschutz 15/05
4

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

O que me incomoda pessoalmente é que mesmo a forma como esses UUIDs são formatados é 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 os blkidimprimem com traços -enquanto mdadmusam dois pontos :. Então você começa d8b8b4e5-e47b-2e45-2093-cd36f654020dvs. d8b8b4e5:e47b2e45:2093cd36:f654020d.

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

frostschutz
fonte
E quanto a s /: / - / g ou vice-versa? ;)
ThiefMaster
na verdade, os dois pontos :ou traço -existem simplesmente para que os humanos possam ler os longos UUIDs em pedaços e não se perderem em algum lugar no meio. O UUID é realmente um número binário e não possui traços ou dois pontos. Ele é implementado no Linux como um array de caracteres sem sinal: unsigned char uuid_out[16]. Aparentemente, a especificação UUID também tem uma idéia de variantes e versões , que podemos ver implementadas definindo o byte mais significativo uuid_out[6]como 4 .
TrinitronX
-1

O UUID do blkid acima "32cb0a6e-8148-44e9-909d-5b23df045bd1" é o correto, que é o que o sistema operacional usará para encontrar a matriz RAID.

O mdadm possui 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 / dev / md1 level = raid1 num-devices = 2 uuid = f204c558: babf732d: 85bd7296: bbfebeea"

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

cioby23
fonte