解决方案:Android 采用存储(Adoptable Storage)详解
背景
最近我在使用 LineageOS 14.1 版本(即坚果果)时发现了一些有趣的问题。为了给自己的手机获得更多可用空间,我将 SD 卡分割成两个部分,并对其中的一个部分进行了加密处理。然而,在进行这个操作之后,我遇到了一些意想不到的麻烦。
- 一个采用卡槽连接电脑后无法访问;
- 另一个则通过 MTP 网络盘可以被电脑正常识别出来。
在遇到以上问题后,我决定通过网络查找相关信息。从搜索结果中我发现了一些有趣的内容,并最终解决了自己的困惑。今天我想与大家分享一下整个过程及我的发现。
1. 设备描述
根据个人使用经历,我有一部支持 adoptable storage 的手机。具体来说,手机型号以及使用的 LineageOS 版本分别为三星 Galaxy S5 及 LineageOS 14.1(即坚果果)。
– 手机存储大小:2GB 内存 + 32GB SD 卡
– 操作系统:LineageOS 14.1 (Nougat)
– 标签及分区工具:
– 使用 Tag: adoptable-storage
相关联的技术和知识;
– 分区方式是将 SD 卡分为两个大小不同的部分
2. 初始问题与操作步骤
为了在手机上获得更大的内部存储空间,我决定将我的 SD 卡分成了两块:一块用来保持手机的操作系统与应用,另一块则用于存储文件数据。
- 分割 SD 卡以增加内部可用性
- 对 SD 存储卡分配两个大小不等的分区, 其中一个是 16MB,另一个则是剩余的所有空间。
- 执行
su
命令来完成 mount 和格式化操作。 - 更改为 ext4 文件系统
具体步骤:
adb shell
su
fdisk /dev/block/mmcblk0p2 # 将 SD 卡分区为:16MB 和剩余所有空间
wipe /dev/block/bootdevice/by-name/userdata
mkfs.ext4 /dev/block/mmcblk0p3
mount -o discard /dev/block/mmcblk0p3 /storage/media/2855-FB6D
这里需要注意的是,我选择将 16MB 的分区作为第二个分区的主要原因是想要用这个小分区来存放一些其他重要信息。同时,我希望采用的存储方案能够支持“外部存储”模式。
3. 存储配置后的问题
完成上述步骤之后,我的设备出现了一些不寻常的情况:
- 16MB 分区无法被电脑读取,即便使用特定文件管理器也无法访问它。
- 使用 MTP 模式时,剩余大分区可以正常从设备共享到电脑。
4. 解决方案及原因
最后经过多方查找信息,我找到了答案。这种现象实际上是因为 Android 设备中的「采用存储(Adoptable Storage)」功能所致。
在使用「adopted-storage」模式时:
- 内部采用的分区会被加密,并且仅当手机或平板处于可用状态下,PC 通过 USB 数据线连接时才能被访问。
- 这种设置能够确保 SD 卡内部的信息不仅限于文件系统上的数据,而是整个包含内容的全盘加密。
5. 详细分析
- 细粒度控制:Android 系统在采用存储模式下能更精细地对 SD 卡进行管理和访问权限控制。
-
将 16MB 分区用于存放关键系统信息如密码、重要配置数据等,而较大的分区作为常用的数据存储空间。
-
与 PC 程序的不兼容性:由于加密机制,普通计算机(尤其是非特定操作系统),在未提供密钥的情况下无法直接访问到内容。即使卡通过读卡器连接也需具备相应解密能力。
6. 结论
总结以上分析过程及问题解决的关键点:
- 适配性:针对采用存储设备,目前仅有 Android 系统可以正确处理其加密机制。
- 额外的小分区(16MB):它主要起到在特定情况下作为控制或配置储存的用途。
通过这篇文章我希望能帮助到仍在探索和尝试如何高效利用外部存储的同学和朋友们。
最后再次提醒自己:采用 SD 卡进行扩展时应该注意一些安全性和加密的问题,确保文件能够被妥善管理并且不会丢失重要数据。