如何利用SSH在DFU模式下备份iPhone数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何利用SSH在DFU模式下备份iPhone数据相关的知识,希望对你有一定的参考价值。
教程开始Step1,将手机进入DFU模式;
如何进入DFU模式(进入DFU模式的三种方法),如果手机还在白苹果,同时按下HOME+POWER直至屏幕变黑。然后按住POWER键,松开HOME键,出现白苹果的时候,再同时按下HOME键,开始默数,正常的话手机屏幕会再次变黑,当数到10的时候,保持HOME键按住,松开POWER键,再默数15下。基本上都可以进入DFU模式。
Step2,利用ssh_rd_rev04a.jar工具虚拟个ramdisk,用来建立和iPhone连接的SSH通道,并获取登录用户名和密码;
这里要注意,ssh_rd_rev04a.jar是java的可执行文件,所以该工具正常运行的前提是您的电脑已经正常安装JRE(Java Runtime Environment),即java运行环境。
打开ssh_rd_rev04a.jar,启动正常后会出现如下窗口:
注意,提示“Connect a device in DFU mode”,即请连接DFU模式的iDevice。这里的iDevice指的是iPhone,iPod等苹果产品。如果出现其它提示,比如:
注意上图中红色框内的内容,错误提示是1.要求安装iTunes9或更新版本,以及2.无法绑定2202端口。但很大可能是您的java版本过新,不被该工具支持。解决方法,除了确认iTunes版本是9以上外,将电脑上的jre卸载掉,然后在文章开头下载jre6,并安装。安装后,再重新打开ssh_rd_rev04a.jar工具,应该就可以正常运行了。
软件名称: iTunes for Windows V11.1.5.5 官方完整版
软件大小: 141.93MB
下载地址: http://www.gezila.com/ruanjian/yingyong/3181.html
将已进入DFU模式的iPhone连接到电脑,该工具会自动识别并加载,我们所需要的只是安静等待而已,工具窗口内不断更新进度信息。过几分钟一切就绪后,工具显示为:
注意上图红色部分中的登录名及密码:
login:root 即登录名
password:alpine 即密码
折腾过iPhone的朋友看到这用户名和密码就应该知道这个就是iPhone默认root用户名和密码了。本手机没有越狱过,如果手机有越狱并修改过root密码的话,密码处显示的可能会不一样,(注:未测试)
数据线一头的手机上则显示为刷机界面,不过和刷机不一样,白苹果下方的进度条始终处于初始状态,且在数据拷贝过程中始终没有发生变化。
Step3,利用putty加载iPhone文件夹。
保持ssh工具打开,然后打开putty,来建立个ssh连接。在如下位置填入:
Host Name: 127.0.0.1
Port: 2022
Connection type: SSH
点击“Open”会弹出一个命令行窗口,并显示:
login as:
提示输入用户名,此处请填入用户名,也就是root,回车后提示输入密码,请输入在ssh工具中显示的密码,默认为alpine。命令行窗口显示:
在光标处,输入命令:
mount.sh
回车后,显示将disk0s1s1及disk0s1s2分别加载到mnt1和mnt2:
Step4,使用Winscp来备份数据;
接下来,我们用winscp再来复制数据。Winscp是Windows系统下常用的SSH图形化客户端。图形化界面使得在操作上相当方便。打开winscp,在出现的窗口中再次输入Host name, port, username和password。
暂且先不点击Login,建议再设置下文件名的编码。点击左边菜单里里面的“Environment”选项,在右边的“UTF-8 encoding for filenames”的下拉菜单里面选择“On”,然后点击Login进行连接。这点比较重要,如果您的iPhone设置为中文语言环境,那么一些程序的数据可能存在以中文名命名,没有设置文件名编码的话,这些中文文件名的数据将无法被winscp正常识别,导致数据传输时出现无法找到该文件的错误。
点击Login后,winscp会自动连接iPhone,连接成功后出现如下窗口:
窗口的左下部是本地文件夹,右下部默认打开“/private/var”,在上图的下拉菜单中可以打开其它文件夹,图形化界面的操作比较简单,这里就不多介绍了。这里主要的要注意mnt1和mnt这2个文件夹,mnt1主要保存着和系统相关的文件和设置等,常用的相片,视频,信息,联系人,还有各个程序的数据都是保存在/mnt2/mobile里面。系统自带的程序保存文件夹如:
/mnt2/mobile/Media/DCIM/: 照片
/mnt2/mobile/Media/Recordings/:语言备忘录
/mnt2/mobile/Library/AddressBook/:联系人
/mnt2/mobile/Library/SMS/:短信
/mnt2/mobile/Library/Notes/:备忘录
用户自行安装的程序是在/mnt2/mobile/Applications/下面,该文件夹下面的每个文件夹代表一个已安装的程序,文件夹的名字都是由一串字母和数字以及横杆组成的程序ID。如:
/mnt2/mobile/Applications/15F42897-C562-4466-8DAD-5201C40DBFDE
程序文件的数据一般都保存在该程序文件夹下面的/Documents/子文件夹下面。
将上述文件夹拷贝到本地电脑就可以完成数据备份。已备份照片为例,介绍下如何使用winscp进行数据备份。打开/mnt2/mobile/Media,选中DCIM,在右单击弹出的菜单内选择Download
然后会提示文件的保存地点。
输入保存文件夹后,点击OK就开始下载数据到指定的文件夹内。
Step5,备份完毕后,重启手机。
数据备份等操作完毕后,可以将winscp关闭。回到putty窗口,输入
reboot_bak
iPhone会自动重启,但是会进入recovery模式,此时您可以使用小雨伞或其它软件来将iPhone踢出恢复模式。但最简单就是下载文末提供的Exit_Recovery_Mode.zip工具,解压后,双击运行Exit_recovery_mode.bat,会弹出一个命令行窗口,同时iPhone会自动重启,并恢复正常。最后将此命令行窗口关闭即可。
至此,我们已经成功地利用了几个工具软件在DFU模式下将iPhone内的数据备份出来了。文中是以iPhone4为例,在win7 64位系统下进行的。理论上本方法也适用于其它iDevice如ipod等。
iPhone的使用建议:
没越狱的iPhone使用久后出现其它容量很大的话,先用iTunes做个备份下,然后在iPhone的设置-通用-还原-抹掉所有内容和设置,最后再在iTunes里面做个恢复即可。这样可以恢复相当一部分被其它占用的容量。 参考技术A 注:左图为苹果的logo,俗称白苹果,正常开机的话,加载时间只有几分钟,如果开机过程中卡在白苹果界面的话,一直都进不了主屏幕,那么便是机器白苹果了。
右图是恢复模式的界面,和DFU模式略有不同。开机直接显示该界面,说明机子可能因刷机或其它原因进入恢复模式,无法正常退出。在此情况,一般需要用一些工具来将机子踢出该模式。
遇见上述2个情况的话,貌似最常见的解决方法就是刷机了,当然刷机的话,手机里面的现有数据如照片短信联系人还有程序备份等将会全部丢失,如果有用iTunes备份的话,还可以从备份中恢复一部分数据,因为肯定不是最新的。如果没有备份的话,且里面还有很多重要数据的话,那么您最好阿弥陀佛了。很巧,最近自己就碰到这种情况。
前几天,LP打电话问我,为什么无法拍照了,打开相机就是无限白菊花等等。我当时也没注意,就告诉她按住HOME+POWER硬关机,重启手机。当时就很纳闷,没越狱的iPhone系统应该是很难出现崩溃的情况,怎么会就让她给赶上了。后来拿她的手机一看,好家伙,可用容量竟然为0,其中好几个程序的数据大小都是几个G,难怪系统不出问题?将一程序的1.2G数据清空,重启手机后,开始无限白苹果了。用手头上常用的软件如91助手,红雪等等均都无法识别了。重新刷机当然简单,但LP没有用iTUnes备份的习惯,且里面还有一些数据比较重要,必须备份出来,这下头大了。
费了些时间在网上搜索后,还是成功的将手机里的数据备份了出来,原理就是将手机进入DFU模式,然后利用工具建立SSH通道,最后利用SSH客户端将数据备份。下面将分几个步骤详细介绍如何建立SSH通道,如何使用SSH客户端传输数据等。本文在WIN7 64位系统下测试通过,理论上32位系统都应该没有问题。
工具下载
Java6运行环境,JRE6Update37:网盘下载
ssh_rd_rev04a:网盘下载
Putty:官方下载 网盘下载
Winscp:官方下载 网盘下载
退出恢复模式工具Exit_Recovery_Mode.zip:网盘下载
教程开始
Step1,将手机进入DFU模式;
如何进入DFU模式(点击查看固件更新方法一里进入DFU模式的方法),如果手机还在白苹果,同时按下HOME+POWER直至屏幕变黑。然后按住POWER键,松开HOME键,出现白苹果的时候,再同时按下HOME键,开始默数,正常的话手机屏幕会再次变黑,当数到10的时候,保持HOME键按住,松开POWER键,再默数15下。基本上都可以进入DFU模式。
Step2,利用ssh_rd_rev04a.jar工具虚拟个ramdisk,用来建立和iPhone连接的SSH通道,并获取登录用户名和密码;
这里要注意,ssh_rd_rev04a.jar是java的可执行文件,所以该工具正常运行的前提是您的电脑已经正常安装JRE(Java Runtime Environment),即java运行环境。
打开ssh_rd_rev04a.jar,启动正常后会出现如下窗口:
注意,提示“Connect a device in DFU mode”,即请连接DFU模式的iDevice。这里的iDevice指的是iPhone,iPod等苹果产品。如果出现其它提示,比如:
注意上图中红色框内的内容,错误提示是1.要求安装iTunes9或更新版本,以及2.无法绑定2202端口。但很大可能是您的java版本过新,不被该工具支持。解决方法,除了确认iTunes版本是9以上外,将电脑上的jre卸载掉,然后在文章开头下载jre6,并安装。安装后,再重新打开ssh_rd_rev04a.jar工具,应该就可以正常运行了。
将已进入DFU模式的iPhone连接到电脑,该工具会自动识别并加载,我们所需要的只是安静等待而已,工具窗口内不断更新进度信息。过几分钟一切就绪后,工具显示为:
注意上图红色部分中的登录名及密码:
login:root 即登录名
password:alpine 即密码
折腾过iPhone的朋友看到这用户名和密码就应该知道这个就是iPhone默认root用户名和密码了。本手机没有越狱过,如果手机有越狱并修改过root密码的话,密码处显示的可能会不一样,(注:未测试)
数据线一头的手机上则显示为刷机界面,不过和刷机不一样,白苹果下方的进度条始终处于初始状态,且在数据拷贝过程中始终没有发生变化。
Step3,利用putty加载iPhone文件夹。
保持ssh工具打开,然后打开putty,来建立个ssh连接。在如下位置填入:
Host Name: 127.0.0.1
Port: 2022
Connection type: SSH
点击“Open”会弹出一个命令行窗口,并显示:
login as:
提示输入用户名,此处请填入用户名,也就是root,回车后提示输入密码,请输入在ssh工具中显示的密码,默认为alpine。命令行窗口显示:
在光标处,输入命令:
mount.sh
回车后,显示将disk0s1s1及disk0s1s2分别加载到mnt1和mnt2:
rsync+inotify实时同步环境部署
rsync
作用:
实现文件的备份
备份位置可以是当前主机,也可以是远程主机
备份过程可以是完全备份,也可以是增量备份
功能:
1、类似于cp的复制功能
将本地主机的一个文件复制到另一个位置下。
2、将本地主机的文件推送到远程主机,也可以从远程主机拉取文件到本地。
3、显示文件列表
使用模式
shell模式
本地复制功能
远程shell模式
可以利用ssh来实现数据的加密到远程主机
守护进程(服务器模式)
rsync工作在守护进程模式下
列表模式
ls 仅仅显示内容,不做操作
确保各个主机的时间同步
[root@ntp ~]# crontab -l
* * * * * /usr/sbin/ntpdate -u ntp1.aliyun.com &>/dev/null
* * * * * /usr/sbin/hwclock -w &>/dev/null
[root@samba ~]# crontab -l
* * * * * /usr/sbin/ntpdate -u 192.168.85.132 & > /dev/null
[root@backup ~]# crontab -l
* * * * * /usr/sbin/ntpdate -u 192.168.85.132 & > /dev/null
rsync+inotify
rsync+sersync
rsync只负责传递文件到远程主机
inotiyf/sersync:将发生了改变的文件找出来
sync模式一
格式:Local: rsync [OPTION...] SRC... [DEST]
选项:
-p :复制文件的过程中,保持文件的属性不变
-v :显示复制过程信息
-a :使用归档模式,(复制目录必须使用此选项)
-z :在传输过程中,以压缩方式进行传输
-e : "ssh [-p22]" :指定所使用的传输通道
-r : 递归复制
模式二、远程shell模式
[root@backup ~]# rsync -avz -e "ssh -p22" /tmp/passwd root@192.168.85.131:/tmp/
[root@backup ~]# rsync -avz -e "ssh -p22" /tmp/passwd root@samba:/tmp/
[root@backup ~]# rsync -avz -e "ssh -p22" /tmp/passwd root@ntp:/tmp/
rsync同步时,会首先对比源和目的下的文件的校验码,只有当特征码不同时,才会传递。
重点说明:工作中通常都是用rsync+ssh密钥认证方式,目的是为了用免密码登录。
模式三、守护进程模式
安例:将ntp(132)和samba(131)上的数据备份到backup
准备工作
关闭selinux
关闭防火墙
配置时间同步
第一步:配置服务器端 配置backup上的rsync,让其工作在守护进程模式。
1、修改配置文件 (默认不存在)
[root@backup ~]# vim /etc/rsyncd.conf
rsyncd.conf的基本构成
全局参数
[模块1]
模块参数……
[模块2]
模块参数……
全局参数
pid file:指定rsync进程的pid文件的路径和名称
lock file:指定rsync进程的锁文件的路径和名称
log file:rsync的日志文件路径和名称
uid:指定rsync进程以什么身份在后台运行(必须是系统用户)
gid:指定rsync进程以什么组身份在后台运行
port:端口号
模块参数
path:指定备份目录的路径
use chroot:是否将用户锁定在家目录中
max connections:指定可以进行同时连接的用户的最大数量
read only:只读
write only:只写
list:true|false :设置是否可以显示全部的模块列表
auth users:指定访问模块需要使用的用户名,这里的是虚拟用户。(不是存在于/etc/passwd)
secrets file:指定保存虚拟用户名和密码的数据库文件
hosts allow:指定可以访问模块或者rsync服务器端的IP地址
hosts deny:黑名单
补充:两个参数都没用的时候,那么所有用户都可以任意访问
只有allow,那么仅仅允许白名单的用户可以访问模块
只有deny,那么仅仅黑名单中的用户禁止访问模块
两个参数都存在,优先检查白名单,如果匹配成功,则允许访问,如果失败,就去检查黑名单。成功则禁止访问,如果都没有匹配成功,则允许访问。
timeout:指定空闲超时时间。
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connections = 100
timeout = 100
pid file = /var/lock/rsync.pid
lock file = /var/lock/rsync.lock
log file = /var/log/rsync.log
[mod1]
path = /rsync/samba
read only = false
hosts allow = 192.168.85.0/24
auth users = vuser1
secrets file = /rsync/rsync.passwd
list = false
[mod2]
path = /rsync/ntp
read only = false
hosts allow = 192.168.85.0/24
auth users = vuser2
secrets file = /rsync/rsync.passwd
list = false
2、创建目录
[root@backup ~]# mkdir -pv /rsync/{samba,ntp}
chown rsync.rsync /rsync/{samba,ntp}
3、创建运行rsync的系统用户
[root@backup ~]# groupadd -r rsync
[root@backup ~]# useradd -r -s /sbin/nologin -g rsync rsync
4、启动rsync
[root@backup ~]# rsync --daemon
[root@backup ~]# rsync --daemon
[root@backup ~]# failed to create pid file /var/lock/rsync.pid: File exists
补充:rsync默认配置文件/etc/rsyncd.conf
如果想使用其他位置的配置文件,可以--config=/path/to/confFile
5、查看rsync端口(默认873)
[root@backup ~]# netstat -an | grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp6 0 0 :::873 :::* LISTEN
6、创建虚拟用户文件以及虚拟用户
[root@backup ~]# cd /rsync/
root@backup rsync]# touch rsync.passwd
[root@backup rsync]# chmod 600 rsync.passwd <<<<< 该文件的权限必须是600
[root@backup rsync]# vim rsync.passwd
vuser1:123
vuser2:123
补充:虚拟用户就是这个文件中的记录
一个用户占一行,冒号前是用户名,冒号后是用户的密码
第二步:配置客户端:
使用格式
rsync [options] [user@]host::moduleName /path/
rsync [options] /path/[user@]host::moduleName
[root@ntp home]# rsync -avz /home/ vuser2@192.168.85.133::mod2
服务端
[root@backup ntp]# ll
客户端免密码
[root@ntp home]# vim /etc/rsync.passwd
123
rsyncd.conf rsync.passwd
[root@ntp home]# chmod 600 /etc/rsync.passwd
使用rsync传递文件
[root@ntp home]# rsync -avz /home/ vuser2@192.168.85.133::mod2 --password-file=/etc/rsync.passwd
说明:
--password-file 系统可以自动从该位置下指定密码
总结:
服务器端的配置
1、创建配置文件
2、创建密码文件,修改权限为600
3、创建系统用户
4、创建模块对应的目录,修改目录的属主组为系统用户。
5、启动Damon模式
客户端
1、创建虚拟用户密码文件,修改权限为600
2、向模块传递文件或者从目录拉取文件
如果出现错误
第一步:检查日志
第二步:检查selinux、iptables是否启动
第三步:检查虚拟用户的文件名称是否正确、权限是否正确
重启rsync
[root@backup ntp]# killall rsync
没有killall 的话安装
[root@backup ntp]# yum install psmisc -y
[root@backup ntp]# ss -tnl | grep 873
[root@backup ntp]# rsync --daemon
编写rsync服务管理脚本
[root@backup ntp]# cd /etc/init.d/
补充:
--delete:让客户端和服务器端的文件完全一致
--exclude:在进行文件传送的时候,排除指定的文件
排除实现方式:方式1:排除一个文件
[root@ntp home]# touch /home/{1..10}.txt
[root@ntp home]# rsync -avz /home/ --exclude=3.txt vuser2@192.168.85.133::mod2
方式2:排除多个文件(客户端)
--exclude{ }
[root@ntp home]# touch /home/{11..15}.txt
[root@ntp home]# rsync -avz /home/ --exclude={11,12}.txt vuser2@192.168.85.133::mod2
方式3:通配符
[root@ntp ~]# rsync -avz /home/ --exclude=*.txt vuser2@192.168.85.133::mod2
排除实现方式(服务端)
在配置文件中添加一个关键字exclude,这里指定要排除文件列表,列表中的内容以空格为分隔符。
例子:exclude = q* a.txt *conf
完全同步的原理
在文件的传输过程中,发送方有的,会直接传输到接收方,发送方没有,但是接收方有的文件则会删除。
[root@ntp ~]# rsync -avc --delete /test/ vuser2@192.168.85.133::mod2
[root@ntp ~]# rsync -avc --delete /test/ vuser2@192.168.85.133::mod2
文件的实时同步
rsync+inotify
rsync+sersync
inotify软件
功能:可以实时监控指定目录下的文件,当文件发生了更改,则会触发事件,输出信息
监控的事件类型
创建
删除
修改
移动
……
安装inotify (客户端)
[root@ntp ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@ntp ~]# yum install inotify-tools -y
[root@ntp ~]# rpm -ql inotify-tools
/usr/bin/inotifywait
/usr/bin/inotifywatch
/usr/lib64/libinotifytools.so.0
/usr/lib64/libinotifytools.so.0.4.1
/usr/share/doc/inotify-tools-3.14
/usr/share/doc/inotify-tools-3.14/AUTHORS
/usr/share/doc/inotify-tools-3.14/COPYING
/usr/share/doc/inotify-tools-3.14/ChangeLog
/usr/share/doc/inotify-tools-3.14/NEWS
/usr/share/doc/inotify-tools-3.14/README
/usr/share/man/man1/inotifywait.1.gz
/usr/share/man/man1/inotifywatch.1.gz
应用程序
/usr/bin/inotifywait: 真正实现文件监控程序
/usr/bin/inotifywatch :数据统计
inotify+rsync
inotifywait
选项
-r:递归,对目录中的文件做监控
-q:仅仅打印少量信息(打印监控事件)
-m:一直处于监控状态(默认是在前台监控)
-d:以守护进程的方式来运行(运行在后台)
-o file:将监控到的事件输出到一个文件中(默认是输出到标准输出)
-s:将错误信息输出到系统日志中(默认是将错误信息输出)
--excludei:忽略文件的大小写
-e <event>:指定要监控的事件
access:访问事件
modify:编辑事件
attrib:修改文件属性事件(修改文件的元数据)
close_write:当文件从写模式关闭的时候,会触发该事件
close_nowrite:当文件从只读模式下关闭的时候,会触发该事件
close:无论以什么方式打开文件,在关闭文件的时候,都会触发该事件
open:当文件被打开的时候,就会触发该事件
moved_to:当一个文件被移动到监控的目录下就会触发该事件
moved_from:当一个文件从监控目录下移走的时候,就会触发该事件
move:主要发生了文件的移动,就会触发该事件
moved_self:在监控目录下执行移动操作,就会触发该事件
create:创建文件的事件
delete:删除文件的事件
--timefmt<fmt>:指定输出发生这个时间点的显示格式
--format<fmt>: 指定的当发生事件以后所输出的信息,以及输出的个数
%f 输出记录发生事件的文件名
%w输出记录发生事件的文件所在的目录的绝对路径
%e:输出记录发生事件的名称(如果有多个事件,多个事件用空格分隔)
%Xe:输出记录发生事件的名称(如果有多个事件,多个事件用X分割)
%T:输出发生事件的时间(时间个格式由 --timefmt<fmt>)
[root@ntp ~]# inotifywait -mrq --timefmt "%F%T" --format ‘%T %w%f‘ -e create,delete,modify /test
2020-04-0419:27:26 /test/1
2020-04-0419:27:26 /test/2
2020-04-0419:27:26 /test/3
[root@ntp ~]# mkdir /test/{1,2,3}
[root@ntp ~]# inotifywait -mrq --timefmt "%F%T" --format ‘%T %w%f %e‘ -e create,delete,modify /test
2020-04-0419:30:28 /test/11 CREATE,ISDIR
2020-04-0419:30:28 /test/12 CREATE,ISDIR
2020-04-0419:30:28 /test/13 CREATE,ISDIR
[root@ntp ~]# mkdir /test/{11,12,13}
2020-04-0419:32:21 /test/a DELETE,ISDIR
2020-04-0419:32:33 /test/aa CREATE
[root@ntp ~]# rm -rf /test/a
[root@ntp ~]# touch /test/aa
开发inotify实时同步备份脚本
[root@ntp ~]# cat CheckFile.sh
#!/bin/bash
#
prog="inotifywait"
events="create,delete,modify,attrib"
iopt="-mrq"
lpath="/test/"
rhost="192.168.85.133"
vuser="vuser2"
secfile="/etc/rsync.passwd"
ropt="-az --delete"
modName="mod2"
$prog $iopt --format "%w%f" -e $events $lpath | while read line
do
rsync $ropt $lpath $vuser@$rhost::$modName --password-file=$secfile
done
测试:
[root@ntp test]# mkdir {1..10}
[root@ntp test]# touch {11..20}
[root@ntp test]# ls
1 10 11 12 13 14 15 16 17 18 19 2 20 3 4 5 6 7 8 9
[root@ntp test]# rm -rf *1*
[root@ntp test]# ls
2 20 3 4 5 6 7 8 9
[root@backup ntp]# ls
[root@backup ntp]# ls
1 10 11 12 13 14 15 16 17 18 19 2 20 3 4 5 6 7 8 9
[root@backup ntp]# ls
2 20 3 4 5 6 7 8 9
以上是关于如何利用SSH在DFU模式下备份iPhone数据的主要内容,如果未能解决你的问题,请参考以下文章
恢复IPHONE时显示未能恢复IPHONE发生错误21,是啥原因?