Este comando
mkdosfs /dir/to/data/data.bin
cria um sistema de arquivos no todo "dispositivo" data.bin . Não há tabela de partições dentro dele. Essa configuração é chamada de superfloppy. Minha opinião geral é que deve ser evitada , a menos que você conheça possíveis armadilhas e as aceite.
Espero que o Windows continue assim enquanto formata um superfloppy compartilhado via g_mass_storage module.
Não há tabela de partições, portanto, kpartx é desnecessário. Você deve montar o arquivo inteiro. As implementações modernas de mount devem associar um dispositivo de loop automaticamente:
mount -o rw,umask=0000 -t vfat /dir/to/data/data.bin /mnt/data
(Se o seu mount não, use losetup ou mesmo kpartx . Mas o dispositivo resultante será como loop0 , por exemplo, /dev/loop0 ; monte este, não loop0p1 ). / p>
Estou surpreso que mount ... /dev/mapper/loop0p1 /mnt/data funcionou quando você o executou pela primeira vez. É suspeito. Desde o início você deve montar o arquivo inteiro porque mkdosfs operou no arquivo inteiro.
Eu acredito que abordei a questão raiz. A explicação abaixo sobre o que aconteceu em seguida pode estar totalmente errada.
Observe que esse tipo de problema é possível: O Windows não monta o superfloppy USB NTFS . No seu caso, é superfloppy FAT32 e enquanto o Windows parece não ter nenhum problema com isso, kpartx may.
Isso ocorre porque registro de inicialização FAT32 armazena o código executável onde uma tabela de partição no MBR seria . Este código pode ser qualquer coisa. Você executa kpartx e espera o MBR com uma tabela de partição válida. Em vez disso, ele obtém o registro de inicialização FAT32. Então:
- ou não encontra nada parecido com a tabela de partições, então
special device /dev/mapper/loop0p1 does not existdepois; - ou ele encontra um semi-válido, cria
/dev/mapper/loop0p1(e talvezloop0p2etc.) que aponta para alguma parte do seu arquivo, mas como o sistema de arquivos está no arquivo inteiro, essa "partição" não faz sentido, temwrong fs type, bad option, bad superblock.
A história é semelhante à minha resposta à pergunta já vinculada . Eu acho que no seu caso é kpartx que fica confuso.
Se você criou uma tabela de partição dentro do arquivo (por exemplo, com fdisk data.bin ), definiu uma ou mais partições, execute kpartx -a ... e criou um sistema de arquivos em /dev/mapper/loop0p1 - então você deve montá-lo como mount ... /dev/mapper/loop0p1 /mnt/data .
Acho que neste caso você pode executar modprobe g_mass_storage
- com
file=/dir/to/data/data.bine o Windows veria todo o "dispositivo" com sua tabela de partições; - ou com
file=/dev/mapper/loop0p1e o Windows veria um "dispositivo" que é um superfloppy.