我刚买到Galaxy Nexus,了解到它不支持USB大容量存储模式。它仅支持MTP和PTP。我经常在工作时将手机用作USB闪存驱动器,所以这是一个问题。我可以使用MTP来回传输文件,但是我需要直接在手机上编辑文件。

我想找到一种方法来继续将手机用作外部驱动器,并能够直接访问手机存储中的文件而无需来回传输文件,但是我有一些限制:我工作的网络未连接到Internet,没有wifi,并且计算机没有蓝牙,这种情况不会改变。理想情况下,我不必在计算机上安装任何东西,但是如果没有其他选择,我会考虑这样做。

是否有任何黑客或变通办法可以让我按照我所描述的方式将Galaxy Nexus用作外部闪存驱动器?

我可以创建一个单独的可安装FAT分区吗?我可以在Windows XP计算机上以及通过Android操作系统访问手机的存储设备上使用其他具有外部存储卡的设备进行访问的方式?

手机:它是有根并已解锁的VZW上的Galaxy Nexus,当前正在运行CM9。

评论

我不确定100%,但是我认为股票内核甚至无法做到这一点。您需要一个售后内核或仅需要一个自定义ROM来执行此操作。 G Nexus GSM:有关Cyanogenmod9的完整更新指南(4.0.4 atm,4.1 CM10仍处于早期阶段)。这是一个可能也有帮助的apk。需要root。

谢谢,除此之外,该线程看起来很有希望。希望这不是真的,否则我将要出售GN。

我认为您不一定需要使用单独的SD卡来使用UMS,但我认为您需要一个单独的分区(格式为FAT)才能工作,例如没有外部SD卡插槽的Kindle Fire。 br />
我认为您需要进一步说明为什么MTP / PTP不适合您的用法。尽管有名称,MTP实际上可以传输任何任意文件,而不仅仅是媒体文件。您在MTP中无法执行的唯一操作是需要块级访问的操作,例如碎片整理,重新格式化,分区等。

我不想传输文件,我想在手机上的位置对其进行编辑,就像是闪存驱动器一样。我不相信您可以使用mtp做到这一点,我误会了吗?

#1 楼

简短的回答:
由于协议规范,当前您不能使用您的设备(任何依赖MTP的设备)充当MSC!
详细说明
,Galaxy Nexus在整个设备上使用了一个庞大的分区,这就像是说:系统,数据和sdcard都在一起。
Galaxy Nexus之所以选择MTP,是因为它允许使用如此大的存储区域,系统的角度,确保与文件的通信更好,提供了更安全的文件系统,并减少了维护麻烦。
为什么不能按自己的方式进行操作:
没有单独的分区在Galaxy Nexus中,只有一个大存储区域。即使模拟fat32文件系统,仍然需要能够在低级之间在fat32和ext4之间进行转换。这几乎是不可能的。
如果Galaxy Nexus有分区,则可以具有块级访问权限,因此可以具有大容量存储访问权限。

长期无聊的版本:
短背景
我们都习惯在设备上使用的大容量存储类(MSC),通常称为USB大容量存储(UMS),它是一种允许访问通用串行总线(USB)设备的协议到主机计算设备,以实现两者之间的文件传输。在黄金时期,只需插入电话,按“ USB模式”并开始移动文件,编辑文件等...
媒体传输协议(MTP)
情况发生了很大变化,当我们谈到您的设备上正在使用的新传输方式时,媒体传输协议(MTP):

1简介,请参见第15页zip
媒体传输协议或MTP,是用于与暂态存储设备进行内容交换以及命令和控制的协议。它被开发为对PTP或图片传输协议的扩展,主要针对数码相机,便携式媒体播放器和蜂窝电话。

尽管引言尚有疑问,但此协议的开发和实施具有非常特定的目的:促进设备之间媒体文件和相关元数据的传输:

1.1目的请参见第15页zip
该协议的主要目的是促进具有瞬时连接性和显着存储容量的媒体设备之间的通信。这包括二进制对象的交换和所连接设备的内容的枚举。

文件类型受支持吗?
至此,我们已经知道这是针对媒体文件和基于媒体的设备,但我在评论中看到的一个问题仍然存在:我们可以复制媒体文件(音频/视频)以外的文件吗?是的,我们可以:

1.3 MTP对象模型,请参见第15页zip
“媒体传输协议”中的“媒体”一词用于标识任何二进制数据,并且不仅限于音频/ video常用格式。非音频/视频对象的一些示例包括联系人,程序,预定事件和文本文件。

“实时编辑”怎么样?
您的问题特别涉及设备的使用(Galaxy) Nexus)作为外部USB存储驱动器。为什么不能做到? MTP协议将数据限制为单向操作,后面还解释了计算机将设备存储用作本地文件:

4.2单向数据流,请参见第29页zip
数据MTP中的流量始终是单向的。启动操作时,数据仅从启动器流向响应器。当响应所请求的操作时,数据仅从响应者流向启动器。在二进制数据交换阶段,数据可能从响应者流向启动器,或者从发起者流向响应器,但绝不会两者都流。双向二进制数据交换必须通过多种操作来执行。

优点与缺点
优点
MTP确实具有一些优势,主要涉及用户数据的安全性和完整性:

当USB主机安装了MSC分区时,它将假定对存储的绝对控制,从而允许例如,文件系统损坏或重新格式化为不受支持的类型。
同时,MTP通过将托管存储单元设置为可以写入或读取的本地文件来克服了这一问题。
缺点
MTP没有被视为传统的可移动驱动器,因此,没有恢复工具可以用来挽救一天。
支持仍在进行中,某些操作系统仍需要第三方软件。
MTP标准(如前所述)不允许直接修改对象。取而代之的是,必须完整地重新上传已修改的对象。

参考文献:
我希望这可以弄清为什么MTP很好(改进),但是OTOH不好(用户将不得不改变习惯) 。
这是用于综合答案的阅读材料:

usb.org ::媒体传输协议v.1.1规范和MTP v.1.1采纳者协议.zip与pdf文件

Wikipedia ::媒体传输协议

Android Central :: MTP-它是什么,为什么使用它,以及如何设置它

Microsoft ::媒体传输协议增强规范

Microsoft ::媒体传输协议实现详细信息


以上回答归功于这些参考链接的内容和作者。

评论


我很欣赏mtp的详细说明,但是我已经接受了以下事实:我无法以自己想要的方式使用mtp。我感兴趣的是找到一种解决限制的方法。例如,对内部存储器重新分区以创建单独的可安装分区。关于如何解决mtp限制的任何建议?

–马特
2012年7月27日在5:36

@Matt评论越来越大,我在“简短答案”部分下添加了一个说明。抱歉,如果我没有早点说清楚。

– Zuul
2012年7月27日在10:04

感谢您提供的附加信息,但我已经意识到了大部分。我想知道的是,除了其他解决方案之外,手机是否可以使用支持UMS的单独FAT分区进行重新分区?如果是这样,怎么办?

–马特
2012年7月28日17:39

我最终将赏金授予ce4,因为他的代码是最接近解决方案的东西,但感谢您提供的详细信息和帮助。

–马特
2012年8月1日在16:07

#2 楼

可能可以通过USB以UMS / MSC的形式输出环回的图像文件。

您肯定需要:


root

内核支持:回送(/ dev / block / loop0)和UMS(/ sys / devices / platform / usb_mass_storage /)
自定义应用可启用/禁用此功能,或者自定义初始化脚本始终导出图像文件
这里是一个易于破解的应用程序的示例,但需要做一些开发...一个需要将默认块设备(/ dev / block / mmcblk0pX)更改为loop0,并事先丢失loop0,然后进行构建。此外,如果未导出,则可以将其安装在Android设备上,例如在/ sdcard / fat <​​br />
这是对我的Galaxy Nexus的简短测试(处于恢复模式):

#create a 10mb image file and format it with FAT, name it testFat:
me@workstation:~$ dd if=/dev/zero of=/tmp/fat.img count=10 bs=1M
10+0 records in
10+0 records out
10485760 Bytes (10 MB) copied, 0,00699535 s, 1,5 GB/s
me@workstation:~$ mkfs.vfat -n fatTest /tmp/fat.img 
mkfs.vfat 3.0.9 (31 Jan 2010)
me@workstation:~$ file /tmp/fat.img
/tmp/fat.img: x86 boot sector, [...], label: "fatTest    ", FAT (16 bit)

#Push it to my phone, create loop0 from it and export it via UMS
me@workstation:~$ adb push /tmp/fat.img /sdcard/fat.img
5215 KB/s (10485760 bytes in 1.963s)
me@workstation:~$ adb shell
root@android # ls /sys/devices/platform/usb_mass_storage/lun0
file    power   ro      uevent
root@android # losetup /dev/block/loop0 /sdcard/fat.img
root@android # losetup
/dev/block/loop0: 0 /sdcard/fat.img
root@android # echo /dev/block/loop0 > /sys/devices/platform/usb_mass_storage/lun0/file 
root@android # exit

#See that it works. Yay!
me@workstation:~$ 
me@workstation:~$ mount
[...]
/dev/sdg on /media/fatTest type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks)
me@workstation:~$ dmesg
[137805.009285] sd 27:0:0:0: [sdg] 20480 512-byte logical blocks: (10.4 MB/10.0 MiB)
[137805.010024] sd 27:0:0:0: [sdg] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[137805.013446]  sdg:
me@workstation:~$


评论


我现在没有测试设备(GNexus),有人会这么友好,看看CM9中是否包含UMS?只要看看它是否可用:/ sys / devices / platform / usb_mass_storage / lun0 / file

–ce4
2012年7月27日12:38



早期的CM10似乎没有,所以我猜CM9也没有。

–eldarerathis
2012年7月27日在16:32



@eldarerathis:感谢您的光临!它可能被编译到另一个内核中,或者必须使自己能够运行。

–ce4
2012年7月28日在9:57

@ ce4这看起来很有希望,但是我很乐意看到更多详细信息来说明如何完成此操作。您是要永久性地对电话的存储空间进行分区,还是这是另一种解决方案?这种方法是否有任何缺点,例如包含文件系统的完整性?

–马特
2012年7月28日在17:47

我将手机用作闪存驱动器。我将其插入工作中的共享计算机,编辑文档,然后保存并继续。将文件传输到计算机然后再传输回来对我来说真的不起作用。我待会儿再聊。

–马特
2012年7月28日在19:33

#3 楼

这是TL; DR版本。很抱歉,Galaxy Nexus根本无法实现USB海量存储。

原因是USB海量存储提供了PC模块级别访问文件系统,并维护文件系统的完整性,它必须是互斥访问。这就是Android手机在USB大容量存储模式下卸载SD卡且应用无法使用SD卡上数据的原因。
Galaxy Nexus没有SD。卡。这是电话的大量内部存储。

MTP(请参阅@Zuul的出色解释)解决了这个问题,使电话和PC都可以访问文件而不必锁定电话。不利的一面是,您还没有获得专有的块级访问权限,并且还没有对MTP的操作系统支持。

如果这是一项功能,那么您就无法没有它,那么最好的选择是使用其他手机。并非偶然,这是我摆脱Galaxy Nexus并获得DROID RAZR MAXX的原因之一。

评论


“这就是为什么Android手机卸下SD卡的原因……”那些允许将sd(以及内部存储)同时安装到计算机和Android操作系统的应用程序又如何呢?我在Rezound上有一个这样的应用程序,它运行得很好。

–马特
2012年7月27日在5:41

我从未听说过类似的应用程序。得到它存在的证据?

–迈克尔·汉普顿
2012年7月27日在6:20

听起来真刺耳! google.hu/…

– R R
2012年7月27日在7:13

而且您从未丢失任何数据?那你真幸运

–迈克尔·汉普顿
2012年7月27日16:30

是的,这就是为什么系统一开始不允许它的原因。

–迈克尔·汉普顿
2012年7月28日在17:49

#4 楼

看来AOKP JB build 4具有:


“某些设备的USB大容量存储仿真(i9 *)”


我还没有使用过自己呢。

#5 楼

您可以尝试使用此XDA-Developers应用程序:

注意:此应用程序是在Ice Cream Sandwich Ports的早期开发的。目前,这些端口均未提供本地USB大容量存储支持,尽管如此,此应用仍被视为使用UMS的临时解决方法。因此,除非您使用的ICS或JB端口仍然不本地支持UMS,否则此应用程序对您来说不会很有趣。在这种情况下,会提供帮助:
该应用程序在启动设备后自动启动,并自动检测该设备何时通过USB连接到计算机。然后,通知栏会弹出一个通知,点击该通知,您将打开一个GUI来启用/禁用USB Mass Storage。几乎/几乎像原始UMS功能一样。

到目前为止,声音还不错-已知支持的设备列表中没有明确提及您的Galaxy Nexus。这并不一定意味着它将无法正常工作,只是目前尚不知道。应该值得一试。

评论


已经对此进行了讨论,请参阅OP注释。 las,这也是死胡同。 :(

–ce4
2012年7月30日20:11在

我找不到您所指的评论-但如果已经是众所周知的选择,我深表歉意。 “死胡同”意味着它不再起作用了?哦,天哪,我跳过了接下来的更新;)

– Izzy♦
2012年7月30日在20:26

没有冒犯的意思! :)的意思是“ FYI”。 “这里是apk”是指与您的XDA链接相同的线程。

–ce4
2012年7月30日在20:33

我们在主要的android聊天中进行了相当长的交谈。不知道历史记录是否足够长,但是如果您仍然可以访问它,则可以获得更多信息

–ce4
2012年7月30日在20:41

感谢您提供ce4的信息-不幸的是,我目前错过了深入研究它的时间。我只是看到MTP尚未完全关闭UMS,因此我很确定必须有一个可用的解决方案。我还记得一些在ICS及更高版本上再次启用UMS的线程。希望很快就会有事情发生-因为MTP似乎并不是每个人的答案。

– Izzy♦
2012年7月30日在20:47