几个月前,Google 在Linux内核的官方AOSP分支中添加了一个名为“ SDCardFS ”的东西。当时,此举仅受到某些内核开发人员的注意,但在大多数用户的关注下飞过。考虑到大多数用户(包括我自己)并不真正知道Android OS及其内核的内幕,这一事实就不足为奇了。但是,最新一期的Android Developers Backstage播客再次引起了人们对该主题的兴趣。该播客由Chet Haase(Google的高级软件工程师)主持,探讨了对内核最近和即将进行的更改。展会上有一位Android团队的Linux内核开发人员Rom Lemarchand。二人主要讨论了为适应A / B更新所做的更改,但是在该集的最后5分钟,Lemarchand先生谈到了他的团队正在研究的“下一件大事” – SDCardFS。
我必须承认,在收听此播客后,我了解了SDCardFS的存在。当然,正如最近的Reddit主题所示,我并不是唯一一个对此主题感兴趣的人。但是,我对播客中提供的基本解释不满意,为了消除周围散布的一些错误信息,我进行了一些研究,并与一些具有相关知识的专家进行了交谈。物。
非常感谢软件开发人员Michal Kowalczyk在本文中贡献了自己的知识并花时间回答了我的问题。
马上就必须消除一些误解,否则,本文的其余部分将非常令人困惑。讨论SD卡和Android手机的历史记录将很有帮助。
在Android手机的早期,几乎所有设备都依赖于使用microSD卡进行存储。这是由于当时的手机出厂时内部存储容量很小。但是,至少与内部闪存可以读取/写入数据的速度相比,用于存储应用程序的SD卡通常无法提供出色的用户体验。因此,越来越多地将SD卡用于外部数据存储,这已成为Google用户的关注点。
由于SD卡作为外部存储设备的泛滥,Android的存储命名约定基于以下事实:每个设备都有一个实际的物理microSD卡插槽。但是,即使在不具有SD卡插槽的设备上,/ sdcard标签仍然用于指向实际的内部存储芯片。更令人困惑的事实是,既使用物理SD卡又使用大容量存储芯片进行存储的设备通常会根据SD卡来命名其分区。例如,在这些设备中,/ sdcard挂载点将引用实际的内部存储芯片,而类似/ storage / sdcard1的引用将引用物理外部卡。
因此,即使实际上将microSD卡视为外部存储设备,命名约定也导致“ SDCard”在任何实际使用物理卡的情况下都存在很长时间。由于将应用程序数据及其媒体隔离在两个分区之间,因此与存储的混淆也使应用程序开发人员感到头疼。
早期内部存储芯片的存储空间不足,导致用户沮丧地发现他们无法再安装应用程序(由于/ data分区已满)。同时,其更大容量的microSD卡被降级为仅保留媒体(例如照片,音乐和电影)。曾经浏览过我们论坛的用户可能会记住以下名称:Link2SD和Apps2SD。这些(根)解决方案使用户能够将其应用程序及其数据全部安装在物理SD卡上。但是这些都不是完美的解决方案,因此Google必须介入。
著名的是,Google很早就拔下了SD卡。Nexus One仍然是唯一带有microSD卡插槽的Nexus设备(并且由于Nexus品牌实际上已经失效,因此永远存在)。有了Nexus S,现在只有一个用于存储所有应用程序数据和媒体的统一分区-/ data分区。现在曾经被称为/ sdcard挂载点的现在只是指位于数据分区-/ data / media / 0中的虚拟文件系统(按照下面讨论的FUSE协议实现)。
为了保持兼容性并减少混乱,Google仍然使用此虚拟的“ sdcard”分区来保存媒体。但是,既然此“ sdcard”虚拟分区实际上位于/ data中,则其中存储的所有内容都将计入内部存储芯片的存储空间。因此,由OEM来考虑分配给应用程序(/ data)与媒体(/ data / media)多少空间。
Google希望制造商能效仿他们,并摆脱SD卡。值得庆幸的是,随着时间的流逝,电话制造商能够以更高的容量采购这些组件,同时又保持成本效益,因此对SD卡的需求开始逐渐减少。但是命名约定一直在坚持,以减少开发人员和OEM不得不做出调整的工作量。当前,当我们提到“外部存储”时,我们指的是以下两种情况之一:实际的可移动microSD卡或/ data / media中的虚拟“ SDCard”分区。实际上,其中的后者实际上是内部存储,但Google的命名约定因用户可以访问此数据(例如插入计算机时)而有所区别。
当前,当我们提到“外部存储”时,我们指的是以下两种情况之一:实际的可移动microSD卡或/ data / media中的虚拟“ SDCard”分区。
现在,“ sdcard”被视为虚拟文件系统,这意味着它可以被格式化为Google想要的任何文件系统。从Nexus S和Android 2.3开始,Google选择将“ sdcard”格式化为VFAT(虚拟FAT)。当时这样做很有意义,因为安装VFAT将使几乎所有计算机都可以访问手机中存储的数据。但是,此初始实施存在两个主要问题。
第一个主要涉及最终用户(您)。为了将设备连接到计算机,您将使用USB Mass Storage Mode传输数据。但是,这要求Android设备先卸载虚拟分区,然后计算机才能访问数据。如果用户想在插入电源的情况下使用其设备,则许多东西将显示为不可用。