Как получить USB Drive Label в Linux?

Я пытаюсь получить ярлык USB-накопителя в моем приложении c / c ++. Я использую libudev, чтобы получить детали usb. Но это не обеспечивает метки дисков. Есть ли у кого-нибудь представление о том, как получить ярлык диска. Я работаю на встроенной платформе, у нее нет папки / dev / disk.
Пожалуйста помоги.
Версия ядра: 3.3.8

3

Решение

Обычно файловая система usb имеет раздел vfat, чтобы сделать ее совместимой между архитектурами msdos, windows, linux и mac.

Метка является свойством файловой системы vfat. Обычно он отображается как первая запись в корневом каталоге и помечается как метка файловой системы. Недавние реализации файловых систем msdos (просто vfat exfat и fat32) записывают его также в фиксированную часть загрузочной записи для этого раздела, так что вы можете прочитать ее оттуда.

У вас есть серийный номер тома со смещением 0x43 (4 байта) в первом секторе раздела.
У вас также есть копия метки тома со смещением 0x47 в этом первом секторе (длина 11 байтов).

Хитрость в том, что, как правило, USB-флешка разделена (только с одним разделом), вам необходимо:

  1. найдите в первом секторе флешки usb таблицу разделов и найдите первый раздел.
  2. затем посмотрите на первый сектор этого раздела, найдите смещение байта 0x43 и используйте эти четыре байта в качестве серийного номера тома (он соответствует UUID = «…» в файле / etc / fstab linux) и одиннадцать байтов, которые следуют для Метка тома.

Заметка

Будьте осторожны, чтобы NTFS не использовала это место для этой цели, и вы можете повредить запись NTFS. Просто читайте с того места.

Заметка 2

Кроме того, не пытайтесь писать в это место даже в файловых системах vfat, так как они также поддерживают копию метки тома в корневом каталоге файловой системы.

Заметка 3

Самый простой способ получить метку файловой системы dos (и ext [234], ntfs и т. Д.) В linux — это с помощью команды 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, но вы должны проанализировать этот вывод (я думаю, это не сложно сделать)

2

Другие решения

Я считаю, что «метка» диска — это свойство, поддерживаемое используемой файловой системой, то есть оно не на уровне USB.

Вам понадобится правильная реализация файловой системы, то есть «монтирование» диска.

1

Ты можешь использовать BLKID чтобы прочитать этикетку USB-устройства:

blkid USB_PATH | grep -o ""LABEL.*"" | cut -d'\"' -f2
0
По вопросам рекламы [email protected]