Встановіть віртуальний привід vfat до малинового пі


0

Я намагаюся встановити віртуальний привід vfat до Raspberry Pi. Це рішення спрацювало, тоді ми відформатували привід vfual vfat через USB OTG, тепер я не можу приєднати диск до pi, але все одно можу встановити його на інший USB-пристрій.

Ось конфігурація.

Запустити лише один раз для конфігурації

dd if=/dev/zero of=/dir/to/data/data.bin bs=512 count=7680000
mkdosfs /dir/to/data/data.bin
kpartx -a /dir/to/data/data.bin

Запустити кожен завантажувач після початкової конфігурації

kpartx -a /dir/to/data/data.bin

Решта команди виконуються програмою управління OTG USB

Монтувати до себе

mount -o rw,umask=0000 -t vfat /dev/mapper/loop0p1 /mnt/data

Відключити від себе

umount /mnt/data

Підключіть до USB

modprobe g_mass_storage file=/dir/to/data/data.bin stall=0

Відключення від USB

modprobe g_mass_storage file=/dir/to/data/data.bin stall=0

Коли віртуальний диск vfat був встановлений на USB OTG, ми відформатували його з пристрою, до якого він був підключений, щоб побачити, що буде.

І тепер ми не можемо змонтувати віртуальний диск назад до себе. Навіть після видалення віртуального диска та його відновлення.

mount -o rw,umask=0000 -t vfat /dev/mapper/loop0p1 /mnt/data
mount: wrong fs type, bad option, bad superblock on /dev/mapper/loop0p1,
   missing codepage or helper program, or other error

   In some cases useful info is found in syslog - try
   dmesg | tail or so.

або

mount -o rw,umask=0000 -t vfat /dev/mapper/loop0p1 /mnt/data
mount: special device /dev/mapper/loop0p1 does not exist

Що я спробував

modprobe -r g_mass_storage //Unmount from usb
umount /mnt/data //Unmount from itself
kpartx -dv /dir/to/data.bin //unmap virtual drive
rm /dir/to/data.bin //delete the virtual file system
dd if=/dev/zero of=/dir/to/data.bin bs=512 count=7680000 //Create a new virtual drive
mkdosfs /dir/to/data/data.bin //Format to vfat
kpartx -av /dir/to/data.bin //Map to dev
mount -o rw,umask=0000 -t vfat /dev/mapper/loop0p1 /mnt/data //Mount to itself

Все ще отримую одне з двох повідомлень про помилки, але я все-таки можу встановити його на USB і прочитати його як жировий диск з Windows 10

Ми працюємо з Raspbian (на базі Debian)

Дякую за прочитане

Відповіді:


1

Ця команда

mkdosfs /dir/to/data/data.bin

створює файлову систему на всьому "пристрої" data.bin. У ній немає таблиці розділів. Така установка називається суперфлоппі. Моя загальна думка: цього слід уникати , якщо ви не знаєте можливих підводних каменів і не приймаєте їх.

Я очікую, що 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 побачив би "пристрій", який є суперфлоппі.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.