So erhalten Sie detaillierte Geräte- / Partitionsinformationen aus dem Dateipfad unter Linux (z. B. UUID, serielle Festplatte usw.)
enn ich mit einem absoluten Dateipfad beginne, möchte ich die folgenden Informationen erhalten:
Der Mount-Punkt des Dateisystems, auf dem die Datei gespeichert ist (um den Pfad relativ zum Mount-Punkt zu berechnen) Die UUID und Bezeichnung des Dateisystems Typ (oder Herstellername) und Seriennummer der Festplatte, auf der sich die Partition befindetIch bin mir bewusst, dass 2 und 3 in vielen Fällen undefiniert sein können (z. B. für Loopback-, RAMFS- und verschlüsselte Geräte), was völlig in Ordnung ist.Ich weiß auch, wie ich diese Informationen mit einer Shell und Systemtools wie @ erhalten kandf
und die/sys
oder/proc
Dateisystem Sehendiese Frag als Referenz
Ich bin jedoch auf der Suche nach der Methode mit dem geringsten Cumbersone-Aufwand, um dies programmgesteuert mit Python 3.5 zu tun. Das bedeutet
Systemaufrufe bevorzugen, anstatt den Inhalt von @ zu analysier/proc
oder/sys
(was kann sich ändern oder hängt von der Kernelkonfiguration ab?)Vermeiden Sie das Aufrufen von Unterprozessen und das Parsen ihrer Ausgabe (die Definition von umständlich)isher benutze ichos.stat()
auf dem Pfad, um die Haupt- und Nebennummer des Blockgeräts von @ zu erhaltstat_result.st_dev
. Aber wie gehe ich vor?
Es gibt zum Beispie
/proc/mounts
/proc/partitions
/sys/dev/block/<major>:<minor>
Anmerkungen In Bezug auf gemountete Blockgeräte und Partitionen,/proc/mounts
und/proc/partitions
scheint die kanonische Informationsquelle zu sein (was in Ordnung ist). Für UUIDs, Labels, Serien etc. verwende ich derzeitudevadm
und analysiere die Ausgabe:
def get_udev_properties(dev_name):
cmd = ["udevadm", "info", "--query=property", "--name", dev_name]
result = subprocess.run(cmd, stdout=subprocess.PIPE)
return parse_properties(result.stdout)
Weiterer Hinweis: Ausgehend von meinem aktuellen Problem könnte man allgemeiner fragen:
Wie lautet die kanonische Identifikation oder Darstellung eines Blockgeräts in Bezug auf Linux-Systemaufrufe und Kernel-Dateisysteme? Was ist der richtige Weg, um diese Darstellung durch Haupt- und Nebenzahl zu erhalten? Wie kann ich detaillierte Informationen zu einem Blockgerät erhalten?