Android 分区
与电脑硬盘相同,Android 上的存储器同样有多个分区(但是,建议不要在 Android 上尝试“手动切盘”)。
启动模式
在 Windows 电脑上,我们知道,启动时按 Enter/F2/F12 会打断正常启动,且可以进入另一个世界。在 Android 设备上,同样有非正常启动的模式。Recovery 模式可以刷入官方刷机包修复受损的系统,还可以清除数据;Fastboot 模式在解锁后将允许用户刷入自定义的镜像,实现系统的定制和 Root 权限的获取。
Fastboot
Fastboot 模式是 Bootloader 的一个启动方式。Bootloader 解锁后,可以使用 Fastboot 模式自定义刷机。
此文章的发布时间是 2022 年第一季度,相关内容于 2022/01/01 之后被验证。
请留意内容的时效性。
本文不是教程,你不需要亲自尝试其中的每一个操作。如果你不知道自己在做什么,那就不要做。
若阅读本文并执行相关操作后出现设备损坏、隐私泄露、数据丢失等情况,则机主需要自行承担损失。
Android 文件系统分区
引入
打开系统自带的文件管理器,我们可以看到许多文件。
▲ 文件管理器(就假装是系统自带的那个)
其中有应用的数据,有磁盘缓存,有照片录音,有接收的文件,甚至有一些被称为“系统文件”,千万不能删除的东西……
Android 很好,“毫无保留”地展示了用户的数据,不像苹果,导出照片都要使用专门的工具。这,应该就是系统中的全部文件了吧。
坐井观天!
你可曾想过,你安装的应用去了哪里?那些你痛恨而又“不能删除”的预装软件在哪?那些“不能修改”的游戏进度数据在哪?有那么多人想要获取 Root 权限,他们究竟想要修改什么?
你又可曾注意过,百度手机助手提醒你文件已下载到 /storage/emulated/0/Downloads/
,而不是 Downloads/
?
其实,打开文件管理器后看到的,根本就不是系统内所有文件,而只是“用户数据”部分,只是“用户数据”部分的冰山一角!
不妨安装 Root Explorer 文件管理器,一探究竟。【Root Explorer 下载】
原来,之前的文件管理器中所看到的目录,只是 /storage/emulated/0
。真正的最高层目录,是系统根目录。还有许多 .
开头的文件,系统自带的文件管理器是不显示的。
若设备有 Root 权限,在明确自己要做什么之前,不要将其授予文件管理器。对受保护文件不当的修改会阻止设备正常启动或使用。
▲ 存储与根目录
当然,你更有可能看到这个:
▲ Android 7 以上版本,根目录出现拒绝访问
进一步观察不难发现,不同的目录可能有不同的文件系统类型:/system
/vendor
目录有独立的存储空间;/data
的存储空间与 /storage/emulated/0
共享;/sys
本身就是可读写区域,且没有存储空间限制信息;根目录下大多数地方创建的文件重启后会消失……这意味着,根目录下不仅仅是简单的文件夹和文件,而是有不同的分区。
分区与挂载
在 Windows 上,我们可以将硬盘分为多个分区。
▲ 硬盘分区
要访问分区中的文件,有两种方式。一种是指派盘符(新分区产生后,系统会自动完成这一步,除非所有大写字母已经分配完),然后通过盘符访问(如 G:\xxx
),这种方式下,可移动外接设备中文件的路径可能会改变。
另一种不太常用,是将磁盘分区装入空白 NTFS 文件夹中(如 E:\mnt\可回收垃圾\xxx
)。也就是说,在另一个已分配盘符的分区中新建文件夹,将该文件夹作为访问该磁盘分区的路径。若对可移动设备采取这种分配方式,则其中文件的路径将固定下来。
▲ 固定分配的文件夹路径
Android 基于 Linux 内核。在 Linux 内,没有盘符这一概念,只有唯一的根目录 /
。一切分区(包括外接存储设备)均以装入空文件夹的方式装载到某一目录。这一操作称为挂载(mounting)。
同时,挂载也可以被看成是打开分区的操作,因而有不同的打开方式,常见的有只读(r/o
,不能写入)、读写(r/w
)和装入内存盘(可以写入,断电或重启时丢弃更改)。
值得一提的是,由于 Linux 中每个设备都有对应的文件路径,被挂载的分区也有自己的路径(如 /dev/block/sda1
/dev/block/mmcblk0p6
/emmc@android
)。这些路径在文件管理器中表现为一个文件。挂载前,无法直接修改其中的数据。
常见的分区
不同的 Android 设备具有不同的分区表,其具体分区也不太一样。此处列举一些常见的分区。
分区名 | Scatter 名称 | 镜像文件名 | 挂载模式 | 挂载路径 | 用途 |
---|---|---|---|---|---|
boot | BOOTIMG | boot.img |
- | - | 启动镜像[注1] |
kenrel | - | kenrel.img |
- | - | 系统内核 |
rootfs | - | rootfs.img |
r/o |
/ |
根目录自有的文件 |
ramdisk | - | ramdisk.img |
r/o |
/init |
启动时最先挂载的一批程序文件[注2] |
system | ANDROID | system.img |
r/o |
/system |
系统分区 |
recovery | RECOVERY | recovery.img |
- | - | 恢复模式启动镜像[注3] |
hboot | UBOOT | lk.bin |
- | - | 启动引导程序 |
splash1 | LOGO | logo.bin |
- | - | 开机第一屏幕 |
nvram | NVRAM | nvram.bin |
RAM |
- | MAC 地址等硬件信息[注4] |
cache | CACHE | cache.img |
r/w |
/cache |
缓存 |
userdata | USERDATA | data.img |
r/w |
/data |
用户数据 |
- | - | sdcard.img |
r/w |
/sdcard |
内置存储空间[注5] |
boot.img
是kenrel.img
ramdisk.img
rootfs.img
打包在一起的产物。较老的机型中,这几个分区是分开的。- 不是每个机型都存在 ramdisk。存在该分区的设备才能正常使用 Magisk。
- recovery 分区和 boot 分区结构相同。
- nvram 分区不一定存在,但开机后 NVRAM 一定存在。
- sdcard 应当是 userdata 的一部分,路径为
/data/media/0
(/sdcard/Android/obb
例外,对应/data/media/obb
)。只有极少数模拟器中,内置 sdcard 有独立分区。挂载路径/sdcard
为快捷方式,实际路径应该是/storage/emulated/0
。 /
/sys
下的自有内容从 rootfs 分区内读出。对其进行的修改会存储于内存(运行内存)中,故重启后会还原。
\large{\text{什么是恢复出厂设置?}}
正常情况下,大多数分区保持只读且为原厂状态。所谓恢复出厂设置,只是格式化 userdata 分区清除使用痕迹。
恢复出厂设置不能还原通过刷机、Root 等手段对 system、boot 分区进行的更改。
启动模式
尝试任何非正常启动模式前,请确认自己知道如何强制关机或重启设备,并且已经尝试成功过。常见方法有这些:
- 拔掉充电器,然后拆除内置电池,将会关机。(适用于电池可拆卸的设备)
- 长按电源按钮 10s,强制重启。(适用于大多数设备)
- 同时按住电源按钮和音量下按钮,保持 10s,强制重启。(主要为三星设备)
- 同时按住电源按钮和两个音量按钮,待屏幕熄灭后立刻放开,即为强制关机。(适用于大多数设备)
- 同时按住电源按钮和音量上按钮,待屏幕熄灭后立刻放开,即为强制关机。(适用于一加手机)
- 用细小物体(建议取卡针)戳麦克风孔(或电源按钮附近的一个孔),触发其中的开关。(适用于学习机、媒体播放器、移动数据终端等设备)
提示:不要用缝衣针的尖端戳麦克风孔,以免损坏麦克风。
引入
电脑系统炸了,我们会插入启动盘,进入 Windows PE 或便携版 Linux 系统,执行修复。
要为电脑安装新的系统,我们会插入安装介质,从启动菜单中选择启动选项,安装新的系统。
在 Android 设备中,同样存在几种非正常启动的启动模式。
本节中的图像可能并非真实截图或照片,仅供参考。
安全模式
若系统仍能进入,但由于装错程序或设置失误导致无法正常使用,则可以使用安全模式恢复。下面是常见情形:
- 使用第三方锁屏软件出现事故。
- 设备安装恶意程序后被锁住。
- 正常安装软件或更改系统设置后出现无限重启的故障。
安全模式的常见启动方法有两个:
- 若系统界面仍能使用,则在开机状态下长按电源键,然后长按弹出菜单中的“关机”(8.0 以上系统也可以长按“重新启动”)。系统将弹出安全模式提示。点击“确定”即可重启进入。
- 关机状态下长按电源键,待屏幕亮起后,放开电源键,立即按住音量下,直到系统开始初始化(开机动画开始出现)。系统将继续启动进入安全模式。
根据机型不同,安全模式有以下两种不同的效果:
- 所有第三方应用被暂时停用。系统设置暂时恢复默认值,壁纸变为黑色,左下角出现“安全模式”字样。
- 系统初始化时所有第三方应用停用,应用优化阶段重新启用。第三方应用不能开机自启。壁纸不变,且左下角无“安全模式”字样。
有的设备可能不具备这一功能。
值得注意的是,若设备上安装了 Magisk,则以安全模式启动时,Magisk 会禁用所有模块(包括 MagiskHide)。若安全模式期间打开过 Magisk 应用,则再次重启后,Magisk 将不会恢复被禁用的模块。
Recovery 恢复模式
恢复模式,顾名思义,是系统的一个备用启动模式,用于恢复系统。在系统无 A/B 分区(无缝系统更新)的情况下,系统更新也在这一模式下进行。
▲ 常见的原厂恢复模式
通常,原厂的恢复模式具有以下功能:
- 从外置 SD 卡或 ADB 传入系统更新包,完成系统更新(系统损坏或 OTA 更新事故时,可以传入全量更新包恢复系统)。
为了确保设备安全,更新包必须是原厂的,经过原厂签名,否则更新无法成功。 - 清除缓存。
- 清除数据(双清),以恢复出厂设置。如果安全模式无法修复系统问题,则这是保全手机的一个备用方案。
若恢复出厂设置也无法修复系统的问题,说明 boot/system 等系统分区遭到破坏。此时需要使用恢复模式进行系统更新。
确实存在少数设备,“清除数据”功能能够同时清除用户数据和锁屏密码。这种情况下锁屏密码只能保护数据,而不能保护设备。而其他设备中,处于锁定状态时,恢复模式中不会显示恢复出厂设置选项。
常见进入恢复模式的方法如下:
- 在开机状态下,使用 ADB 发送命令
adb reboot recovery
。 - 关机状态下,同时按住电源键和音量增大(有的机型还需要按实体 Home 键),直到屏幕亮起。
- [MediaTek 设备] 关机状态下,同时按住电源键和音量增大,屏幕亮起后,按音量增大键选择 Recovery Mode,然后按音量减小键确认。
可以通过刷机等手段为设备刷入第三方恢复模式系统,如 TWRP。这些系统功能非常强大,允许自定义刷机、文件修改、完全备份等操作,同时支持触屏控制,更加人性化。
不建议在主力机上刷入第三方恢复模式系统。这会使得拿到设备的任何人能够直接导出设备内的数据或进行自定义刷机,彻底破坏设备安全性。
TWRP 需要专门与某一机型适配后才能使用,故不要借用其他机型的 TWRP 镜像。
Fastboot 快速启动
快速启动,是 Bootloader 即启动引导程序的一个启动方式,故没有对应的启动分区。进入该模式后,移动设备无法继续操作,需要连接电脑,通过电脑命令行完成进一步操作。
若未收到电脑发出的重启指令,设备将一直处于 Fastboot 模式,不会重启。可以使用强制重启或关机的方法让其退出 Fastboot 模式。
为了保证安全性,Bootloader 默认为锁定状态,不能进行刷机。有的设备制造商为了阻止或减少刷机,会另外增加解锁码限制,用户需要提供申请得到的解锁码才能解锁。
如果打算进行刷机(而不是仅仅看看 Fastboot 长啥样),在进入 Fastboot 模式前,请先进入系统设置的开发者选项,检查是否有“允许 OEM 解锁”选项(该选项通常在第一组内较靠前的位置)。如果有,这表明你的设备不需要解锁码就可以解锁,那么开启该选项,然后按提示输入设备的锁屏密码,随后进入 Fastboot 模式就可以直接解锁;如果没有,表明设备可能需要解锁码。
打开“允许 OEM 解锁”开关后,系统的数据加密将失效。
进入 Fastboot 的常见方式如下:
- 在开机状态下,使用 ADB 发送命令
adb reboot bootloader
。 - 关机状态下,同时按住电源键和音量减小(有的机型还需要按实体 Home 键),直到屏幕亮起。
- [MediaTek 设备] 关机状态下,同时按住电源键和音量增大,屏幕亮起后,按音量增大键选择 Fastboot Mode,然后按音量减小键确认。
三星设备中,Download Mode 取代了 Fastboot。可以使用官方工具 Odin 进行刷机。
设备成功进入 Fastboot 模式后,将显示 Fastboot 字样。
▲ 常见的 Fastboot 界面
确保已安装 Android Platform Tools。随后执行 fastboot devices
命令。
C:\Users\[redacted]>fastboot devices
0123456789ABCDEF fastboot
\large{\text{上述命令无输出的解决方法}}
- 打开 Windows 设备管理器。【搜索“Windows 设备管理器”】
- 找到无法识别的 “Android” 设备,右键,选择“更新驱动程序”。
- 选择“浏览我的电脑以查找驱动程序”“让我从计算机的可用驱动程序列表中选取”。
- 选择 Android Composite ADB Interface。
如果这一步系统找不到驱动程序,则系统存在 ADB 驱动缺失问题。请搜索“adb 驱动缺失”,然后像安装 ADB 驱动一样安装 Fastboot 的驱动。 - 完成后,将看到设备为可用状态。
- 重新执行
fastboot devices
,将能够看到设备。
随后可以进行刷机操作。
Bootloader 解锁
为防止未经授权的用户直接解锁 Bootloader,然后用刷机方式移除锁屏,获取数据,Bootloader 解锁后,用户数据将被清空。请做好备份,并谨慎操作。
Bootloader 解锁后,设备保修可能会失效!
输入命令 fastboot oem unlock
[5.1 及以下] 或 fastboot flashing unlock
[6.0 及以上] 执行解锁。此时,设备上会出现确认界面。请认真阅读所有文字,然后按音量增大键确认,或按音量减小键取消。
确认后观察电脑上的输出。OKAY
则为解锁成功。
完成后,输入命令 fastboot oem lks
再次确认。若输出状态 lks=0
,则解锁成功。(注意较老设备可能没有 oem lks
命令,此时请自行跳过这一步)
若解锁不成功,则设备可能是需要解锁码,请查看制造商官网的指引进行申请,或直接使用官方提供的工具解锁。若官方明确不提供解锁服务,请知难而退。
一旦解锁成功,再次重启后,将出现数据清空页面。数据清空完成后,设备再次重启,进入系统。
由于解锁后,未经授权的用户可以随意进行自定义刷机,设备是不安全的。
▲ MTK 设备解锁后开机弹出的警告
刷入镜像
自定义刷机有风险,尤其是刷入非官方镜像时。此处不当操作,甚至可以破坏 Bootloader 本身,导致 Fastboot 模式无法进入。出现这种情况的设备称为“黑砖”(Hardbrick)。
黑砖设备可以用 EDL(高通)或 Preloader(MTK)进行抢救,但尽量不要弄到这一步。
刷机前,若可能,强烈建议前往官网下载全量系统更新包。若刷机弄坏系统,可以重新刷入全量包修复。
执行命令 fastboot flash <分区名> <镜像文件>
刷入。常见分区名见上文。
执行命令 fastboot boot <镜像文件>
,可以将镜像暂时作为 boot 分区启动,这常用来测试 boot.img 镜像能否正常引导。重启后将会还原原来的 boot 分区。(注意较老设备可能没有这一命令)
Fastboot 模式不能回读系统中当前的镜像。
重新启动
执行 fastboot reboot
,设备将立即重新启动。
锁定 Bootloader
如果只是刷入第三方系统,后续无再次刷机与深度玩机的需求,在测试新系统无问题后,可以锁定 Bootloader,使设备重新变得安全。
如果新的系统中有 Magisk 等 Root 权限装置,则在锁定前,运行 fastboot oem disable-verity
,关闭启动与系统分区的验证,以免对其修改后,验证失败导致设备无法启动。
然后运行 fastboot oem lock
。设备将出现确认界面,按音量增大确认。这同样会清空数据。
完成后,执行 fastboot reboot
,设备将立即重新启动。
EDL 紧急下载
此模式为高通芯片的设备所独有。
设备成为黑砖后,此模式仍然可以使用。
通过插入特殊的“工程线”,设备将进入 EDL 紧急下载模式(也称高通 9008 模式)。此时,可以用 fastboot 或专门的工具进行刷机,以修复系统。此处不过多介绍相关内容。
刷机过程中,屏幕全程无显示。
此模式是“厂刷”模式之一,能操作系统底层数据。正常情况下,请不要使用这一模式刷机。
若迫不得已,请务必谨慎操作。一旦误删设备 IMEI、基带校准等数据,通常只能返厂维修。
MediaTek Preloader
此模式为 MTK 设备所独有。
将设备在关机状态下插入电脑,从提示音可以发现系统短暂地识别了一个 USB 设备。这就是 Preloader 模式。设备成为黑砖后,此模式仍然可以使用。
Preloader 是闪存中的一个程序。若这个程序也被破坏,则连接数据线时,设备将改用无法被破坏的 Bootrom 模式启动,两者区别不大。
SP Flash Tool 可以在设备进入 Preloader 模式后与其交互,进行刷机。此时 Preloader 模式将保持到刷机操作结束。
该模式下,也可以回读闪存中已存在的镜像。这是最直接的系统镜像备份方法。
此模式是“厂刷”模式之一,能操作系统底层数据。如果系统为 5.1 及以下,则更推荐用这种方法进行局部刷机,因为这不会清空数据。
若系统为 6.0 及以上,则不解锁 Bootloader 的情况下这样刷机可能导致无法启动,重新刷回原来的镜像即可修复。
使用时请务必谨慎操作。一旦误删设备 IMEI、基带校准等数据而没有备份,通常只能返厂维修。
Comments | NOTHING