Como encontro o UUID de um sistema de arquivos?

117

Estou executando o Ubuntu e quero descobrir o UUID de um determinado sistema de arquivos (não a 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 UUID .

    
por Brad Gilbert 02.05.2009 / 17:47

10 respostas

147

Outro comando que pode estar disponível e também funciona muito bem para isso é 'blkid'. Faz parte do pacote e2fsprogs. Exemplos de uso:

Pesquisar dados em / dev / sda1:

topher@crucible:~$ sudo blkid /dev/sda1
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"

Mostrar dados do UUID para todas as partições:

topher@crucible:~$ sudo blkid
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
/dev/sdb: UUID="467c4aa9-963d-4467-8cd0-d58caaacaff4" TYPE="ext3"

Mostrar dados UUID para todas as partições em formato de leitura mais fácil: (Nota: nos lançamentos mais recentes, blkid -L tem um significado diferente e blkid -o list deve ser usado)

topher@crucible:~$ sudo blkid -L
device     fs_type label    mount point    UUID
-------------------------------------------------------------------------------
/dev/sda1 ext3             /              727cac18-044b-4504-87f1-a5aefa774bda
/dev/sdc  ext3             /home          467c4aa9-963d-4467-8cd0-d58caaacaff4

Mostre apenas o UUID para / dev / sda1 e nada mais:

topher@crucible:~$ sudo blkid -s UUID -o value /dev/sda1
727cac18-044b-4504-87f1-a5aefa774bda
    
por 04.05.2009 / 21:11
9

Somente para discos particionados da GPT

Em um disco formatado da GPT, a cada partição é atribuído um GUID, que é uma forma de UUID, embora provavelmente não seja a 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 / dev / sda formatado pela GPT, bem como seu rótulo de partição e assim por diante:

sudo sgdisk -i 1 /dev/sda

ou todos com:

ls -l /dev/disk/by-partuuid

Para inicializar com a raiz do sistema de arquivos em uma determinada partição, você usaria a sintaxe do parâmetro do kernel do Linux:

root=PARTUUID=87654321-4321-4321-abcd-123456789012

Nesse caso, você pode especificar apenas o início do UUID - o suficiente para ser exclusivo. Esse parâmetro é mais primitivo e pode ser entendido pelo kernel anteriormente em seu processo de inicialização.

Há uma diferença na semântica entre eles:

Um disco contém partições, uma partição mantém um sistema de arquivos, um sistema de arquivos contém diretórios e arquivos. Para alguns set-ups e sistemas operacionais, há mais camadas.

O UUID do GUID 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 UUID de GUID. A mesma partição pode conter um sistema de arquivos um dia e outro em um dia diferente. Ele existe somente para discos formatados em GPT, mas não para discos particionados legados. Geralmente não há mais utilidade aqui do que especificar root=/dev/sda1 ou root=8:1 .

As outras respostas atuais referem-se ao UUID de um sistema de arquivos em alguma partição que contém. 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 encontrar um sistema de arquivos movido. Portanto, isso é provavelmente mais pertinente para a maioria das pessoas. Parâmetro do kernel Linux root=UUID=87654321-4321-4321-a567-123456789012 refere-se a isso.

Acredito que root=LABEL= e root=UUID= são implementados pelo early userspace, o código init que vi no outro dia no meu sistema traduziu esses parâmetros para / dev / disk / by-uuid e / dev / disk / by-label (links acredito que são criados pelo udev no userspace no meu sistema).

[1] link

    
por 23.06.2014 / 23:55
5

A maneira mais fácil de fazer isso para o ext2 / ext3 / ext4 é:

/sbin/tune2fs -l /dev/sda1
    
por 02.05.2009 / 17:57
3

A maneira recomendada de fazer isso é fazer

sudo vol_id -u /dev/sda2

Para saber mais sobre o uso de UUIDs, consulte este artigo (da ajuda do ubuntu, mas deve funcionar para qualquer distribuição do Linux usando UUIDs ).

Como observado nos comentários a esta questão, o vol_id pode não estar no seu caminho. No ubuntu está em / sbin, então o acima irá funcionar. Para o fedora parece precisar

sudo /lib/udev/vol_id -u /dev/sda2

Se outras distribuições tiverem vol_id em outros lugares, publique um comentário e adicioná-lo a essa resposta.

    
por 02.05.2009 / 18:53
2

Supondo que você deseja o UUID para sda1, pode tentar algo assim:

for v in /dev/disk/by-uuid/* ; do echo "'readlink $v': $v" | grep ../sda1 | cut -d\: -f2 | cut -d/ -f5 ; done

Ajuste sda1 de acordo. Para obter os UUIDs para todas as partições, solte os greps e cuts, a la:

for v in /dev/disk/by-uuid/* ; do echo "'readlink $v': $v" ; done

Exemplo de saída para sda1 na minha área de trabalho:

[mihailim@home ~]$ for v in /dev/disk/by-uuid/* ; do echo "'readlink $v': $v" | grep ../sdb3 | cut -d\: -f2 | cut -d/ -f5 ; done
dc8c49f1-e2dc-46bc-ba02-013f26c85f70

Editar: Por favor note que esta solução, embora mais artificial do que a udev- > vol_id, não requer privilégios de root, funcionará em qualquer kernel posterior a 2005, e depende de ferramentas presentes em qualquer distribuição Linux que são, por padrão, no caminho para qualquer usuário.

    
por 02.05.2009 / 18:22
2

Isso parece funcionar para mim:

sudo dumpe2fs /dev/sda1 | grep UUID
    
por 18.09.2014 / 23:08
2

A maneira limpa de fazer isso, que funciona em qualquer tipo de sistema de arquivos, é:

lsblk -no UUID <device-containing-FS>

Ou, dado o ponto de montagem (ou qualquer arquivo dentro dele):

lsblk -no UUID $(df -P <file> | awk 'END{print $1}')

A saída é o UUID, o UUID inteiro e nada além do UUID.

    
por 30.12.2017 / 14:29
1

Você também pode usar isso para imprimir todos os UUIDs:

for disk in /dev/disk/by-uuid/*; do 
    basename "$(readlink "$disk")"
    basename "$disk"
    echo
done

ou este comando possivelmente mais simples, substituindo sda1 pelo dispositivo que você deseja pesquisar:

disk=sda1
find /dev/disk/by-uuid -type l -exec sh -c "readlink {} | grep -o $disk && basename {}" \;

uma adaptação do segundo método para imprimir todos os UUIDs:

find /dev/disk/by-uuid -type l -exec sh -c 'basename $(readlink {}); basename {}; echo' \;
    
por 01.12.2013 / 00:09
0

Você pode usar o seguinte para obter o UUID para uma determinada unidade,

sudo vol_id -u /dev/sda1

ou você pode usar isso para listar todos os UUIDs da mídia anexada,

ls /dev/disk/by-uuid
    
por 02.05.2009 / 19:24
0
ls -l /dev/disk/by-uuid | grep 'lsblk | grep "/" | awk '{print $1}'' | awk '{print $9}'

O acima parece funcionar na maioria dos sistemas Linux (todos que eu 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 versões diferentes do Unix, eu agradeceria - sempre pode aprender alguma coisa. E estou ciente de que estou misturando coisas - o é o sistema de arquivos raiz UUID, não um disco.

O objetivo, BTW, é gerar um número único por máquina que não possa ser modificado (como um número de série de disco e, como os endereços MAC, já foram há muito tempo).

É usado para codificar software em uma única máquina. O endereço MAC estava bom até que eles permitissem que eles fossem virtuais ... alguns clientes desprezíveis simplesmente configuravam seu endereço MAC para uma constante (em redes diferentes, é claro) e evitavam 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 ocorrerem, 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 a escondem lá. E isso é além de raro.

    
por 24.03.2017 / 02:11