Как я могу получить метку файловой системы от sysfs? - PullRequest
0 голосов
/ 22 апреля 2020

Как я могу получить метку файловой системы, используя /sys? Я знаю, что могу получить большую часть информации о блочном устройстве, перейдя на /sys/class/block/<device>, например /sys/class/block/sr1 для компакт-диска, который, как мне известно, имеет метку файловой системы config. Я просматривал каждый элемент, находил все, кроме метки.

Я копался в исходном коде lsblk, который, в свою очередь, зависит от вызова udev_device_new_from_subsystem_sysname в libudev, поэтому я прошел через это , Похоже, что оно заполняет свойство ID_FS_LABEL_ENC, но я не могу понять, откуда оно берется в дереве, если только оно не отслеживает его в другом месте?

Я бы просто использовал libudev, но мне нужен доступ вне программы C.

1 Ответ

1 голос
/ 22 апреля 2020

Я думаю, что проблема здесь в том, что вы, похоже, думаете, что метка тома - это вещь ядра, равно как размер или свободное пространство.

Но AFAIK это не так, ядро ​​не Не заботьтесь о метках томов, это просто вещь, которая переходит от формата на диске к земле пользователя: не существует API ядра для получения этой информации. Если вам это нужно, вы просто открываете необработанный двоичный том и читаете данные оттуда.

Но тогда есть большая проблема, что каждая файловая система отличается, поэтому вам нужен специальный код для управления каждым типом раздела Там есть. К счастью, кто-то проделал тяжелую работу, и у вас есть blkid, часть util-linux, доступная в большинстве Linux дистрибутивов. Если вам это нужно, вы можете вызвать программу напрямую или связаться с библиотекой libblkid, которая выполняет тяжелую работу.

Естественно, для использования blkid / libblkid вы нужен доступ на чтение к блочному устройству, то есть root доступ. Если вы считаете, что для чтения метки не требуется доступ root, люди из udev думают так же, и поэтому существует правило udev, которое копирует метку при первом обнаружении файловой системы (работает * 1015). * конечно). Это ID_FS_LABEL_ENC, о котором вы уже знаете.

...