
Estou seguindo uma receita que criei há alguns anos, onde em determinado momento preciso usar blkid
para obter um UUID do sistema de arquivos.
Tenho este comando anotado, junto com um valor de retorno de exemplo esperado:
blkid -o export -s UUID /dev/mapper/thathost_crypt_md3
UUID=JNbF5T-vhSD-3aVv-intG-1Tk2-IEOZ-ABWXYZ
No entanto, os tempos mudaram e não estou mais usando o Debian "wheezy", mas sim "jessie". Vejo que nesta versão mais recente do Debian agora tenho um valor de retorno diferente para o mesmo comando:
blkid -o export -s UUID /dev/mapper/thishost_crypt_sdb
DEVNAME=/dev/mapper/thishost_crypt_sdb
UUID=bddac63e-3510-4d24-a6fb-4d0a89abcdef
A página de manual do blkid parece dizer que -s UUID
deve incluir apenas valores que correspondam a essa chave, mas também há algo estranho DEVNAME
lá.
Eu tenho uma solução alternativa, pois posso escrever isso em ambos os casos, mas parece estranho que a estrutura de saída deveria ter mudado:
echo "UUID=$(blkid -o value -s UUID /path/to/device)"
UUID=bddac63e-3510-4d24-a6fb-4d0a89abcdef
As versões do pacote util-linux
são 2.20.1-5.3 e 2.25.2-6, respectivamente.
Questões
- Por que a mudança no formato do UUID e isso importa?
- Por que a mudança no formato de saída?
Responder1
DEVNAME é o alias do dispositivo, consulteNome de dispositivo persistente usando alias
Além disso, parece que agora o UUID deve estar em letras minúsculas pelos padrões internacionais.
DeTipo de caractere gerado pelo UUID
Para esclarecer, um UUID é na verdade um valor de 128 bits, não texto ou dígitos. Você poderia pensar neles como inteiros não assinados de 128 bits.
As últimas especificações internacionais datadas de 2008-08 afirmam (ênfase minha):
6.5.4 O software que gera a representação hexadecimal de um UUID não deve usar letras maiúsculas. NOTA – Recomenda-se que a representação hexadecimal utilizada em todos os formatos legíveis por humanos seja restrita a letras minúsculas. O software que processa esta representação é, no entanto, obrigado a aceitar letras maiúsculas e minúsculas, conforme especificado em 6.5.2.
Quanto à impressão do UUID e do alias/DEVNAME
Em util-linux/blkid.c é evidente que DEVNAME é impresso porque você está usando o-o export
} else if (ctl->output & OUTPUT_EXPORT_LIST) {
if (num == 1 && devname)
printf("DEVNAME=%s\n", devname);
Então eu suspeitei que sem -o export
ele só imprimiria o UUID, e de fato:
$blkid -s UUID /dev/sda2
/dev/sda2: UUID="67169dd7-f319-4402-a9b2-cebcf2f3657a"
$ blkid -o export -s UUID /dev/sda2
DEVNAME=/dev/sda2
UUID=67169dd7-f319-4402-a9b2-cebcf2f3657a