g_mass_storage 가젯을 사용하면서 이상한 문제가 발생했는데, PC에서 삭제된 파일이 "실제로" 삭제되지 않아 인덱싱 시 추가 문제가 발생했습니다.
절차는 다음과 같습니다.
- Linux 장치의 파티션을 마운트합니다.
$ mount /dev/mmcblk1p3 /mnt/data
- g_mass_storage 가젯을 시작합니다:
$ modprobe g_mass_storage file=/dev/mmcblk1p3 removable=y
- Linux 장치의 마운트된 파티션에 파일을 씁니다.
$ echo "hello world" > /mnt/data/hello.txt
- USB OTG를 연결하세요 --> PC
- 컴퓨터에 설치된 파일을 열어 텍스트를 확인하세요.
- 컴퓨터에서 hello.txt 삭제(Shift - 삭제)
- PC에서 USB를 뽑습니다.
- USB 저장소를 다시 사용할 수 있을 때까지 기다리세요.
(내 대상에서는 /sys/class/udc/ci_hdrc.0/state에서 상태를 볼 수 있습니다)
- 파일 시스템에 더 이상 hello.txt 파일이 포함되어 있지 않음을 확인하세요.
$ ls /mnt/data/
- 통계 파일
$ stat hello.txt
File: hello.txt
Size: 12 Blocks: 8 IO Block: 4096 regular file
Device: b303h/45827d Inode: 58 Links: 1
Access: (0755/-rwxr-xr-x) Uid: (0/root) Gid: (0/root)
Access: 2022-08-21 05:57:00.000000000
Modify: 2022-08-21 05:57:00.000000000
Change: 2022-08-21 05:57:00.000000000
- 고양이 '보이지 않는 파일'
$ cat hello.txt
hello world
어떻게 되어가나요? 보이지 않는 파일을 편집하려고 하면 작동합니다.한 번그러면 파일 시스템이 읽기 전용이 됩니다. 해결 방법은 파일 시스템을 다시 마운트하는 것입니다.
PC 호스트가 파일을 영구적으로 삭제하도록 만드는 방법은 무엇입니까?
편집하다:
기본적으로 파일 시스템이 동기화되지 않았다는 사실을 발견했습니다. 제 생각에는 이는 어리석은 일입니다. PC 호스트에서만 액세스할 수 있다면 대용량 저장 장치가 무슨 의미가 있겠습니까? 그냥 USB 썸 드라이브를 사용하세요...
USB 연결을 기반으로 무언가를 해킹하고 대상의 파일 시스템을 마운트 해제/마운트할 수 있었지만 앞으로는 사용자가 USB 연결을 활성화하도록 로직을 업데이트할 예정입니다.
답변1
/dev/mmcblk1p3
동시에 두 가지 다른 방법으로 사용하고 싶습니다 . 한편으로는 커널 버퍼 마운트를 사용하고 다른 한편으로 g_mass_storage
는 버퍼가 동기화되지 않으면 문제를 일으킬 수 있는 버퍼를 사용하여 사용하고 싶습니다. "파일을 삭제하지 마십시오"는 일반적으로 빙산의 일각일 뿐입니다. 마지막으로 블록을 다시 쓰는 사람이 승리하므로 상태가 일관되지 않게 되며 한 시스템의 변경 사항이 다른 시스템의 변경 사항과 동일하게 표시되는지 여부가 결정됩니다. 현재 버퍼 상태에 따라 달라집니다.
그러니 하지 마세요. 마운트하거나 로 사용 g_mass_storage
하지만 동시에 둘 다 사용할 수는 없습니다. 두 컴퓨터 간에 파일을 공유하려면 네트워크 파일 시스템과 같은 다른 것을 사용하십시오.