首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件级别上的USB海量存储

文件级别上的USB海量存储
EN

Stack Overflow用户
提问于 2011-05-16 20:07:38
回答 4查看 5.4K关注 0票数 13

的挑战:我有一个Linux手持设备,它记录数据并将其存储到磁盘上。它应该通过USB与Windows应用程序交换这些数据。当用户访问这些数据时--例如通过USB--海量存储--必须对其进行加密。它应该是开箱即用的,有各种操作系统,也适用于citrix终端会话等.

The Plan:我用熔断器在用户空间创建了一个文件系统,并通过大容量存储将其提供给windows。每当Windows访问一个文件时,我都会得到一个回调,并实时加密数据。此外,我们可以有一些动态内容--例如,当某个密码被写入文件中时,会显示更多的内容。

The Problem:当使用海量存储小工具(例如存储)时,它只接受文件或阻塞设备,而不接受文件系统(目录)。为什么?

..。它提供了一个简单的接口来读取和写入数据扇区--就像用于访问任何硬盘驱动器的低级接口一样.操作系统可以像硬盘一样对待USB驱动器,并且可以用他们喜欢的任何文件系统格式化它。(来自维基百科)

所以没有机会通过大容量存储拥有一个动态的文件系统.这似乎就是为什么我的android手机在我把手机连接到个人电脑时不挂载手机上的所有数据的原因。

Options

  • 创建一个“用户空间中的块设备”-类似于FUSE (需要一个反向脂肪驱动程序,当我想动态提供文件时)
  • 实现我自己的nbd服务器来创建一个块设备(也需要一个反向驱动程序?)
  • 我将加密文件保存到分区,并将此分区传递给大容量存储小工具(问题是性能和缺乏动态交互)。
  • 不要提供大规模风暴设备,并注意其他想法(USB上的eth)。

目前,似乎只有最后一个选择是现实的-或者你有另一个提示给我吗?

我会很感激的!

查莉

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-16 20:16:50

USB大容量存储协议是块设备协议,它不工作在文件或目录级别。Windows主机希望看到g_mass_storage驱动程序公开的原始VFAT文件系统,并根据需要对VFAT元数据进行写入和读取,以了解目录是如何构造的。

正因为如此,将FUSE文件系统公开给windows主机是非常重要的。您必须模拟VFAT,将虚拟文件系统中的块分配给元数据和数据,而且由于windows主机可以自由缓存它读取的任何数据或元数据,一旦分配了一些元数据或数据,它就无法更改(因此对FUSE数据的更改不能反映在windows文件系统中)。windows主机还可以延迟和重新排序对元数据和数据的写入--如果您试图进行模拟,这将是非常混乱的。

现在,你可以做一些事情:

  1. 您可以在窗口端编写自定义IFS驱动程序,通过文件/目录级别的自定义协议与linux设备进行交互。
  2. 您可以将USB设备视为虚拟以太网端口,并将CIFS与windows主机对话。
  3. 您可以在连接时间上以某种方式创建静态VFAT布局,将其暴露到windows主机;尚未解密的数据可以返回I/O错误,以避免Windows主机缓存原始加密数据。
  4. 您可以使用dm-crypt加密原始块设备,并将整个块设备(加密为一个块)公开到窗口中。
  5. 您可以实现一个MTP小工具。

这些方法有其自身的问题:

  1. 要求安装windows驱动程序,并由microsoft等签署。在没有管理权限的情况下,无法在计算机上使用该驱动程序。
  2. 不会自动播放;用户需要浏览网络浏览器才能访问文件。防火墙设置可能会干扰。可能有很大的开销。
  3. 非常复杂。在后端处理元数据更新可能非常困难。突如其来的拔插头事件可能是毁灭性的。如果用户试图访问锁定的文件,则Windows接收IO错误的行为可能是一个问题。
  4. 没有文件级加密可用,但否则应该工作良好。
  5. 我不清楚MTP到底对非媒体文件有多少支持;支持没有大规模存储支持那么普遍。
票数 11
EN

Stack Overflow用户

发布于 2011-05-17 02:22:12

你可能会对Android感兴趣,它以前把自己作为USB大容量存储设备公开给主机,而现在却扮演了MTP设备的角色(从蜂巢开始)。

话虽如此,有人已经实现了您的选择1,虽然与“设备”和“主机”有点颠倒。QEMU有一个名为vvfat的疯狂黑客,它能够创建一个伪造的块设备,在VM看来,它包含一个VFAT文件集,只是从主机上的目录/文件树开始。它需要在启动之前进行完整的递归扫描,它依赖于OSes如何写入文件系统的细节,如果您在使用中独立地更改任何文件,则会失败,但是(不知怎么地)设法(有时)工作。

票数 6
EN

Stack Overflow用户

发布于 2012-11-06 14:11:30

可以将NBD协议转换为USB,并将“位爆炸”usb作为USB大容量存储设备出现在USB主机上。

  • NBD和USB存储都是块级设备,因此可以将一种协议转换为另一种协议。然而,这几乎肯定需要编程,因为我认为这是不存在的。然而,http://travisgoodspeed.blogspot.com/2012/07/emulating-usb-devices-with-python.html看起来对USB端相当有用,https://bitbucket.org/hirofuchi/xnbd/wiki/Home应该为NBD客户端提供一个很好的例子。
  • 使用VFAT意味着Windows可以将其视为普通的USB磁盘驱动器,没有驱动程序。
    • 正如另一张海报所建议的,qemu的vvfat模块可以用于自动化其中的一些功能。

  • 通信量的加密需要通过SSH或OpenVPN对NBD通信量进行隧道化。

最后的设置如下所示:

代码语言:javascript
复制
+---------------------------------+                +------------------+
| data collection device          |                | client device    |
| +----------------+              |                |                  |
| | collected data |              |                |  SSH -> NBD      |
| | -> linux fs    |              |                |         client   |
| +--+-------------+--------+     |                |         |        |
| -> | qemu vvfat           | SSH +-{some network}-+         V        |--> client PC
|    | run NBD inside the VM|     |                | USB Mass Storage |    USB port 
+----+----------------------+-----+                +------------------+   
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6022715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档