O maldito UUID…

UUID é um longo e esquisito número em notação hexadecimal, documentado pelas normas  ISO/IEC 11578:1996, ITU-T Rec. X.667, ISO/IEC 9834-8:2005 e RFC 4122 que serve como identificador padrão  universal. Seu motivo de existência foi a necessidade de resolver problemas de identificação em sistemas distribuídos de forma que não houvesse uma coordenação centralizada, mas na prática ele é apenas um número genérico que pode ser usado para identificar qualquer coisa e o resultado disso é que ele serve também para atrapalhar a vida de quem apenas quer usar o sistema.

Dito isto vem o causo: Certa vez eu formatei uma partição de dados no meu PC e tudo ia muito bem: Desmontei a partição, formatei, montei denovo, restaurei os dados … tudo OK como disse, até que precisei rebootar a máquina e o sistema resolveu não montar mais a partição que estava bonitinha no meu /etc/fstab e minutos antes estava funcionando.

Algum tempo antes já tinha percebido que no Ubuntu, em especial, este arquivo deixou de usar o tradicional /dev/sdxx em favor do UUID e lembrei também que ao executar o mkreiserfs, para formatar minha partição, o maldito comando havia mostrado em algum momento um número macabro deste que eu não dei a minima importância.

Como eu sabia que colocar o bom o velho /dev/sdxx no arquivo /etc/fstab ia resolver o problema, eu assim o fiz e pronto, assunto resolvido. Mas minha preocupação despertou meu instinto de curiosidade quando descobri que o /boot/grub/menu.lst (arquivo de configuração do gerenciador de boot) também usava este maldito número. E se eu tivesse formatado o meu /boot ou mesmo o / que são partições separadas no meu sistema? Após o boot o SO não iniciaria e eu iria demorar um bom tempo tentando resolver  o problema.

Veja o exemplo de uma seção em meu menu.lst:

title        Ubuntu 9.04, kernel 2.6.28-12-generic
uuid        02c0092a-0daf-4289-a3be-2e853f1e12eb
kernel        /vmlinuz-2.6.28-12-generic root=UUID=74f6255e-416f-4ea2-a814-049f1f2f1c41 ro locale=pt_BR quiet splash
initrd        /initrd.img-2.6.28-12-generic
quiet

Só a título de curiosidade (você pode vir a precisar saber disso) o identificador na linha “uuid” corresponde ao da sua partição “/boot” e o identificador na linha “kernel” é o da sua partição “/” (acredito que se você tiver apenas uma partição “/” ambos os valores serão os mesmos).

Eu fiquei encucado com o fato e saí a procura de uma solução, já que não acreditava que seria necessário formatar a partição novamente para ter o tal identificador da minha partição. Para resumir o assunto, eu usei os comandos apropos e whatis que existem em qualquer linha de comandos Linux e que servem para fazer buscas nas famosas páginas de manual. Com isso eu cheguei aos comandos vol_id e blkid e que podem retornar os identificadores de cada partição.

Basicamente a diferença entre eles é que o vol_id retorna mais informações do que o blkid, além de exigir privilégios administrativos para ser executado (você precisa da senha de root), mas para o nosso propósito que é apenas descobrir o número amos fazem a função.

No meu sistema, a saída do vol_id é algo assim:

wbraga@welingtondesktop:~$ sudo vol_id /dev/sda2
ID_FS_USAGE=filesystem
ID_FS_TYPE=ext3
ID_FS_VERSION=1.0
ID_FS_UUID=02c0092a-0daf-4289-a3be-2e853f1e12eb
ID_FS_UUID_ENC=02c0092a-0daf-4289-a3be-2e853f1e12eb
ID_FS_LABEL=
ID_FS_LABEL_ENC=
wbraga@welingtondesktop:~$

Não vou detalhar o que é cada linha que o comando retornou, já que acredito serem bem autoexplicativas, além do mais um man vol_id poderá ajudar nisso também. Eu poderia ainda ter usado o parâmetro “–uuid” para exibir aenas a informação que me interessa:

wbraga@welingtondesktop:~$ sudo vol_id –uuid /dev/sda2
02c0092a-0daf-4289-a3be-2e853f1e12eb
wbraga@welingtondesktop:~$

No caso do blkid, que não precisa de privilégios administrativos ainda há uma outra facilidade que é aproveitar o recurso de expansão do bash, onde você usa uma “quase expressão regular” para retornar o resultado de um comando referente a vários objetos do seu sistema:

wbraga@welingtondesktop:~$ blkid /dev/sda[1-9]
/dev/sda1: UUID=”DA302D13302CF861″ TYPE=”ntfs”
/dev/sda2: UUID=”02c0092a-0daf-4289-a3be-2e853f1e12eb” TYPE=”ext3″
/dev/sda5: UUID=”92e7fee9-cbd7-469c-87bc-4f1fc1d41614″ TYPE=”swap”
wbraga@welingtondesktop:~$

Desta forma todas as partições iniciando em sda1 até sda9 – se existirem – serão retornadas. Se ao invés de blkid /dev/sda[1-9] eu tivesse usado blkid /dev/sda2 só veria o UUID daquela partição. Independente de qual modo você escolher sabendo os malditos números basta colocá-los em seu aquivo /boot/grub/menu.lst e no seu /etc/fstab e pronto!

7 comentários em “O maldito UUID…”

  1. Pingback: Welington via Rec6
  2. Caro braga entendo o seu descontentamento em relação ao ocorrido, porem a ideia do uso do UUID é causado pela necessidade de se fazer a troca do dispositivo seja ele HD, SCSI ou SATA, evitando o travamento do sistema no caso da troca do dispositivo, ou seja, se por ventura trocasse de CANAL (SCSI OU SATA) ou de IDE (0 ou 1) o sistema funcionará perfeitamente sem a necessidade da troca do sda para o sdb ou o valor LUN do SCSI.

  3. Valeu @Alexandre ,

    Apesar do tom ironico do texto não fiquei descontente com o ocorrido (embora tenha ficado bastante apreensivo). Pelo contrário, fiquei muito feliz em saber que há uma maneira universal de identificar os meus dispositivos sem ter que me preocupar com a ordem em que o kernel o detecta.

    De qualquer forma seria muito legal que este recurso você melhor divulgado, ou exibido em algum lugar nos ambientes gráficos (como nas propriedades do dispositivo ou algo assim). Da mesma forma ter uma ferramenta para fazer esta migração automática seria muito bem vinda (hummm gostei da minha ideia… quem sabe nas próximas férias).

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.