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 befindet

Ich 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?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage