如何在Linux中获得USB驱动器标签?

我想在我的C / C ++应用程序中获得USB驱动器的标签。 我正在使用libudev来获取USB细节。 但它不提供驱动器标签。 有没有人有关于如何获得驱动器标签的想法。 我正在开发embedded式平台,它没有一个/ dev / disk文件夹。 请帮忙。 内核版本:3.3.8

通常,USB文件系统上有一个vfat分区,使之兼容msdos,windows,linux和mac体系结构。

标签是vfat文件系统的一个属性。 它通常显示为根目录中的第一个目录条目,并标记为文件系统标签。 最近msdos文件系统的实现(仅仅是vfat exfat和fat32)也将其写入该分区的启动记录的固定部分,以便您可以从那里读取它。

您在分区的第一个扇区中的偏移量为0x43(4字节)的卷序列号。 第一个扇区的偏移量为0x47的卷标也有一个副本(长度为11个字节)

诀窍是:通常一个USB棒被分区(只有一个分区),你必须:

  1. 查看分区表的第一个扇区,找到第一个分区。
  2. 然后,查看该分区的第一个扇区,找到字节偏移量0x43,并使用该四个字节作为卷序列号(它匹配/ etc / fstab linux文件中的UUID =“…”)以及后续的十一个字节体积标识。

注意

请注意,NTFS不会为此目的使用该位置,并且可能会损坏写入该位置的NTFS分区。 刚刚从那个地方读。

笔记2

另外,不要试图写入到vfat文件系统中的那个地方,因为它们还在文件系统的根目录中保留卷标的副本。

注3

在linux下获得dos文件系统(和ext [234],ntfs等)标签的最简单的方法是使用命令blkid(8)给出后续输出:

/dev/sda1: UUID="0b2741c0-90f5-48d7-93ce-6a03d2e8e9aa" TYPE="ext4" /dev/sda5: UUID="62e2cbf2-d847-4048-856a-a90b91116285" TYPE="crypto_LUKS" /dev/mapper/sda5_crypt: UUID="vnBDh3-bcaR-Cu7E-ok5D-oeFp-5SyP-MmAEsb" TYPE="LVM2_member" /dev/mapper/my_vg-root: UUID="1b9f158b-35b5-490e-b914-bdc70e7f5c28" TYPE="ext4" /dev/mapper/my_vg-swap_1: UUID="36b8ac81-7043-42ae-9f2a-908d53e2a2b3" TYPE="swap" /dev/sdb1: LABEL="K003_1G" UUID="641B-80BF" TYPE="vfat" 

正如你所看到的,最后一个入口是一个vfat usb pendrive,但是你必须解析这个输出(我认为这并不难)

我相信磁盘的“标签”是由它使用的文件系统维护的属性,即它不在USB级别。

你将需要适当的文件系统实现,即“挂载”磁盘。