Как получить подробную информацию об устройстве / разделе из пути к файлу в 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 и файловых систем ядра?Как правильно получить это представление по старшему и младшему числу?Как правильно получить подробную информацию о блочном устройстве?