Używam Ubuntu i chcę dowiedzieć się UUID
o konkretnym systemie plików (nie partycji). Wiem, że mogę użyć e2label /dev/sda1
etykiety systemu plików, ale wydaje się, że nie ma podobnego sposobu na znalezienie UUID
.
Używam Ubuntu i chcę dowiedzieć się UUID
o konkretnym systemie plików (nie partycji). Wiem, że mogę użyć e2label /dev/sda1
etykiety systemu plików, ale wydaje się, że nie ma podobnego sposobu na znalezienie UUID
.
Odpowiedzi:
Kolejnym poleceniem, które może być dostępne i działa całkiem dobrze, jest „blkid”. Jest to część pakietu e2fsprogs. Przykłady jego użycia:
Wyszukaj dane w / dev / sda1:
topher@crucible:~$ sudo blkid /dev/sda1
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
Pokaż dane UUID dla wszystkich partycji:
topher@crucible:~$ sudo blkid
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
/dev/sdb: UUID="467c4aa9-963d-4467-8cd0-d58caaacaff4" TYPE="ext3"
Pokaż dane UUID dla wszystkich partycji w łatwiejszym do odczytania formacie: (Uwaga: w nowszych wersjach blkid -L
ma inne znaczenie i blkid -o list
należy go użyć)
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
Pokaż tylko UUID dla / dev / sda1 i nic więcej:
topher@crucible:~$ sudo blkid -s UUID -o value /dev/sda1
727cac18-044b-4504-87f1-a5aefa774bda
blkid
, dostałem dokładnie to, czego chciałem, ale nie do końca to, o co prosiłem. (I tak to akceptuję, bo jestem pewien, że będę go często używać)
blkid -L
jest teraz równoważne blkid -o list
; -L
opcja została zmieniona, aby -L label
zajrzeć do urządzenia, które wykorzystuje określonego etykietę.
blkid
. Dzięki, że o tym wspomniałeś.
blkid
; Zawsze to robiłem ls -l /dev/disk/by-uuid
. Na Gentoo blkid
jest wsys-apps/util-linux
Tylko dla dysków partycjonowanych GPT
Na dysku sformatowanym GPT każdej partycji przypisany jest identyfikator GUID, który jest formą UUID, choć prawdopodobnie nie do tego, do którego odnosi się oryginalny plakat. Dlatego odpowiedź ta jest prawdopodobnie mniej pomocna dla pierwotnego pytającego. Niemniej jednak uważam, że należy zauważyć istotne rozróżnienie.
Aby uzyskać identyfikator GUID partycji 1 na dysku / dev / sda w formacie GPT, a także etykietę partycji i tak dalej:
sudo sgdisk -i 1 /dev/sda
lub wszystkie z:
ls -l /dev/disk/by-partuuid
Aby uruchomić system z systemem plików znajdującym się na określonej partycji, należy użyć składni parametru jądra linux:
root=PARTUUID=87654321-4321-4321-abcd-123456789012
W takim przypadku możesz podać tylko początek UUID - wystarczy, aby być unikalnym. Ten parametr jest bardziej prymitywny i może być zrozumiany przez jądro wcześniej w procesie uruchamiania.
Istnieje różnica w semantyce między nimi:
Dysk zawiera partycje, partycja zawiera system plików, system plików zawiera katalogi i pliki. W przypadku niektórych konfiguracji i systemów operacyjnych jest więcej warstw.
Identyfikator UUID GUID i powiązana etykieta odnoszą się do partycji, ale nie do jej zawartości. Nowa partycja na tym samym dysku lub partycja na nowym dysku będzie miała nowy identyfikator GUID UUID. Ta sama partycja może pomieścić jeden system plików jednego dnia, a drugi w innym dniu. Istnieje tylko dla dysków sformatowanych GPT, ale nie dla starszych dysków partycjonowanych. Zwykle nie ma tu więcej narzędzi niż określenie root=/dev/sda1
lub root=8:1
.
Pozostałe aktualne odpowiedzi odnoszą się do UUID systemu plików w niektórych partycjach zawierających. Jeśli system plików zostanie skopiowany jako całość na inną partycję lub dysk twardy, ta wartość pozostanie taka sama. Ten identyfikator UUID jest przydatny do znajdowania przeniesionego systemu plików. Dlatego jest to prawdopodobnie bardziej odpowiednie dla większości ludzi. root=UUID=87654321-4321-4321-a567-123456789012
Odnosi się do tego parametr jądra Linux .
Wierzę root=LABEL=
i root=UUID=
są wdrażane przez wczesną przestrzeń użytkownika, kod init, który widziałem innego dnia w moim systemie, przetłumaczył te parametry na / dev / disk / by-uuid i / dev / disk / by-label (linki, które moim zdaniem są tworzone przez udev w przestrzeń użytkownika w moim systemie).
[1] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/init/do_mounts.c#n183
-i1
lub -i 1
, w przeciwieństwie do -i:1
sgdisk 1.0.1.
Sposobem na wyczyszczenie skryptu, który działa na dowolnym systemie plików, jest:
lsblk -no UUID <device-containing-FS>
Lub, biorąc pod uwagę punkt montowania (lub dowolny plik w nim):
lsblk -no UUID $(df -P <file> | awk 'END{print $1}')
Dane wyjściowe to UUID, cały UUID i tylko UUID.
blkid
w odpowiedzi z @ christopher-cashell, ponieważ nie musisz się rootować. Przez punkt montowania lub pliku lepiej zrobić: lsblk -no UUID $(findmnt -n -o SOURCE --target <file>)
.
findmnt -n -o SOURCE --target ~
daje:/dev/mapper/vg_svelte-home[/@home]
lsblk -no UUID $(findmnt -n -o SOURCE --target <file> | cut -d[ -f1)
powinien pozbyć się podobjętości, gdy jest obecny.
Najłatwiejszym sposobem na to w przypadku ext2 / ext3 / ext4 jest:
/sbin/tune2fs -l /dev/sda1
Couldn't find valid filesystem superblock.
Zalecany sposób to zrobić
sudo vol_id -u /dev/sda2
Aby uzyskać więcej informacji na temat używania UUID, zobacz ten artykuł (z pomocy Ubuntu, ale powinien działać dla każdej dystrybucji Linuksa używającej UUID).
Jak zauważono w komentarzach do tego pytania, vol_id może nie znajdować się na twojej drodze. Na Ubuntu jest w / sbin, więc powyższe będzie działać. W przypadku fedory wydaje się, że potrzebuje
sudo /lib/udev/vol_id -u /dev/sda2
Jeśli inne dystrybucje mają vol_id w innych miejscach, opublikuj komentarz, a ja dodam go do tej odpowiedzi.
/sbin/vol_id
do/lib/udev/vol_id
Wydaje mi się, że to działa:
sudo dumpe2fs /dev/sda1 | grep UUID
Zakładając, że chcesz mieć UUID dla sda1, możesz spróbować czegoś takiego:
for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" | grep ../sda1 | cut -d\: -f2 | cut -d/ -f5 ; done
Dostosuj odpowiednio sda1. Aby uzyskać UUID dla wszystkich partycji, upuść greps i cięcia, a la:
for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" ; done
Przykładowe dane wyjściowe dla sda1 na moim pulpicie:
[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
Edycja: Należy pamiętać, że to rozwiązanie, choć bardziej wymyślne niż udev-> vol_id, nie wymaga uprawnień roota, będzie działać na dowolnym jądrze po 2005 roku i opiera się na narzędziach obecnych w dowolnej dystrybucji Linuksa, która jest domyślnie w ścieżka dla dowolnego użytkownika.
Możesz także użyć tego do wydrukowania wszystkich UUID:
for disk in /dev/disk/by-uuid/*; do
basename "$(readlink "$disk")"
basename "$disk"
echo
done
lub to prawdopodobnie łatwiejsze polecenie, zastępując sda1
urządzenie, które chcesz wyszukać:
disk=sda1
find /dev/disk/by-uuid -type l -exec sh -c "readlink {} | grep -o $disk && basename {}" \;
adaptacja drugiej metody drukowania wszystkich 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}'
Powyższe wydaje się działać na większości (wszystkich, jakie znalazłem) systemów Linux na wiele lat. To może mieć wady, nie wiem. Wolałbym uzyskać numer seryjny, ale ... to jest UUID głównego systemu plików.
Jeśli ktoś ma sposób na uzyskanie numeru seryjnego bez konieczności rootowania (tak jak mój) i nie instalowania „nietypowych” pakietów różniących się w różnych wersjach Uniksa, doceniłbym to - zawsze mogę się czegoś nauczyć. I wiem, że mieszam różne rzeczy - to UUID głównego systemu plików, a nie dysk.
BTW ma na celu wygenerowanie unikalnego numeru na maszynę, którego nie można zmodyfikować (np. Numer seryjny dysku i adresy MAC dawno temu).
Służy do kodowania oprogramowania na jednym komputerze. Adres MAC był w porządku, dopóki nie pozwolili im być wirtualnymi ... niektórzy sprytni klienci po prostu ustawili swój adres MAC na stały (oczywiście w różnych sieciach) i unikali płacenia mi.
W systemie AIX jest jedno wywołanie, aby uzyskać jeden numer identyfikujący maszynę. Nie ma znaczenia, czy nastąpią zmiany sprzętu lub aktualizacji oprogramowania, więc nie mam pojęcia, jak to robią ... Jeśli zmieni się płyta główna, to zmieni się liczba, więc myślę, że tam ją ukrywają. I to jest niezwykle rzadkie.
Aby uzyskać identyfikator UUID dla określonego dysku, możesz użyć następujących elementów,
sudo vol_id -u /dev/sda1
lub możesz użyć tego, aby wyświetlić wszystkie UUID dla podłączonego nośnika,
ls /dev/disk/by-uuid