Tomorrow.Comes.Today

如何让Sailfish的安卓虚拟层将数据写到真实TF卡


由于前几天把手机丢了,干脆拿个机子稍微纪录一下:

如何让Sailfish系统安卓虚拟层写数据到TF卡

概述

  1. 格式化为ext4/btrf格式
  2. 挂载TF卡
  3. 将TF卡与/home/nemo/android_storage绑定,实现数据写入TF卡
  4. 重启与权限问题

警告

本教程并不对任何造成的后果做出担保。此方法在本人Jolla手机(系统版本1.1.1.27~2.0.0.10)上测试无任何问题。

格式化

权限要求,内存卡必须格式化为ext4或者btrf格式。格式话后Windows/Mac就认不出来了。不过可以用Jolla直接连接。反正我上一部手机,TF卡从来没需要拿出来连电脑过。

Windows

  1. 下载MiniTool Partition Wizard , 下载"Free Edition"即可
  2. 安装软件, 插入SD卡到电脑, 打开软件
  3. 点击"Launch Application"

    MiniToolPartitionWizardStartUp

  4. 选中你的SD卡. 注意不要点错! 下图中"G:(FAT)", G为磁盘符, 跟你在"我的电脑"中显示的磁盘符一致, 存储大小基本一致, 不要选错!

    MiniToolPartitionWizardSelectDisk

  5. 选择上方的"Delete"图标

    MiniToolPartitionWizardDeleteDisk

  6. 在刚刚SD卡的那个进图条上右键, 选择"Create"

    MiniToolPartitionWizardCreateMenu

  7. "Create As"选择Primary, "File System"选择Ext4, 其它默认即可.

    MiniToolPartitionWizardCreate

  8. 选择"Apply"

    MiniToolPartitionWizardApply

  9. 等待其完成即可. 磁盘会从我的电脑中消失, 软件会显示"Ext4"

    MiniToolPartitionWizardWaiting

完成, 显示格式为ext4.

MiniToolPartitionWizardDone

Ubuntu/Linux

主要使用GParted, 神器啊!!!其它Unix-like系统请自行Google安装方法:)

GPatred官网有介绍各Linux系统安装方法

Ubuntu执行sudo apt-get install gparted即可, 然后在Dash中搜索GParted即可

  1. 切换到sdb区

    switchtosdb

  2. umount掉SD卡

    umount

  3. 删除分区

    delete

  4. 点钩钩图标, 让更改生效

    DoIt

  5. 右键选择New, 创建新分区

    newpart

  6. 重点是Create as: Primary PartitionFile System: ext4

    newDetail

  7. 点钩钩, 使其生效

    DoIt

  8. 完成, 已经变成ext4格式了

    FormatDone

同步, 清空与挂载

第二步是将Jolla手机中原安卓应用数据同步到SD卡中, 并建造挂载点

  1. 插入TF卡到Jolla, Jolla打开Terminal应用. 你需要先打开Jolla的开发者模式.(设置 (Settings) ->开发者模式 (Developer mode) ) 打开后开启同页面下方的Remote connection, 输入你的root密码,保存 (Save) 即可)
  2. 打开Terminal, 输入"devel-su", 回车, "Password"输入的密码为"设置"-"系统"-"开发者模式"-"移动连接(Remote connection)"下面你自己填写的密码. 输入密码的时候屏幕不会显示任何东西, 输入完毕回车即可. 这时屏幕看起来像这个样子:

    [nemo@Jolla ~]$ devel-su
    Password:
    [root@Jolla nemo]#
    

    注意方括号后面"$"符号变成了"#"符号

  3. 创建挂载点, 代码:

    mkdir /mnt/sd
    
  4. 挂载TF卡到挂载点, 代码:

    mount /dev/mmcblk1p1 /mnt/sd
    
  5. 创建用来存储的文件夹

    mkdir /mnt/sd/.android
    chmod 777 /mnt/sd/.android
    
  6. 将原始数据"同步"到SD卡. rsync可以拷贝文件并保持其权限.

    rsync -a /data/media/ /mnt/sd/.android
    

    Sailfish升级时改过名字。如果没有/data/media/文件夹,则使用下面这个命令。

    rsync -a /data/sdcard/ /mnt/sd/.android
    

    这个命令可能会跑一会儿。如果你真的不在乎原先android上的数据,可以直接跳过这一步。

  7. 清空原本的文件夹

    yes | rm -rf /data/media/*
    

    跟上面一样,这里的media可能需要改为sdcard

  8. 挂载TF卡

    mount /dev/mmcblk1p1 /mnt/sd
    
  9. 绑定文件夹

    mount -o bind /mnt/sd/.android /data/media
    

    这样当系统往/data/media写入信息时,实际上写入了/mnt/sd/.android,也就是我们内存卡的.adnroid

    同样别忘了你可能需要将media改为sdcard

  10. 验证:

    先打住。用FileBrowser前往SD Card,创建一个叫0的文件夹

    然后前往Home -> android_storage,看里面有没有一个叫0的文件夹。没有的话……请不要继续往下了, 任务失败!

重启与权限问题

只大概说一下,不想灌输一大堆bash脚本知识……

  1. 每次重启后需要进入终端,进入root权限,执行

    mount /dev/mmcblk1p1 /mnt/sd
    
  2. 每次重启安卓支持(重启,或者你用工具重启),都要重新绑定。重新绑定前需要清空~/android_storage文件夹。别一手抖在已经绑定好的状态下清空,不然你数据就全丢了。一个办法就是之前的那个0文件夹,作为一个标志吧,别删了。

    mount -o bind /mnt/sd/.android /data/media
    
  3. 豌豆荚之类的下载完安装包后,安装提示已损坏。其实是权限问题。执行这行代码即可

    chmod 777 -R /home/nemo/android_storage
    

就酱。对可能造成的问题本人不做任何承诺,也不承担任何责任。

喜欢请打赏,感谢支持。

部分参考自maemo.org,里面有讲如何写一个service自动挂载,供有兴趣的机油研究啦,在这里说只会把简单问题绕晕而已……


TylerTemp

TylerTemp是一只Python程序员。你可以在这些地方找到我哦:      

如果你喜欢我的作品,你可以买我一杯啤酒,让我做的更好!   |   Flattr this

回到顶部