Найдено результатов: 1

Как сопоставить путь устройства linux с именем диска windows?

Я пишу приложение, которое на каком-то этапе выполняет низкоуровневые дисковые операции в среде Linux. Приложение на самом деле состоит из 2 частей, одна работает на Windows и взаимодействует с пользователем, а другая-это часть linux, которая работает с LiveCD. Пользователь выбирает Windows букв диска, а затем часть linux выполняет действия с соответствующими разделами. Проблема заключается в поиске соответствия между буквой диска Windows (например, C:) и именем устройства linux (например, /dev/sda1). это мое текущее решение, которое я оцениваю как уродливое:

  • храните информацию о разделах (например, букву диска, количество блоков, серийный номер диска и т. д.) в Windows в некотором заранее определенном месте (т. е. в корне системного раздела).

  • прочитайте список разделов из /proc/partitions. получите только те разделы, которые имеют основной номер для SCSI или IDE жестких дисков и второстепенный номер, который идентифицирует их как реальные разделы, а не целые диски.

  • Попробуйте mount каждый из них с помощью файловой системы ntfs или vfat. Проверьте, содержит ли смонтированный раздел информацию, хранящуюся в приложении Windows.

  • После нахождения необходимой информации, написанной приложением Windows, сделайте фактический матч. Для каждого раздела, найденного в /proc/partitions, приобретите серийный номер диска (через hdio_get_identity syscall), количество блоков (от /proc/partitions) и смещение диска (/sys/blocks/drive_path/partition_name/start), сравните это с информацией Windows и, если это соответствует - сохраните букву диска Windows вместе с именем устройства linux.

В этой схеме есть несколько проблем:

  • Это отвратительно. Запись данных в Windows, а затем чтение их в Linux превращает тестирование в кошмар.

  • Основной номер устройства linux сравнивается только с устройствами IDE или SCSI. Это, вероятно, не удастся, т. е. на дисках USB или FireWire. Можно добавить эти типы дисков, но ограничение приложения только известным подмножеством возможных устройств кажется довольно плохой идеей.

  • похоже, HDIO_GET_IDENTITY работает только на дисках IDE и SATA.

  • /sys/block hack не может работать на других дисках, кроме IDE или SATA.

Есть идеи, как улучшить эту схему? Возможно, есть другой способ определить имена windows, не записывая все данные в приложение windows?

P.S. Язык приложения-C++. Я не могу это изменить.

c++   linux   drives    

522   6   20:51, 8th August, 2020