Jak mogę uzyskać identyfikator UUID woluminu zawierającego /
system plików? Najlepsze, co do tej pory znalazłem, to blkid -o list
. Ale ten wynik jest czytelny dla człowieka i trudny do przeanalizowania. Może jest lepszy sposób?
Potrzebuję tego, aby sparametryzować zarządzanie konfiguracją za pomocą szablonów specyficznych dla systemu.
UWAGA o blkid
gotcha dla tych, którzy mogą ponownie wykorzystać wyniki mojego pytania w przyszłości: blkid
zapisuje wyniki poprzednich testów w pamięci podręcznej /etc/blkid.tab
. Oznacza to, że uruchomienie blkid
jako użytkownik inny niż root po raz pierwszy nie zwróci żadnych danych. Ponadto uruchomienie użytkownika blkid
innego niż root po uruchomieniu roota zwróci nieaktualne (prawdopodobnie niepoprawne) dane.
command-line
scripts
partitions
mountpoint
uuid
Dmitriusan
źródło
źródło
/dev/disk/by-label
... Działa to również w przypadku partycji, które nie są zamontowane. Ma tę zaletę, że może pisać skrypty, które wykonują takie rzeczy, jak rsync od roota do root-bak, co jest znacznie mniej podatne na błędy niż używanie 2 UUIDS, które „nic nie znaczą”.Odpowiedzi:
Użyj
findmnt
:Ma także kilka opcji kontrolowania sposobu wyszukiwania informacji i sposobu ich prezentacji (w tym danych wyjściowych JSON!). Jest to część
mount
pakietu, więc jest dostępna w każdej instalacji Ubuntu.źródło
Inne rozwiązanie:
-n
pomija nagłówek (nie jest tak naprawdę potrzebny, ale bezpieczniejszy do analizy)-r
zapewnia nieprzetworzone dane wyjściowe (bezpieczniej parsuje)-o UUID,MOUNTPOINT
zawierają tylko niezbędne informacjeźródło
Możesz użyć
lsblk
polecenia, aby wyświetlić identyfikator UUID, ale potrzebujesz nazwy urządzenia partycji (takiej jak / dev / sda2). Możesz to zrobić za pomocądf
polecenia i przyciąć dane wyjściowe. Użyj podstawienia polecenia, aby nadać nazwę urządzeniulsblk
. Wygląda na to, że potrzebujesz sudo, aby uzyskać dostęp do UUID, chociaż normalne wyjście lsblk tego nie wymaga:źródło
sudo
16.04.lsblk
ani nieblkid
działał z poziomu roota i działał idealnie. Czy wiesz, dlaczego wystąpiłby problem z buforowaniem tego polecenia, a nie wersji opublikowanej przez Rovo? Czy surowe dane wyjściowe w jakiś sposób omijają buforowanie?blkid
jako root, tworzenie pliku pamięci podręcznej w/dev/.blkid.tab
, użycie w trybie innym niż sudolsblk
nie pokaże niczego z kolumny UUID. Nie sądzę, że istnieje ryzyko przestarzałej produkcji.Najlepszym rozwiązaniem, jakie udało mi się wymyślić, jest
Wydaje się nieoptymalny, ale działa.
Uwaga: [[: spacja:]] oznaczaSpace
źródło
sudo
.Dostosuj wartość
mountpoint
do bieżącego punktu podłączenia danego systemu plików:źródło
Oto, czego używam:
tune2fs znajduje się w pakiecie e2fsprogs, którego nie pamiętam, jeśli jest domyślnie zainstalowany.
jeśli nie jest zainstalowany.
źródło
awk: not an option: -e
że zredagowałem twoją odpowiedź, aby była funkcjonalna. Jeśli przekroczyłem próg, możesz go wycofać. Twoje zdrowie! :-)gawk
. Otrzymuję błąd określony w 16.04, który wydaje się używaćmawk
zamiast tego.Testowany do pracy w dniach 14.04 i 16.04
Prostym jednowierszowym, który zawsze powinien generować UUID rdzenia
/
jestTo, co robimy tutaj, polega na przeplataniu wyniku montowania, aby dopasować symbol główny ze spacjami po obu stronach,
/
aby uniknąć dopasowania, gdy/
jest używany jako symbol rozszerzenia ścieżki, potokując to zaawk
pomocą „on” jako separatora pól, aby wyświetlać tylko nazwę urządzenia i przypisanie TO do zmiennej środowiskowej $ DRIVE, a następnie użycie danych wyjściowychblkid $DRIVE
potoku przez przecięcie za pomocą"
jako separatora pól i wybranie tylko drugiego pola, które usuwa wszystkie pozostałe, pozostawiając tylko UUID.Zauważ, że to, co należy po grep w powyższym poleceniu, to tak naprawdę „ space/ space”, a nie „/”, jak się wydaje.
Ma to tę zaletę, że nie wymaga
sudo
i zwraca odpowiedni wynik niezależnie od sposobu montażu napędu.Mądrze byłoby upewnić się, że nie używasz zmiennej środowiskowej $ DRIVE do niczego innego, zanim spróbujesz tego podejścia
echo $DRIVE
zwróci pustą linię, jeśli nie używasz zmiennej.źródło