如何从sysfs获取文件系统标签?

时间:2020-04-22 12:31:58

标签: c linux sysfs

如何使用/sys获得文件系统的标签?我知道我可以通过转到/sys/class/block/<device>获得有关块设备的很多信息,例如/sys/class/block/sr1表示我知道的CD具有文件系统标签config。我搜寻了每个物品,找到了除了标签之外的所有东西。

我确实浏览了lsblk源代码,而该源代码又取决于在udev_device_new_from_subsystem_sysname中调用libudev,因此我进行了仔细研究。它似乎确实填充了属性ID_FS_LABEL_ENC,但是我无法弄清楚它在树中的位置,除非它正在其他地方跟踪它。

我只会使用libudev,但需要在C程序之外进行访问。

1 个答案:

答案 0 :(得分:1)

我认为这里的问题是,您似乎认为卷的标签是内核,大小或可用空间也是如此。

但是AFAIK并不是这样,内核根本不关心卷标,这只是从磁盘内格式到用户态的一件事:没有内核API可以获取该信息。如果需要,您只需打开原始二进制卷并从那里读取数据。

但是,一个大问题是每个文件系统都不同,因此您需要特殊的代码来管理每个分区类型。幸运的是,有人已经完成了艰苦的工作,并且您拥有blkid,它是大多数Linux发行版中util-linux的一部分。如果需要,可以直接调用该程序,也可以链接到完成工作的库libblkid

自然地,要使用blkid / libblkid,您需要对块设备的读取访问权限,即root访问权限。如果您认为不需要使用root访问权限来读取标签,那么udev的人也会这么认为,这就是为什么存在udev规则会在首次确定文件系统时复制标签的原因(运行{{ 1}}当然。这是您已经知道的blkid

相关问题