Vraag Hoe vind ik de UUID van een bestandssysteem


Ik run Ubuntu en wil de UUID van een bepaald bestandssysteem (geen partitie). Ik weet dat ik het kan gebruiken e2label /dev/sda1 om het bestandssysteemlabel te achterhalen, maar er lijkt geen vergelijkbare manier te zijn om het te vinden UUID.


114
2018-05-02 15:47


oorsprong


Bedankt voor alle antwoorden, ik weet zeker dat ik ze allemaal in verschillende omstandigheden zal gebruiken. - Brad Gilbert
Merk op dat de titel vroeger "Hoe vind ik de UUID van een partitie" is. Die vraag heeft alleen zin als u een GPT-partitietabel gebruikt. Hier is een antwoord op die vraag. - Alastair Irvine


antwoorden:


Een andere opdracht die mogelijk beschikbaar is en ook redelijk goed werkt, is 'blkid'. Het maakt deel uit van het e2fsprogs-pakket. Voorbeelden van het gebruik ervan:

Gegevens opzoeken op / dev / sda1:

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

Toon UUID-gegevens voor alle partities:

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

Toon UUID-gegevens voor alle partities in beter leesbare indeling: (Opmerking: in nieuwere releases, blkid -L heeft een andere betekenis, en blkid -o list moet in plaats daarvan worden gebruikt)

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

Laat alleen de UUID zien voor / dev / sda1 en niets anders:

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

144
2018-05-04 19:11



Op mijn Ubuntu-computer hoef ik geen sudo te gebruiken. - Brad Gilbert
Gewoon typen blkid, gaf me precies wat ik wilde, maar niet helemaal waar ik om vroeg. (Ik accepteer het hoe dan ook, omdat ik zeker ben dat ik het vaak zal gebruiken) - Brad Gilbert
Op nieuwere versies van Ubuntu is het equivalentcommando voor blkid -L is nu blkid -o list; de -L optie is gewijzigd in -L label om een ​​apparaat op te zoeken dat het opgegeven label gebruikt. - aculich
@aculich Ik heb het antwoord bijgewerkt met de recente syntaxis voor blkid. Bedankt voor het vermelden. - Christopher Cashell
Uitstekend, ik wist het nooit blkid; Ik heb het altijd gedaan ls -l /dev/disk/by-uuid. Op Gentoo, blkid is in sys-apps/util-linux - AdmiralNemo


Alleen voor GPT-partities

Op een GPT-geformatteerde schijf krijgt elke partitie een GUID toegewezen, wat een vorm van UUID is, hoewel waarschijnlijk niet waar de oorspronkelijke poster naar verwees. Daarom is dit antwoord waarschijnlijk minder nuttig voor de oorspronkelijke vragensteller. Toch vind ik dat er een belangrijk onderscheid moet worden opgemerkt.

Om de GUID van partitie 1 op GPT geformatteerde disk / dev / sda te krijgen, evenals zijn partitie-label en ga zo maar door:

sudo sgdisk -i 1 /dev/sda

of allemaal met:

ls -l /dev/disk/by-partuuid

Om op te starten met de root van het bestandssysteem dat zich op een bepaalde partitie bevindt, zou je de syntaxis van de syntaxis van de kernel van Linux gebruiken:

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

In dit geval kunt u alleen het begin van de UUID specificeren - genoeg om uniek te zijn. Deze parameter is primitiever en kan door de kernel eerder in het opstartproces worden begrepen.


Er is een verschil in semantiek tussen deze:

Een schijf bevat partities, een partitie bevat een bestandssysteem, een bestandssysteem bevat mappen en bestanden. Voor sommige opstellingen en besturingssystemen zijn er meer lagen.

De GUID UUID en het bijbehorende label verwijzen naar een partitie, maar niet naar de inhoud van de partitie. Een nieuwe partitie op dezelfde schijf of een partitie op een nieuwe schijf heeft een nieuwe GUID UUID. Dezelfde partitie kan het ene bestandssysteem de ene dag en de andere op een andere dag bevatten. Het bestaat alleen voor GPT-geformatteerde schijven, maar niet voor oudere gepartitioneerde schijven. Er is meestal geen nut meer dan specificeren root=/dev/sda1 of root=8:1.

De andere huidige antwoorden verwijzen naar de UUID van a bestandssysteem in een of andere partitie. Als het bestandssysteem als geheel naar een andere partitie of vaste schijf wordt gekopieerd, blijft die waarde ongewijzigd. Deze UUID is handig bij het vinden van een verplaatst bestandssysteem. Daarom is dit waarschijnlijk relevanter voor de meeste mensen. Linux kernel parameter root=UUID=87654321-4321-4321-a567-123456789012 verwijst hiernaar.

ik geloof root=LABEL= en root=UUID= worden geïmplementeerd door de vroege gebruikersruimte, de init-code die ik laatst op mijn systeem zag, vertaalde deze parameters naar / dev / disk / by-uuid en / dev / disk / by-label (links die volgens mij zijn gemaakt door udev in gebruikersruimte op mijn systeem).

[1] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/init/do_mounts.c#n183


9
2018-06-23 21:55



Correct gebruik lijkt te zijn -i1 of -i 1, in tegenstelling tot -i:1, met sgdisk 1.0.1. - Charles Duffy
@CharlesDuffy Bedankt voor het vinden van die fout. Ik heb het antwoord bewerkt om het te corrigeren. - John S Gruber


De gemakkelijkste manier om dit te doen voor ext2 / ext3 / ext4 is:

/sbin/tune2fs -l /dev/sda1

5
2018-05-02 15:57



Dit werkt als je bestandssysteem is geformatteerd als ext2, ext3 of ext4. De meeste bestandssystemen zijn een van deze, maar niet allemaal. Het zal ook niet werken voor ruilpartities. Zie mijn antwoord voor een universele manier. - Hamish Downer
Dit resulteert in mijn zaak Couldn't find valid filesystem superblock. - Michel


De aanbevolen manier om dit te doen is om te doen

sudo vol_id -u /dev/sda2

Zie voor meer informatie over het gebruik van UUID's Dit artikel (van ubuntu help, maar zou moeten werken voor elke linux distro met behulp van UUID's).

Zoals opgemerkt in opmerkingen bij deze vraag, is vol_id misschien niet op jouw pad. Op ubuntu is het in / sbin dus het bovenstaande werkt. Voor fedora lijkt dit nodig te zijn

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

Als andere distributies vol_id op andere plaatsen hebben, plaats dan een opmerking en ik voeg deze toe aan dit antwoord.


3
2018-05-02 16:53



Dit werkt niet op mijn Fedora 10-laptop. - Eddie
Dit is een veel betere oplossing dan de mijne. Eddie, vol_id bevindt zich in / lib / udev. mish, kun je je antwoord bewerken om het volledige pad vóór vol_id te plaatsen? / lib / udev bevindt zich standaard niet in het pad van de root op een distributie waarvan ik me bewust ben. - Mihai Limbăşan
"/ lib / udev / vol_id / dev / sda2" lijkt te werken. Weinig mensen zullen / lib / udev op hun pad hebben. - Eddie
Op mijn Ubuntu-computer is er een symbolische koppeling van /sbin/vol_id naar /lib/udev/vol_id - Brad Gilbert
vol_id is gedropt van Ubuntu vanaf Karmic (9.10) en is dus niet meer nuttig of relevant. Het ging door veel contorties om daar te komen als vol_id was op een gegeven moment gebouwd om te vervangen blkid. - Alain O'Dea


Ervan uitgaande dat u de UUID voor sda1 wilt, kunt u zoiets als dit proberen:

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

Pas sda1 dienovereenkomstig aan. Om de UUID's voor alle partities te krijgen, laat je de greps en cuts vallen, a la:

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

Voorbeelduitvoer voor sda1 op mijn bureaublad:

[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

Bewerken: houd er rekening mee dat deze oplossing, hoewel meer gekunsteld dan de udev-> vol_id, dat wel doet niet root-rechten nodig hebben, zullen werken op elke kernel van na 2005 of zo, en vertrouwt op tools die aanwezig zijn in elke Linux-distributie die standaard in het pad voor elke gebruiker zijn.


2
2018-05-02 16:22



Dit werkt op elke computer die recent genoeg devfs draait. - Eddie


Dit lijkt voor mij te werken:

sudo dumpe2fs /dev/sda1 | grep UUID

2
2017-09-18 21:08





U kunt dit ook gebruiken om alle UUID's af te drukken:

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

of dit betwistbaar eenvoudiger commando, vervangen sda1 met het apparaat waarop u wilt zoeken:

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

een aanpassing van de tweede methode om alle UUID's af te drukken:

find /dev/disk/by-uuid -type l -exec sh -c 'basename $(readlink {}); basename {}; echo' \;

1
2017-11-30 23:09





De script-schone manier om dit te doen en werkt op elk type bestandssysteem is:

lsblk -no UUID <device-containing-FS>

Of, gezien het mountpoint (of een bestand erin):

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

De uitvoer is de UUID, de hele UUID en niets dan de UUID.


1
2017-12-30 13:29





U kunt het volgende gebruiken om de UUID voor een bepaald station te krijgen,

sudo vol_id -u /dev/sda1

of je kunt dit gebruiken om alle UUID's voor de aangesloten media op te sommen,

ls /dev/disk/by-uuid

0
2018-05-02 17:24



Niet meer van toepassing vanaf Ubuntu 9.10 as vol_id is verwijderd. - Alain O'Dea