Wie kann ich die UUID eines Volumes abrufen, das das /
Dateisystem enthält ? Das Beste, was ich bisher gefunden habe, ist blkid -o list
. Diese Ausgabe ist jedoch für den Menschen lesbar und schwer zu analysieren. Vielleicht gibt es einen besseren Weg?
Ich brauche das, um das Konfigurationsmanagement mit systemspezifischen Vorlagen zu parametrisieren.
HINWEIS zu blkid
Gotcha für diejenigen, die möglicherweise die Ergebnisse meiner Frage in Zukunft wiederverwenden: blkid
Zwischenspeichern der Ergebnisse früherer Läufe bei /etc/blkid.tab
. Das bedeutet, dass beim blkid
erstmaligen Ausführen als Nicht-Root-Benutzer keine Daten zurückgegeben werden. Auch läuft blkid
als Nicht-Root - Benutzer nach dem Wurzeldurchlauf wird wieder abgestanden (möglicherweise falsche) Daten.
quelle
/dev/disk/by-label
... Dies funktioniert auch für Partitionen, die nicht gemountet sind. Es hat den Vorteil, Skripte schreiben zu können, die Dinge wie rsync von root zu root-bak ausführen, was weitaus weniger fehleranfällig ist als die Verwendung von 2 UUIDS, die nichts "bedeuten".Antworten:
Verwendung
findmnt
:Es gibt auch verschiedene Optionen, um zu steuern, wie Informationen nachgeschlagen und wie sie angezeigt werden (einschließlich JSON-Ausgabe!). Es ist Teil des
mount
Pakets und daher für jede Ubuntu-Installation verfügbar.quelle
Eine andere Lösung:
-n
unterdrückt den Header (nicht wirklich benötigt, aber sicherer zum Parsen)-r
macht Rohausgabe (macht es sicherer zu analysieren)-o UUID,MOUNTPOINT
Geben Sie nur die erforderlichen Informationen anquelle
Sie können den
lsblk
Befehl verwenden, um die UUID auszugeben, benötigen jedoch den Gerätenamen der Partition (z. B. / dev / sda2). Sie können dies erreichen, indem Sie dendf
Befehl verwenden und die Ausgabe zuschneiden. Verwenden Sie die Befehlsersetzung, um den Gerätenamen anzugebenlsblk
. Es scheint, dass Sie sudo benötigen, um auf die UUID zuzugreifen, obwohl die normale Ausgabe von lsblk dies nicht erfordert:quelle
sudo
am 16.04.lsblk
oderblkid
ausgeführt hat, und es hat perfekt funktioniert. Wissen Sie, warum bei diesem Befehl ein Caching-Problem auftritt und nicht bei der von Rovo veröffentlichten Version? Umgeht die Rohausgabe das Caching in irgendeiner Weise?blkid
als Root ausgeführt werde und die Cache-Datei bei erstellt/dev/.blkid.tab
, wird bei Nicht-Sudo-Verwendung vonlsblk
nichts aus der UUID-Spalte angezeigt. Ich glaube nicht, dass die Gefahr einer veralteten Produktion besteht.Die beste Lösung, die ich gefunden habe, ist
Fühlt sich nicht optimal an, funktioniert aber.
Hinweis: [[: Leerzeichen:]] bedeutetSpace
quelle
sudo
.Passen Sie den Wert von
mountpoint
an den aktuellen Einhängepunkt des betreffenden Dateisystems an:quelle
Folgendes verwende ich:
tune2fs befindet sich im e2fsprogs-Paket, an das ich mich nicht erinnern kann, wenn es standardmäßig installiert ist.
wenn es nicht installiert ist.
quelle
awk: not an option: -e
habe Ihre Antwort bearbeitet, um sie funktionsfähig zu machen. Wenn ich überschritten habe, können Sie es gerne zurückrollen. Prost! :-)gawk
. Ich erhalte den unter 16.04 angegebenen Fehler, dermawk
stattdessen zu verwenden scheint .Getestet für die Arbeit am 14.04 und 16.04
Ein einfacher Einzeiler, der immer die UUID einer Wurzel erzeugen sollte,
/
istWas wir hier tun, ist, die Ausgabe von mount so zu erfassen, dass sie mit dem Stammsymbol mit Leerzeichen auf beiden Seiten
/
übereinstimmt, um eine Übereinstimmung zu vermeiden, wenn/
sie als Pfaderweiterungssymbol verwendet wird. Dabei wirdawk
"on" als Feldtrennzeichen verwendet, um nur das auszugeben Gerätename und Zuweisen von THAT zur Umgebungsvariablen $ DRIVE, dann Verwenden der Ausgabe vonblkid $DRIVE
Piped Through Cut unter Verwendung von"
als Feldtrennzeichen und Auswählen nur des zweiten Felds, das alles andere entfernt, wobei nur die UUID übrig bleibt.Beachten Sie, dass das, was im obigen Befehl nach grep gehört, tatsächlich ' space/ space' und nicht '/' ist, wie es erscheint.
Dies hat den Vorteil, dass es nicht erforderlich ist
sudo
und unabhängig von der Montage des Laufwerks das entsprechende Ergebnis zurückgibt.Es ist ratsam, sicherzustellen, dass Sie die Umgebungsvariable $ DRIVE nicht für andere Zwecke verwenden, bevor Sie diesen Ansatz versuchen.
echo $DRIVE
Wenn Sie die Variable nicht verwenden, wird eine leere Zeile zurückgegeben.quelle