Cha*_*rly 10 linux usb-mass-storage block-device
挑战:我有一个Linux手持设备,它记录数据并将其存储到光盘.它应该通过USB与Windows应用程序交换这些数据.当用户可以访问这些数据时 - 例如通过USB大容量存储 - 它必须加密.它应该是开箱即用的,具有各种操作系统,也适用于Citrix终端会话等.
计划:我使用FUSE在用户空间中创建文件系统,并通过大容量存储将其提供给Windows.每当Windows访问一个文件时,我都会得到回调并动态加密数据.此外,我们可以拥有一些动态内容 - 例如,当某些密码被写入文件时,会显示更多内容.
问题:当使用海量存储小工具(例如g_file_storage)时,它只接受文件或块设备 - 但不接受文件系统(目录).为什么?
[...]它为读取和写入数据扇区提供了一个简单的接口 - 非常类似于用于访问任何硬盘驱动器的低级接口[...].操作系统可以将USB驱动器视为硬盘驱动器,并可以使用他们喜欢的任何文件系统对其进行格式化.(来自维基百科)
所以没有机会通过大容量存储来建立动态文件系统......这似乎是为什么当我将它连接到PC时,为什么我的Android手机会在手机上卸载所有数据.
选项:
目前,只有最后一个选项似乎是现实的 - 或者你还有另一个提示吗?
我会很感激!
查理
USB大容量存储协议是块设备协议; 它不在文件或目录级别运行.Windows主机希望看到g_mass_storage驱动程序公开的原始VFAT文件系统,并将根据需要对VFAT元数据进行写入和读取,以确定目录的结构.
因此,将FUSE文件系统暴露给Windows主机是非常重要的.您必须模拟VFAT,将虚拟文件系统中的块分配给元数据和数据,并且由于Windows主机可以自由地缓存它读取的任何数据或元数据,因此一旦您分配了一些元数据或数据,它就无法更改(因此更改为您的FUSE数据无法反映在Windows文件系统中).Windows主机还可以延迟和重新排序对元数据和数据的写入 - 如果您尝试模拟,这一切都非常混乱.
现在,您可以做一些事情:
这些方法都有自己的问题: