我在使用 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 '不可见文件'
$ cat hello.txt
hello world
这是怎么回事?如果我尝试编辑不可见文件,它将起作用一次然后文件系统将变为只读。修复方法是重新挂载文件系统。
如何让PC主机永久删除文件?
编辑:
我确实发现基本上文件系统不同步,在我看来这是愚蠢的,因为如果大容量存储设备只能从 PC 主机访问,那么它还有什么意义。只需使用 USB 拇指驱动器即可......
我能够根据 USB 连接来破解一些东西,卸载/安装目标的文件系统,但是将来我将更新逻辑以强制用户激活 USB 连接。
答案1
我希望/dev/mmcblk1p3
同时以两种不同的方式使用,一方面使用内核缓冲区安装,另一方面通过g_mass_storage
使用其缓冲区,一旦缓冲区不同步就会引起麻烦。 “不删除文件”可能只是冰山一角;一般来说,最后写回块的人会获胜,从而导致状态不一致,并且您是否会看到一个系统中所做的更改与其他系统中的更改一样将取决于当前的缓冲状态。
所以:不要这样做。要么 mount ,要么用作 as g_mass_storage
,但不能同时使用两者。如果您想在两台计算机之间共享文件,请使用不同的东西(例如网络文件系统)。