Sto eseguendo Ubuntu e voglio scoprire il UUID
file system specifico (non la partizione). So che posso usare e2label /dev/sda1
per scoprire l'etichetta del filesystem, ma non sembra esserci un modo simile per trovare il file UUID
.
Sto eseguendo Ubuntu e voglio scoprire il UUID
file system specifico (non la partizione). So che posso usare e2label /dev/sda1
per scoprire l'etichetta del filesystem, ma non sembra esserci un modo simile per trovare il file UUID
.
Risposte:
Un altro comando che potrebbe essere disponibile e funziona anche abbastanza bene per questo è 'blkid'. Fa parte del pacchetto e2fsprogs. Esempi di utilizzo:
Cerca i dati su / dev / sda1:
topher@crucible:~$ sudo blkid /dev/sda1
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
Mostra i dati UUID per tutte le partizioni:
topher@crucible:~$ sudo blkid
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
/dev/sdb: UUID="467c4aa9-963d-4467-8cd0-d58caaacaff4" TYPE="ext3"
Mostra i dati UUID per tutte le partizioni in un formato di più facile lettura: (Nota: nelle versioni più recenti, blkid -L
ha un significato diverso e blkid -o list
dovrebbe essere usato invece)
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
Mostra solo l'UUID per / dev / sda1 e nient'altro:
topher@crucible:~$ sudo blkid -s UUID -o value /dev/sda1
727cac18-044b-4504-87f1-a5aefa774bda
blkid
, mi ha ottenuto esattamente quello che volevo, ma non proprio quello che ho chiesto. (Lo accetto comunque, perché sono sicuro che lo userò spesso)
blkid -L
è ora blkid -o list
; l' -L
opzione è stata modificata per -L label
cercare un dispositivo che utilizza l'etichetta specificata.
blkid
. Grazie per averlo menzionato.
blkid
; L'ho sempre fatto ls -l /dev/disk/by-uuid
. Su Gentoo, blkid
è insys-apps/util-linux
Solo per dischi partizionati GPT
Su un disco formattato GPT a ciascuna partizione è assegnato un GUID, che è una forma di UUID, anche se probabilmente non a cui si riferiva il poster originale. Pertanto questa risposta è probabilmente meno utile all'interrogatore originale. Tuttavia credo che ci sia una distinzione importante da notare.
Per ottenere il GUID della partizione 1 su disco / dev / sda formattato GPT, nonché l'etichetta della partizione e così via:
sudo sgdisk -i 1 /dev/sda
o tutti con:
ls -l /dev/disk/by-partuuid
Per fare il boot con il root del file system su una certa partizione dovresti usare la sintassi del parametro del kernel linux di:
root=PARTUUID=87654321-4321-4321-abcd-123456789012
In questo caso puoi specificare solo l'inizio dell'UUID - abbastanza per essere unico. Questo parametro è più primitivo e può essere compreso dal kernel in precedenza nel suo processo di avvio.
C'è una differenza nella semantica tra questi:
Un disco contiene partizioni, una partizione contiene un file system, un file system contiene directory e file. Per alcuni setup e sistemi operativi ci sono più livelli.
L'UUID GUID e l'etichetta associata si riferiscono a una partizione, ma non al contenuto della partizione. Una nuova partizione sullo stesso disco o una partizione su un nuovo disco avranno un nuovo UUID GUID. La stessa partizione potrebbe contenere un file system un giorno e l'altro in un giorno diverso. Esiste solo per dischi formattati GPT, ma non per dischi partizionati legacy. Di solito non c'è più utilità qui che specificare root=/dev/sda1
o root=8:1
.
Le altre risposte correnti si riferiscono all'UUID di un file system in alcune partizioni contenenti. Se il file system viene copiato, nel suo insieme, in un'altra partizione o disco rigido, tale valore rimane invariato. Questo UUID è utile per trovare un file system spostato. Pertanto, questo è probabilmente più pertinente per la maggior parte delle persone. Il parametro del kernel Linux root=UUID=87654321-4321-4321-a567-123456789012
fa riferimento a questo.
Credo root=LABEL=
e root=UUID=
sono implementati dai primi utenti, il codice di inizializzazione che ho visto l'altro giorno sul mio sistema ha tradotto questi parametri in / dev / disk / by-uuid e / dev / disk / by-label (i collegamenti che credo siano creati da udev in userspace sul mio sistema).
[1] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/init/do_mounts.c#n183
-i1
o -i 1
, al contrario -i:1
, con sgdisk 1.0.1.
Il modo più pulito per fare ciò che funziona su qualsiasi tipo di filesystem è:
lsblk -no UUID <device-containing-FS>
Oppure, dato il mountpoint (o qualsiasi file al suo interno):
lsblk -no UUID $(df -P <file> | awk 'END{print $1}')
L'output è l'UUID, l'intero UUID e nient'altro che l'UUID.
blkid
nella risposta di @ christopher-cashell, perché non è necessario diventare root. Per un punto di montaggio o un file di meglio a fare: lsblk -no UUID $(findmnt -n -o SOURCE --target <file>)
.
findmnt -n -o SOURCE --target ~
dà:/dev/mapper/vg_svelte-home[/@home]
lsblk -no UUID $(findmnt -n -o SOURCE --target <file> | cut -d[ -f1)
dovrebbe sbarazzarsi del sottovolume quando presente.
Il modo più semplice per farlo per ext2 / ext3 / ext4 è:
/sbin/tune2fs -l /dev/sda1
Couldn't find valid filesystem superblock.
Il modo consigliato per farlo è quello di farlo
sudo vol_id -u /dev/sda2
Per ulteriori informazioni sull'uso degli UUID, consultare questo articolo (dalla guida di Ubuntu, ma dovrebbe funzionare per qualsiasi distro linux che utilizza gli UUID).
Come notato nei commenti a questa domanda, vol_id potrebbe non essere sul tuo percorso. Su Ubuntu è in / sbin, quindi quanto sopra funzionerà. Per fedora sembra aver bisogno
sudo /lib/udev/vol_id -u /dev/sda2
Se altre distribuzioni hanno vol_id in altri posti, pubblica un commento e lo aggiungerò a questa risposta.
/sbin/vol_id
a/lib/udev/vol_id
Questo sembra funzionare per me:
sudo dumpe2fs /dev/sda1 | grep UUID
Supponendo che desideri l'UUID per sda1, potresti provare qualcosa del genere:
for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" | grep ../sda1 | cut -d\: -f2 | cut -d/ -f5 ; done
Regola sda1 di conseguenza. Per ottenere gli UUID per tutte le partizioni, rilascia greps e tagli, alla:
for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" ; done
Output di esempio per sda1 sul mio desktop:
[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
Modifica: Notare che questa soluzione, sebbene più elaborata di quella udev-> vol_id, non richiede i privilegi di root, funzionerà su qualsiasi kernel post-2005 o giù di lì e si basa su strumenti presenti in qualsiasi distribuzione Linux che sono di default in il percorso per qualsiasi utente.
Puoi anche usarlo per stampare tutti gli UUID:
for disk in /dev/disk/by-uuid/*; do
basename "$(readlink "$disk")"
basename "$disk"
echo
done
o questo comando probabilmente più semplice, sostituendolo sda1
con il dispositivo che si desidera cercare:
disk=sda1
find /dev/disk/by-uuid -type l -exec sh -c "readlink {} | grep -o $disk && basename {}" \;
un adattamento del secondo metodo per stampare tutti gli UUID:
find /dev/disk/by-uuid -type l -exec sh -c 'basename $(readlink {}); basename {}; echo' \;
ls -l /dev/disk/by-uuid | grep `lsblk | grep "/" | awk '{print $1}'` | awk '{print $9}'
Quanto sopra sembra funzionare sulla maggior parte dei sistemi Linux (tutto quello che ho trovato) per molti anni. Potrebbe avere dei difetti, non lo so. Preferirei ottenere il numero seriale ma ... questo è l'UUID del filesystem di root.
Se qualcuno ha un modo per ottenere il numero seriale senza la necessità di essere root (come lo è il mio) e non installare pacchetti "insoliti" che sono diversi nelle diverse versioni di Unix, lo apprezzerei - sempre può imparare qualcosa. E sono consapevole che sto mescolando cose: è l'UUID del file system radice, non un disco.
Lo scopo, BTW, è quello di generare un numero univoco per macchina che non può essere modificato (come un numero di serie del disco e come gli indirizzi MAC una volta erano molto tempo fa).
Viene utilizzato per la codifica del software su una singola macchina. L'indirizzo MAC andava bene fino a quando non permettevano loro di essere virtuali ... alcuni clienti squallidi hanno semplicemente impostato il loro indirizzo MAC su una costante (su reti diverse ovviamente) ed evitato di pagarmi.
In AIX c'è una sola chiamata per ottenere un numero che identifica la macchina. Non importa se si verificano modifiche hardware o aggiornamenti software, quindi non ho idea di come lo facciano ... Se la scheda madre cambia, quindi il numero cambia, quindi penso che lo nascondano lì. E questo è oltre il raro.
Puoi utilizzare quanto segue per ottenere l'UUID per una determinata unità,
sudo vol_id -u /dev/sda1
oppure puoi utilizzarlo per elencare tutti gli UUID per il supporto collegato,
ls /dev/disk/by-uuid