Эта команда
mkdosfs /dir/to/data/data.bin
создает файловую систему на всем «устройстве» data.bin
. Там нет таблицы разделов внутри него. Такая настройка называется superfloppy. Мое общее мнение - этого следует избегать, если только вы не знаете возможные подводные камни и не принимаете их.
Я ожидаю, что Windows сохранит его таким образом, пока он форматирует суперфлоппи-диск, доступный через g_mass_storage
модуль.
Там нет таблицы разделов, так kpartx
что нет необходимости. Вы должны смонтировать весь файл. Современные mount
реализации должны связывать устройство цикла автоматически:
mount -o rw,umask=0000 -t vfat /dir/to/data/data.bin /mnt/data
(Если вы mount
этого не сделаете, не используете losetup
или даже не используете kpartx
. Но полученное устройство будет таким, как loop0
, например /dev/loop0
, монтировать это, а не loop0p1
).
Я удивился, mount ... /dev/mapper/loop0p1 /mnt/data
когда работал, когда вы запускаете его впервые. Это подозрительно С самого начала вы должны смонтировать весь файл, потому что mkdosfs
оперировали со всем файлом.
Я считаю, что я обратился к коренной проблеме. Приведенное ниже объяснение того, что произошло дальше, может быть совершенно неверным.
Обратите внимание, что проблема такого рода возможна: Windows не монтирует USB NTFS superfloppy . В вашем случае это FAT32 superfloppy, и хотя Windows, похоже, не имеет с этим проблем, kpartx
может.
Это связано с тем, что загрузочная запись FAT32 хранит исполняемый код, где будет таблица разделов в MBR. Этот код может быть чем угодно. Вы запускаете kpartx
и ожидаете MBR с допустимой таблицей разделов. Вместо этого он получает загрузочную запись FAT32. Затем:
- либо он не находит ничего похожего на таблицу разделов
special device /dev/mapper/loop0p1 does not exist
; - или он находит частично действительный, создает
/dev/mapper/loop0p1
(и, возможно,loop0p2
и т. д.), который указывает на некоторую часть вашего файла, но, поскольку файловая система находится во всем файле, этот «раздел» не имеет смыслаwrong fs type, bad option, bad superblock
.
История похожа на мой ответ на уже связанный вопрос . Я думаю, в вашем случае это kpartx
запутывается.
Если вы создали таблицу разделов внутри файла (например, с помощью fdisk data.bin
), определили один или несколько разделов, запустили kpartx -a ...
и создали файловую систему /dev/mapper/loop0p1
- тогда вы должны смонтировать ее следующим образом mount ... /dev/mapper/loop0p1 /mnt/data
.
Я думаю, что в этом случае вы могли бы бежать modprobe g_mass_storage
- либо с
file=/dir/to/data/data.bin
и Windows увидит все "устройство" с его таблицей разделов; - или с
file=/dev/mapper/loop0p1
и Windows увидит «устройство», которое является суперфлоппи.