Estou executando o Ubuntu e quero descobrir o UUID
de um determinado sistema de arquivos (não partição). Eu sei que posso usar e2label /dev/sda1
para descobrir o rótulo do sistema de arquivos, mas não parece haver uma maneira semelhante de encontrar o arquivo UUID
.
Outro comando que pode estar disponível e também funciona muito bem para isso é o 'blkid'. Faz parte do pacote e2fsprogs. Exemplos de seu uso:
Procure dados em /dev/sda1:
Mostrar dados UUID para todas as partições:
Mostrar dados UUID para todas as partições em um formato mais fácil de ler: (Nota: em versões mais recentes,
blkid -L
tem um significado diferente eblkid -o list
deve ser usado)Mostre apenas o UUID para /dev/sda1 e nada mais:
Apenas para discos particionados GPT
Em um disco formatado em GPT, cada partição recebe um GUID, que é uma forma de UUID, embora provavelmente não seja o que o pôster original estava se referindo. Portanto, esta resposta é provavelmente menos útil para o questionador original. No entanto, acredito que há uma distinção importante a ser notada.
Para obter o GUID da partição 1 no disco formatado em GPT /dev/sda, bem como seu rótulo de partição e assim por diante:
ou todos com:
Para inicializar com a raiz do sistema de arquivos em uma determinada partição, você usaria a sintaxe de parâmetro do kernel linux de:
Nesse caso, você pode especificar apenas o início do UUID - o suficiente para ser exclusivo. Este parâmetro é mais primitivo e pode ser entendido pelo kernel mais cedo em seu processo de inicialização.
Há uma diferença na semântica entre estes:
Um disco contém partições, uma partição contém um sistema de arquivos, um sistema de arquivos contém diretórios e arquivos. Para algumas configurações e sistemas operacionais, existem mais camadas.
O GUID UUID e o rótulo associado referem-se a uma partição, mas não ao conteúdo da partição. Uma nova partição no mesmo disco ou uma partição em um novo disco terá um novo GUID UUID. A mesma partição pode conter um sistema de arquivos em um dia e outro em um dia diferente. Ele existe apenas para discos formatados em GPT, mas não para discos particionados herdados. Geralmente não há mais utilidade aqui do que especificar
root=/dev/sda1
ouroot=8:1
.As outras respostas atuais referem-se ao UUID de um sistema de arquivos em alguma partição contendo. Se o sistema de arquivos for copiado, como um todo, para outra partição ou disco rígido, esse valor permanecerá o mesmo. Este UUID é útil para localizar um sistema de arquivos movido. Portanto, isso é provavelmente mais pertinente para a maioria das pessoas. O parâmetro do kernel do Linux
root=UUID=87654321-4321-4321-a567-123456789012
se refere a isso.Acredito
root=LABEL=
eroot=UUID=
são implementados pelo userspace inicial, o código init que vi outro dia no meu sistema traduziu esses parâmetros para /dev/disk/by-uuid e /dev/disk/by-label (os links que acredito são criados pelo udev em userspace no meu sistema).[1] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/init/do_mounts.c#n183
A maneira limpa de script de fazer isso, que funciona em qualquer tipo de sistema de arquivos, é:
Ou, dado o ponto de montagem (ou qualquer arquivo dentro dele):
A saída é o UUID, todo o UUID e nada além do UUID.
A maneira mais fácil de fazer isso para ext2/ext3/ext4 é:
A maneira recomendada de fazer isso é fazer
Para saber mais sobre o uso de UUIDs, consulte este artigo (da ajuda do Ubuntu, mas deve funcionar para qualquer distribuição linux usando UUIDs).
Conforme observado nos comentários a esta pergunta, vol_id pode não estar no seu caminho. No Ubuntu, está em /sbin, então o acima funcionará. Para o fedora parece ser necessário
Se outras distribuições tiverem vol_id em outros lugares, poste um comentário e eu o adicionarei a esta resposta.
Isso parece funcionar para mim:
Supondo que você queira o UUID para sda1, você pode tentar algo assim:
Ajuste sda1 de acordo. Para obter os UUIDs para todas as partições, solte os greps e cortes, a la:
Saída de amostra para sda1 na minha área de trabalho:
Edit: Por favor, note que esta solução, embora mais elaborada que a udev->vol_id, não requer privilégios de root, funcionará em qualquer kernel pós-2005 ou mais, e depende de ferramentas presentes em qualquer distribuição Linux que são por padrão em o caminho para qualquer usuário.
Você também pode usar isso para imprimir todos os UUIDs:
ou este comando indiscutivelmente mais simples, substituindo
sda1
pelo dispositivo que você deseja pesquisar:uma adaptação do segundo método para imprimir todos os UUIDs:
O acima parece funcionar na maioria dos sistemas Linux (todos que encontrei) ao longo de muitos anos. Pode ter falhas, não sei. Eu preferiria obter o número de série, mas ... este é o UUID do sistema de arquivos raiz.
Se alguém tiver uma maneira de obter o número de série sem precisar ser root (como o meu é) e não instalar pacotes "incomuns" que são diferentes em diferentes versões do Unix eu agradeceria - sempre pode aprender alguma coisa. E estou ciente de que estou misturando coisas - o UUID do sistema de arquivos raiz, não um disco.
O objetivo, BTW, é gerar um número único por máquina que não pode ser modificado (como um número de série de disco e como endereços MAC já foram há muito tempo).
É usado para codificação de software para uma única máquina. O endereço MAC estava bom até que eles permitiram que eles fossem virtuais ... alguns clientes desprezíveis simplesmente definiram seu endereço MAC para uma constante (em redes diferentes, é claro) e evitaram me pagar.
No AIX há uma única chamada para obter um número que identifica a máquina. Ele não se importa se as mudanças de hardware ou atualizações de software ocorrem, então eu não tenho idéia de como eles fazem isso ... Se a placa-mãe mudar, então o número muda, então eu acho que eles escondem lá. E isso é além de raro.
A maneira mais simples e melhor de encontrar o UUID de um sistema de arquivos