Как получить подробную информацию об устройстве / разделе из пути к файлу в Linux (например, UUID, последовательный жесткий диск и т. Д.)

Начиная с абсолютного пути к файлу, я хочу получить следующую информацию:

Точка монтирования файловой системы, в которой хранится файл (для вычисления пути относительно точки монтирования)UUID и метка файловой системыТип (или имя поставщика) и серийный номер жесткого диска, на котором находится раздел

Я знаю, что 2 и 3 могут быть неопределенными во многих случаях (например, для loopback, ramfs, зашифрованных устройств), что вполне нормально.Я также знаю, как получить эту информацию, используя оболочку и системные инструменты, такие какdf и/sys или же/proc файловая система. Увидетьэтот вопрос для справки.

Тем не менее, я ищу наименее громоздкий метод, чтобы сделать это программно с Python 3.5. Это означает:

Предпочитаю системные вызовы вместо анализа содержимого/proc или же/sys (что может быть изменено или зависеть от конфигурации ядра?)Избегайте вызова подпроцессов и анализа их вывода (определение громоздко)

Пока я используюos.stat() на пути, чтобы получить старший и младший номер блочного устройства отstat_result.st_dev, Но как правильно поступить?

Есть например

/proc/mounts/proc/partitions/sys/dev/block/<major>:<minor>

Заметки: Относительно смонтированных блочных устройств перегородок,/proc/mounts а также/proc/partitions кажется каноническим источником информации (который в порядке). Для UUID, этикеток, серийных номеров и т. Д. Я в настоящее времяudevadm и проанализировать вывод:

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)

Примечание: абстрагируясь от моей острой проблемы, можно задать более общий вопрос:

Что такое каноническая идентификация или представление блочного устройства в отношении системных вызовов linux и файловых систем ядра?Как правильно получить это представление по старшему и младшему числу?Как правильно получить подробную информацию о блочном устройстве?

Ответы на вопрос(3)

Ваш ответ на вопрос