Android-Recovery Mode(recover模式详解)-幸福软件公司-ChinaUnix博客
Android-Recovery Mode(recover模式详解)
1. Recovery Mode: factory default, firmware upgrade, patch upgrade and OTA upgrade.
2. Android boot mode:
1.bootloader mode (camera + power)
2.recovery mode (home + power)
3.normal boot
https://www.360docs.net/doc/d65856519.html,mand == 'boot-recovery' →启动recovery.img。recovery模式
https://www.360docs.net/doc/d65856519.html,mand == 'update-radio/hboot' →更新firmware(bootloader)
3.其他→启动boot.img
3.CACHE分区文件
Recovery 工具通过NAND cache分区上的三个文件和主系统打交道。主系统(包括恢复出厂设置和OTA升级)可以写入recovery所需的命令,读出recovery过程中的LOG和intent。
/cache/recovery/command:recovery命令,由主系统写入。所有命令如下:
--send_intent=anystring - write the text out to recovery.intent
--update_package=root:path - verify install an OTA package file
--wipe_data - erase user data (and cache), then reboot
--wipe_cache - wipe cache (but not user data), then reboot
/cache/recovery/log:recovery过程日志,由主系统读出
/cache/recovery/intent:recovery输出的intent
4.MISC partition:
Bootloader Control Block (BCB) 存放recovery bootloader message。结构如下:
struct bootloader_message {
char command[32];
char recovery[1024];
};
command format:
“boot-recovery”:标示recovery正在进行,或指示bootloader应该进入recovery mode “update-hboot/radio”:指示bootloader更新firmware
recovery内容
“recovery\n
其中recovery command为CACHE:/recovery/command命令
两种Recovery Case
?FACTORY RESET(恢复出厂设置)
1.用户选择“恢复出厂设置”
2.设置系统将"--wipe_data"命令写入/cache/recovery/command
3.系统重启,并进入recover模式(/sbin/recovery)
4.get_args() 将"boot-recovery"和"--wipe_data"写入BCB
5.erase_root() 格式化(擦除)DATA分区
6.erase_root() 格式化(擦除)CACHE分区
7.finish_recovery() 擦除BCB
8.重启系统
?OTA INSTALL(OTA升级)
1.升级系统下载OTA包到/cache/some-filename.zip
2.升级系统写入recovery命令"--update_package=CACHE:some-filename.zip"
3.重启,并进入recovery模式
4.get_args() 将"boot-recovery" 和"--update_package=..." 写入BCB
5.install_package() 作升级
6.finish_recovery() 擦除BCB
7.** 如果安装包失败** prompt_and_wait() 等待用户操作,选择ALT+S或ALT+W 升级或恢复出厂设置
8.main() 调用maybe_install_firmware_update()
1.如果包里有hboot/radio的firmware则继续,否则返回
2.将"boot-recovery" 和"--wipe_cache" 写入BCB
3.将firmware image写入cache分区
4.将"update-radio/hboot" 和"--wipe_cache" 写入BCB
5.重启系统
6.bootloader自身更新firmware
7.bootloader 将"boot-recovery" 写入BCB
8.erase_root() 擦除CACHE分区
9.清除BCB
9.main() 调用reboot() 重启系统
Recovery模式流程
/init →init.rc →/sbin/recovery →
main():recovery.c
ui_init():ui.c [UI initialize]
gr_init():minui/graphics.c [set tty0 to graphic mode, open fb0]
ev_init():minui/events.c [open /dev/input/event*]
res_create_surface:minui/resource.c [create surfaces for all bitmaps used later, include icons, bmps]
create 2 threads: progress/input_thread [create progress show and input event handler thread]
get_args():recovery.c
get_bootloader_message():bootloader.c [read mtdblock0(misc partition) 2nd page for commandline]
check if nand misc partition has boot message. If yes, fill argc/argv.
If no, get arguments from /cache/recovery/command, and fill argc/argv.
set_bootloader_message():bootloader.c [set bootloader message back to mtdblock0]
Parser argv[] filled above
register_update_commands():commands.c [ register all commands with name and hook function ]
registerCommand():commands.c
Register command with name, hook, type, cookie.
Commands, e.g: assert, delete, copy_dir, symlink, write_raw_image.
registerFunction():commands.c
Register function with name, hook, cookie.
Function, e.g: get_mark, matches, getprop, file_contains
install_package():
translate_root_path():roots.c [ "SYSTEM:lib" and turns it into a string like "/system/lib", translate the updater.zip path ]
mzOpenZipArchive():zip.c [ open updater.zip file (uncompass) ]
handle_update_package():install.c
verify_jar_signature():verifier.c [ verify signature with keys.inc key; verify manifest and zip package archive ]
verifySignature() [ verify the signature file: CERT.sf/rsa. ]
digestEntry():verifier.c [ get SHA-1 digest of CERT.sf file ]
RSA_verify(public key:keys.inc, signature:CERT.rsa, CERT.sf's digest):libc/rsa.c [ Verify a 2048 bit RSA PKCS1.5 signature against an expected SHA-1 hash. Use public key to decrypt the CERT.rsa to get original SHA digest, then compare to digest of CERT.sf ]
verifyManifest() [ Get manifest SHA1-Digest from CERT.sf. Then do digest to MANIFEST.MF. Compare them ]
verifyArchive() [ verify all the files in update.zip with digest listed in MANIFEST.MF ]
find_update_script():install.c [ find META-INF/com/google/android/update-script updater script ]
handle_update_script():install.c [ read cmds from script file, and do parser, exec ]
parseAmendScript():amend.c [ call yyparse() to parse to command ]
exeCommandList():install.c
exeCommand():execute.c [ call command hook function ]
erase DATA/CACHE partition
prompt_and_wait():recovery.c [ wait for user input: 1) reboot 2) update.zip 3) wipe data ]
ui_key_xxx get ALT+x keys
1) do nothing
2) install_package('SDCARD:update.zip')
3) erase_root() →format_root_device() DATA/CACHE
may_install_firmware_update():firmware.c [ remember_firmware_update() is called by write_hboot/radio_image command, it stores the bootloader image to CACHE partition, and write update-hboot/radio command to MISC partition for bootloader message to let bootloader update itself after reboot ]
set_bootloader_message()
write_update_for_bootloader():bootloader.c [ write firmware image into CACHE partition with update_header, busyimage and failimage ]
finish_recovery():recovery.c [ clear the recovery command and prepare to boot a (hopefully working) system, copy our log file to cache as well (for the system to read), and record any intent we were asked to communicate back to the system. ]
reboot()
Recovery模式流程图
以下流程图绘制了系统从启动加载bootloader后的行为流程。
restore与recover有何区别
restore与recover有何区别? 比如你有一个备份,restore是从备份中拿出来放在合适的地方,recover就是用日志前滚和用undo后滚,最终达到希望到的一个时间点的操作。 一幢楼塌了,你要重建把它恢复成原样 先restore就是先重建地基,建完地基后再recover就是根据归档日志或者增量备份把搂一点一点往上重建最后恢复成原来的样子 觉得Restore基本上是physical的,而Recover则是physical与logical 兼则有之,最后达到logical上可用的目的。 小弟观点:(不对之处还望指正) restore将备份时的数据copy到你的数据库中,将其覆盖(data,control,redo); recover将备份后的产生的日志在应用上去,应用到哪里(scn,time,logseq),让数据库重做一次备份后发生的事情; RESTORE 使用备份文件替换损坏或者丢失的文件。在操作RMAN时使用restore命令,要不然使用操作命令即可 RECOVERY 将归档日志文件和联机日志文件的重做记录应用到还原
出来的文件上。在sqlplus中使用recover命令完成 restore :从备份集中把文件备份读取出来,写入到控制文件所记载的文件的位置处。 recover :根据文件头的RBA、SCN信息,查找相应日志,进行恢复。 例如恢复一个0,1,2 级备份。 1. restore database : 你会发现只从备份文件里抓出来0 级备份时的dbf文件,放到了dbf 应该在的路径下。 2. recover database : 你会发现1,2 级以及可用的没被删除的归档日志被抓出来征用。征用的办法就是,再dbf 的基础上(0级备份的时间点),一点点依靠1,2,归档日志,往上面续加,一直加到最后一个log thread sequence。 Restore 就是一个物理上的copy,从备份集上把数据文件copy到数据文件的路径下 Recover 就是应用归档日志和当前联机重做日志。恢复到最佳的事务点
处于recover状态的数据文件的恢复
数据库的数据文件变为recover状态,如何让其ONLINE,如下是个人的操作步骤: SQL> select status,name from v$datafile; STATUS NAME ------- -------------------------------------------------- SYSTEM /opt/oracle/oradata/dzj01/system01.dbf ONLINE /opt/oracle/oradata/dzj01/sysaux01.dbf ONLINE /opt/oracle/oradata/dzj01/users01.dbf RECOVER /opt/oracle/product/10.2/db_1/dbs/ultranms_performance.dbf RECOVER /opt/oracle/product/10.2/db_1/dbs/ultranms_big.dbf ONLINE /opt/oracle/product/10.2/db_1/dbs/ultranms_small.dbf ONLINE /opt/oracle/product/10.2/db_1/dbs/ultranms_index.dbf ONLINE /opt/oracle/product/10.2/db_1/dbs/ultranms_default.dbf ONLINE /opt/oracle/oradata/dzj01/undotbs.dbf 9 rows selected. SQL> alter database datafile '/opt/oracle/product/10.2/db_1/dbs/ultranms_big.dbf' online; alter database datafile '/opt/oracle/product/10.2/db_1/dbs/ultranms_big.dbf' online * ERROR at line 1: ORA-01113: file 6 needs media recovery ORA-01110: data file 6: '/opt/oracle/product/10.2/db_1/dbs/ultranms_big.dbf' SQL> recover datafile 6; ORA-00279: change 17000140 generated at 11/08/2007 14:52:17 needed for thread 1 ORA-00289: suggestion : /opt/oracle/flash_recovery_area/DZJ01/archivelog/2008_02_29/o1_mf_1_1174_%u_.arc ORA-00280: change 17000140 for thread 1 is in sequence #1174 Specify log: {
微信聊天记录恢复:recover恢复指令并不是唯一方法
微信聊天记录恢复:recover恢复指令并不是唯一方法微信聊天记录恢复?还记得之前火爆朋友圈用recover来恢复微信聊天记录的方法吗?有很多小伙伴表示recover恢复指令无法使用了,那我们以后该如何恢复我们删除的聊天记录呢?想要恢复微信聊天记录的话,其实并非只有recov er指令这一个方法,下面我就为大家介绍最专业的恢复方法。 提到数据恢复,相信苹果的老司机都会想到用iTunes、iCloud,今天就给大家说一说这两种数据恢复方法。 iTunes恢复: 相信大家对iTunes并不模式,iTunes是一款官方数字媒体播放软件,除此之外还可以备份、恢复数据~备份出的数据一般保存在电脑上,适合长期备份。
iCloud恢复: iCloud是苹果公司所提供的云端服务,开通这项功能的每位苹果用户可以把苹果设备内的通信录、邮件、日历、照片等多项数据储存到该空间里,这一存储的过程一般开通功能后在接入WiFi时会自动备份~适合紧急备份。 不过iTunes备份和iCloud备份都属于整机备份,容易覆盖手机里的现有数据,另外iTunes备份并不能直接读取。这也算是两种备份的一个缺点吧~
三、开心手机恢复大师 开心手机恢复大师(官网:https://www.360docs.net/doc/d65856519.html,/)是由国内开心盒子软件有限公司开发的一款软件,在该行业已有多年的数据恢复经验。接下来小编用这款软件为大家演示一下如何恢复微信数聊天记录~ 第一步:我们可以直接去开心手机恢复大师官网(https://www.360docs.net/doc/d65856519.html,/)下载软件,选择适合自己电脑系统的版本进行下载。 第二步:运行开心手机恢复大师,软件支持三种恢复模式,分别是“通过设备扫描恢复”、“通过iTunes备份恢复”和“通过iCloud备份恢复”。软件默认在【通过设备扫描恢复】界面,我们将在这个模式对手机的微信聊天记录进行恢复。我们点击【下一步】继续。
苹果recover恢复记录,你还在用recover恢复微信吗
苹果:recover恢复记录,你还在用recover恢复微信吗 苹果:recover恢复记录有用吗?社交现在已经成了每个人每天都必须进行的程序,微信作为一个主流的社交软件,为我们带来了很多的方便,包括微信电话和视频,都是我们很喜欢的社交功能,再加上过年时候的红包摇一摇,简直俘获了不知道多少用户的心。不过使用过程中如何找回已删除的微信记录呢?其实很简单。 最近在抖音上点赞数超过的:recover修复功能恢复微信聊天记录,号称可以恢复手机中丢失的微信聊天记录。
在小编的实测之下,要告诉大家:手动删除的微信聊天记录并不能借助reco ver恢复数据。这是因为,:recover是微信APP自带的用于修复微信异常情况的机制,并不是真正的恢复数据。修复页面也提示了:使用当前页面修复微信须在微信团队引导下进行。
方法一、利用开心手机恢复大师 很多用户在恢复聊天记录上,多数选择了开心手机恢复大师软件,该软件对于对手机上误删的短信、通话记录,甚至包括微信的记录进行恢复,但是真的是百试百灵么?小编对这款软件进行了试用。下载并运行开心手机恢复大师,在主界面上显示有通讯录、照片、微信聊天记录等17种数据。功能倒是有很多,基本上满足了使用者的恢复需求。 在微信聊天记录的恢复界面,橙色字体是已经删除的微信聊天记录,黑色字体是未删除的微信聊天记录,勾选需要恢复的微信聊天记录,点击【恢复到电脑】即可导出到电脑上查看啦~
方法二、利用iTunes备份恢复数据 利用iTunes恢复数据,通过数据线将iPhone手机连接进入电脑,同时运行iTunes。等到iTunes识别iPhone设备,点击该标志就会进入“XX的iPhone”界面。选择含有微信聊天记录的备份文件,在该界面点击【恢复备份】按钮确认恢复就可以了。
RecoverPoint介绍手册
1 2 3 1. 激活授权并下载许可证文件。RecoverPoint for VMs 销售订单获批后,将向在输入订单过程中提供的电子邮件地址发送 LAC 电子邮件: a) 单击您的 LAC 电子邮件中的“单击此处”链接,以访问您的所有 RecoverPoint for VMs 授权。b) 激活授权并下载您的许可证文件。 2. 转至 https://www.360docs.net/doc/d65856519.html, 。如果您是新 EMC 客户,请注册成为 EMC 在线支持用户。依次导航到“支持”>“支持(按产品)”>“RecoverPoint for Virtual Machines ”,然后下载 RecoverPoint for VMs 安装包。 3. 请阅读《RecoverPoint for VMs 5.0 发行说明》,并确保具有的资源足以部署所有 vRPA 。 4. 将安装工具包解压缩,然后将 OVF 文件内容拷贝到您的工作站可访问的位置。使用 Installation Kit Content.docx 中的链接下载《RecoverPoint for VMs 5.0 安装和部署指南》的最新版。5. 填写《RecoverPoint for VMs 5.0 安装和部署指南》附录 A 中的“IP 设置详细信息”模板。 6. 验证您的每个系统具有: ? 一个作为存储库卷的共享数据存储区,它映射到 vRPA 所在的每一个 ESX 服务器 ? 每一个拷贝日志都有专用或共享的数据存储区 ? VMware vCenter 5.1U1 或更高版本和至少一个与 vCenter 兼容的已注册 vSphere Client 。 ? 以下两者之间的分段网络基础架构:? vSphere 与存储阵列? vSphere 与 vRPA 群集? 一个虚拟管理(浮动)IP 7. 验证您的每个 vRPA 群集具有: ? 打开的 TCP 端口 21、22、8081 和 8082 ? 向每个存储阵列打开的 TCP 端口 443 (HTTPS)? 每个 vRPA 一个 IP 地址 8. 部署 OVA 软件包,并在每个 vRPA 群集上创建 vRPA 。9. 还可以选择配置以下各项: ? 用于网络地址解析的网络 DNS 服务器? 用于网络时间同步的 NTP 服务器 ? 用于通过 ConnectEMC 获得 EMC 支持的 SMTP 邮件服务器 在开始部署 RecoverPoint for Virtual Machines 前,确保您已阅读并遵循前面的“开始前须知”部分中的说明。您需要:《RecoverPoint for VMs 5.0 安装和部署指南》附录 A 中的“IP 设置详细信息”模板以及 vCenter 凭据。 开始前须知 在 Web 浏览器中输入网址 https://
RecoverPoint 快速入门指南
1 This document outlines the procedure for installing an EMC RecoverPoint Appliance (RPA) in a RecoverPoint or RecoverPoint/SE installation. Any installation requires at least two RPAs at the local site. This pair by itself can support a Continuous data protection (CDP) configuration. A Continuous remote replication (CRR) or Concurrent local and remote (CLR) data protection configuration, or CDP at two sites, requires at least two additional RPAs, at the remote site. ◆ Step 1: Inspect the contents of the packages.....................................2◆ Step 2: Download the documentation...............................................2◆ Step 3: Mount and connect the RPA..................................................2◆ Step 4: Install RecoverPoint or RecoverPoint/SE............................3◆When installing RecoverPoint/SE and performing manual zoning, create a zone on each switch to allow communication between all RPAs, SP-A, and SP-B.4 Note: This guide is valid for RPAs shipping for use with the following RecoverPoint product releases: 3.3 and later 3.2 SP1 and later 3.1 SP3 and later EMC ? RecoverPoint Quick Start Guide P/N 300-011-489Rev A01 September 30, 2010