![[基础预科] Android 分区、启动模式、Fastboot](/_astro/hero.CxUhvkh1_ZdRhDs.webp)

[基础预科] Android 分区、启动模式、Fastboot
电脑上, 硬盘有多个分区,启动时有不同的启动选项,在 Android 上亦然。本文是关于 Android 分区、启动模式和 Fastboot 模式使用方法的预科内容。
Android 分区
与电脑硬盘相同,Android 上的存储器同样有多个分区(但是,建议不要在 Android 上尝试“手动切盘”)。
启动模式
在 Windows 电脑上,我们知道,启动时按 Enter/F2/F12 会打断正常启动,且可以进入另一个世界。在 Android 设备上,同样有非正常启动的模式。Recovery 模式可以刷入官方刷机包修复受损的系统,还可以清除数据;Fastboot 模式在解锁后将允许用户刷入自定义的镜像,实现系统的定制和 Root 权限的获取。
Fastboot
Fastboot 模式是 Bootloader 的一个启动方式。Bootloader 解锁后,可以使用 Fastboot 模式自定义刷机。
Android 文件系统分区#
引入#
打开系统自带的文件管理器,我们可以看到许多文件。
其中有应用的数据,有磁盘缓存,有照片录音,有接收的文件,甚至有一些被称为“系统文件”,千万不能删除的东西……
Android 很好,“毫无保留”地展示了用户的数据,不像苹果,导出照片都要使用专门的工具。这,应该就是系统中的全部文件了吧。
坐井观天!
你可曾想过,你安装的应用去了哪里?那些你痛恨而又“不能删除”的预装软件在哪?那些“不能修改”的游戏进度数据在哪?有那么多人想要获取 Root 权限,他们究竟想要修改什么?
你又可曾注意过,百度手机助手提醒你文件已下载到 /storage/emulated/0/Downloads/
,而不是 Downloads/
?
其实,打开文件管理器后看到的,根本就不是系统内所有文件,而只是“用户数据”部分,只是“用户数据”部分的冰山一角!
不妨安装 Root Explorer 文件管理器,一探究竟。【Root Explorer 下载】 ↗
原来,之前的文件管理器中所看到的目录,只是 /storage/emulated/0
。真正的最高层目录,是系统根目录。还有许多 .
开头的文件,系统自带的文件管理器是不显示的。
当然,你更有可能看到这个:
进一步观察不难发现,不同的目录可能有不同的文件系统类型:/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 分区内读出。对其进行的修改会存储于内存(运行内存)中,故重启后会还原。
启动模式#
引入#
电脑系统炸了,我们会插入启动盘,进入 Windows PE 或便携版 Linux 系统,执行修复。
要为电脑安装新的系统,我们会插入安装介质,从启动菜单中选择启动选项,安装新的系统。
在 Android 设备中,同样存在几种非正常启动的启动模式。
安全模式#
若系统仍能进入,但由于装错程序或设置失误导致无法正常使用,则可以使用安全模式恢复。下面是常见情形:
- 使用第三方锁屏软件出现事故。
- 设备安装恶意程序后被锁住。
- 正常安装软件或更改系统设置后出现无限重启的故障。
安全模式的常见启动方法有两个:
- 若系统界面仍能使用,则在开机状态下长按电源键,然后长按弹出菜单中的“关机”(8.0 以上系统也可以长按“重新启动”)。系统将弹出安全模式提示。点击“确定”即可重启进入。
- 关机状态下长按电源键,待屏幕亮起后,放开电源键,立即按住音量下,直到系统开始初始化(开机动画开始出现)。系统将继续启动进入安全模式。
根据机型不同,安全模式有以下两种不同的效果:
- 所有第三方应用被暂时停用。系统设置暂时恢复默认值,壁纸变为黑色,左下角出现“安全模式”字样。
- 系统初始化时所有第三方应用停用,应用优化阶段重新启用。第三方应用不能开机自启。壁纸不变,且左下角无“安全模式”字样。
有的设备可能不具备这一功能。
值得注意的是,若设备上安装了 Magisk,则以安全模式启动时,Magisk 会禁用所有模块(包括 MagiskHide)。若安全模式期间打开过 Magisk 应用,则再次重启后,Magisk 将不会恢复被禁用的模块。
Recovery 恢复模式#
恢复模式,顾名思义,是系统的一个备用启动模式,用于恢复系统。在系统无 A/B 分区(无缝系统更新)的情况下,系统更新也在这一模式下进行。
通常,原厂的恢复模式具有以下功能:
- 从外置 SD 卡或 ADB 传入系统更新包,完成系统更新(系统损坏或 OTA 更新事故时,可以传入全量更新包恢复系统)。 为了确保设备安全,更新包必须是原厂的,经过原厂签名,否则更新无法成功。
- 清除缓存。
- 清除数据(双清),以恢复出厂设置。如果安全模式无法修复系统问题,则这是保全手机的一个备用方案。
常见进入恢复模式的方法如下:
- 在开机状态下,使用 ADB 发送命令
adb reboot recovery
。 - 关机状态下,同时按住电源键和音量增大(有的机型还需要按实体 Home 键),直到屏幕亮起。
- [MediaTek 设备] 关机状态下,同时按住电源键和音量增大,屏幕亮起后,按音量增大键选择 Recovery Mode,然后按音量减小键确认。
可以通过刷机等手段为设备刷入第三方恢复模式系统,如 TWRP。这些系统功能非常强大,允许自定义刷机、文件修改、完全备份等操作,同时支持触屏控制,更加人性化。
Fastboot 快速启动#
快速启动,是 Bootloader 即启动引导程序的一个启动方式,故没有对应的启动分区。进入该模式后,移动设备无法继续操作,需要连接电脑,通过电脑命令行完成进一步操作。
为了保证安全性,Bootloader 默认为锁定状态,不能进行刷机。有的设备制造商为了阻止或减少刷机,会另外增加解锁码限制,用户需要提供申请得到的解锁码才能解锁。
如果打算进行刷机(而不是仅仅看看 Fastboot 长啥样),在进入 Fastboot 模式前,请先进入系统设置的开发者选项,检查是否有“允许 OEM 解锁”选项(该选项通常在第一组内较靠前的位置)。如果有,这表明你的设备不需要解锁码就可以解锁,那么开启该选项,然后按提示输入设备的锁屏密码,随后进入 Fastboot 模式就可以直接解锁;如果没有,表明设备可能需要解锁码。
进入 Fastboot 的常见方式如下:
- 在开机状态下,使用 ADB 发送命令
adb reboot bootloader
。 - 关机状态下,同时按住电源键和音量减小(有的机型还需要按实体 Home 键),直到屏幕亮起。
- [MediaTek 设备] 关机状态下,同时按住电源键和音量增大,屏幕亮起后,按音量增大键选择 Fastboot Mode,然后按音量减小键确认。
设备成功进入 Fastboot 模式后,将显示 Fastboot 字样。
确保已安装 Android Platform Tools。随后执行 fastboot devices
命令。
C:\Users\[redacted]>fastboot devices
0123456789ABCDEF fastboot
plain随后可以进行刷机操作。
Bootloader 解锁#
输入命令 fastboot oem unlock
[5.1 及以下] 或 fastboot flashing unlock
[6.0 及以上] 执行解锁。此时,设备上会出现确认界面。请认真阅读所有文字,然后按音量增大键确认,或按音量减小键取消。
确认后观察电脑上的输出。OKAY
则为解锁成功。
完成后,输入命令 fastboot oem lks
再次确认。若输出状态 lks=0
,则解锁成功。(注意较老设备可能没有 oem lks
命令,此时请自行跳过这一步)
若解锁不成功,则设备可能是需要解锁码,请查看制造商官网的指引进行申请,或直接使用官方提供的工具解锁。若官方明确不提供解锁服务,请知难而退。
一旦解锁成功,再次重启后,将出现数据清空页面。数据清空完成后,设备再次重启,进入系统。
由于解锁后,未经授权的用户可以随意进行自定义刷机,设备是不安全的。
刷入镜像#
执行命令 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 或专门的工具进行刷机,以修复系统。此处不过多介绍相关内容。
刷机过程中,屏幕全程无显示。
MediaTek Preloader#
此模式为 MTK 设备所独有。
将设备在关机状态下插入电脑,从提示音可以发现系统短暂地识别了一个 USB 设备。这就是 Preloader 模式。设备成为黑砖后,此模式仍然可以使用。
Preloader 是闪存中的一个程序。若这个程序也被破坏,则连接数据线时,设备将改用无法被破坏的 Bootrom 模式启动,两者区别不大。
SP Flash Tool 可以在设备进入 Preloader 模式后与其交互,进行刷机。此时 Preloader 模式将保持到刷机操作结束。
该模式下,也可以回读闪存中已存在的镜像。这是最直接的系统镜像备份方法。