我正在尝试在我的c / c ++应用程序中获取USB驱动器的标签。我使用libudev获取usb详细信息。但它没有提供驱动器标签。有没有人知道如何获得驱动器标签。我正在使用嵌入式平台,它没有/ dev / disk文件夹。 请帮忙。 内核版本:3.3.8
答案 0 :(得分:2)
通常情况下,usb文件系统上有一个vfat分区,使其在msdos,windows,linux和mac架构之间兼容。
标签是vfat文件系统的属性。它通常显示为根目录中的第一个目录条目,并标记为文件系统标签。最近msdos文件系统的实现(仅仅是vfat exfat和fat32)也将它写入该分区的引导记录的固定部分,因此您可以从那里读取它。
在分区的第一个扇区中,您在偏移量0x43(4个字节)处有卷序列号。 您还在第一个扇区的偏移量0x47处有一个卷标的副本(长度为11个字节)
诀窍是:通常一个usb棒被分区(只有一个分区)你必须:
请注意,NTFS不会为此目的使用该位置,并且可能会损坏在那里写入的NTFS分区。请从那个地方读一读。
此外,即使在vfat文件系统中也不要尝试写入该位置,因为它们还在文件系统的根目录中维护卷标的副本。
在linux中获取dos文件系统(以及ext [234],ntfs等)标签的最简单方法是使用命令 blkid(8)它给出followind输出:
/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,但您必须解析此输出(我认为这并不困难)
答案 1 :(得分:1)
我相信"标签"磁盘是由它使用的文件系统维护的属性,即它不在USB级别。
您需要正确的文件系统实施,即" mount"磁盘。
答案 2 :(得分:0)
您可以使用 blkid 来读取USB设备标签:
blkid USB_PATH | grep -o ""LABEL.*"" | cut -d'\"' -f2