라즈베리 파이에 가상 vfat 드라이브 마운트

라즈베리 파이에 가상 vfat 드라이브 마운트

Raspberry Pi에 가상 vfat 드라이브를 마운트하려고 합니다. 이 솔루션은 작동 중이었고 USB OTG를 통해 vritual vfat 드라이브를 포맷했습니다. 이제 드라이브를 다시 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사용하십시오 . 그러나 결과 장치는 예를 들어 ; 마운트하지 말고 )와 같을 것입니다.losetupkpartxloop0/dev/loop0loop0p1

mount ... /dev/mapper/loop0p1 /mnt/data처음 실행했을 때 효과가 있어서 놀랐습니다 . 비린내가 난다. mkdosfs전체 파일을 대상으로 동작하기 때문에 처음부터 전체 파일을 마운트해야 합니다 .


나는 근본적인 문제를 해결했다고 믿습니다. 다음에 일어난 일에 대한 아래 설명은 완전히 틀렸을 수 있습니다.

다음과 같은 종류의 문제가 발생할 수 있습니다.Windows가 USB NTFS 슈퍼플로피를 마운트하지 않습니다.. 귀하의 경우에는 FAT32 슈퍼플로피이고 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

  • Windows 에서는 file=/dir/to/data/data.bin파티션 테이블이 포함된 전체 "장치"를 볼 수 있습니다.
  • 또는 file=/dev/mapper/loop0p1Windows에서는 슈퍼플로피인 "장치"를 보게 됩니다.

관련 정보