csdn 发表于 2015-1-12 13:47:32

iPhone手机数据恢复基础 苹果OS的磁盘分区

      iPhone手机的磁盘分区对于普通用户可能有些陌生,在手机数据恢复领域,要想恢复某个设备的数据,第一点想到的就是如何获取到存储上的数据,然后再进行数据分析,为了探索 iPhone手机的磁盘分区,那就从基础开始吧。

      IOS操作系统是苹果公司专门为移动设备开发的,你可以把它看成是Mac OS系统的迷你版。IOS系统和Mac OS系统一样,都属于Unix操作系统的类别。和我们平时使用的windows不同,当我们用iFunbox或者WinSCP之类的管理工具打开iPhone4S的时候,我们看到的只有目录,却看不到磁盘。难道我们的iPhone4S里面真的没有磁盘??没有磁盘的话,IOS系统保存在哪里??

      在IPHONE中打开MobileTerminal或者用SSH远程登录终端登录iPhone(我用的是SSH Secure Shell Client),输入命令“df”会输出如下结果:



      哈,看到没有??disk0s1和disk0s2!!
      以上这段信息表明,iPhon4S有2块存储设备,disk0s1和disk0s2。
      disk0s1容量约为1.2GB,使用了大约913.8MB,可使用的容量约为285MB,使用率为77%,disk0s1这个卷挂载在“/”目录下,对于未越狱系统来说,存放iOS的操作系统文件和如MobileMail,MobileSafari的标准应用程序的。
      disk0s2容量约为14.3GB,大约使用了1.3GB,剩余容量约为13GB,使用率为10%,disk0s2这个卷挂载在“/private/var”目录下,对于未越狱系统来说,主要是放歌曲、视频苹果商店里购买的应用程序的。
      还有一个特殊的文件devfs,大小约为2.6MB,这个卷挂载在“/dev”目录下。
      说到这里,必须了解一个Unix类操作系统不同于windows系统的概念:“挂载点”——通俗地说,这个东东有点类似于我们常用的windows系统里目录,只不过这个目录有点不得了,下面不但有子目录和文件,还包括了磁盘或者磁盘分区!!
      是不是有点晕??嘿嘿,我刚刚接触这些东西也有点大脑短路的感觉。对Unix系统而言,从操作系统看来,是没有逻辑上盘的概念的,Unix把所有的设备,当然包括了磁盘都看做是一个文件。说白了,就是磁盘=挂载点。上面的例子里:
      /dev/disk0s1s1 =/   这个“/”也称为“根”或者“root”,它的概念等同于windows里面的根目录。不过“/”是Unix系统的根目录,windows系统里的根目录知识某个磁盘的根目录。Unix系统里“/”只有一个,而windows里面的根目录可能会有好多。俺还是觉着Unix的叫法比较靠谱,因为如果把系统比作一颗大树的话,Unix这棵树有一个树根,windows这家伙却有好多树根^_^
      而/dev/disk0s1s1 =/也就意味着,当我们访问“/”目录的时候,实际上我们看到的就是disk0s1s1这个磁盘,我们看到的目录文件当然也就是 disk0s1s1里面的东东啦。。。。。。
      说了这么多,/dev/disk0s1s2 /private/var和devfs /dev就不用我再解释了吧      
   
下面我们再对另外几个概念一一来说明:
      1.devfs,即设备文件系统,它是对块设备/字符设备而做的一个文件系统。说到devfs,就要说到“/dev”这个目录。/dev:Unix类操作系统下的一个目录,用于储存硬件设备信息,通过其下的文件可以直接访问系统中的硬件。但是/dev目录下的设备文件并不都是对应于当前连接到系统的设备的。相反,/dev目录是在操作系统初始化机器的时候建立的。通过/dev里的设备文件的名字,我们都可以大概的知道是什么设备。与IOS系统同属于Unix类系统的RedHat 9 Linux系统里,/dev目录甚至保存有18000个不同的设备文件(真够多的,汗一个!)。这么多的设备文件很难让用户确切的知道当前系统中有哪些设备。

      为了解决这个问题,许多的操作系统(像Unix、IOS这些等等)都选择移走这些设备文件而让内核自己来管理/dev目录。通过创建一个叫做devfs的内存文件系统(rambased filesyste),它是对块设备/字符设备而做的一个文件系统,它让系统内核可以确切的知道当前系统里都有哪些设备。
      比如我们访问设备文件/dev/disk0s1s1,IOS就调用devfs,devfs再访问磁盘(或者内存),最终达到访问物理设备disk0s1s1的目的。
      再比如我们访问/dev/tty0,它就是调用devfs,devfs再访问磁盘(或者内存),并且最终达到访问物理设备的目的。
      IOS也有这个东东,叫做fstab,保存在/private/etc/目录下,可以用写字板或者其他编辑器打开。下面的是我的iPhone4S的信息:



      这表示我的iPhone4S有两个磁盘分区,第一个是disk0s1s1,设备文件是/dev/disk0s1s1,挂载在“/”目录,文件系统为hfs,可读写,是磁盘0的第一个分区;第二个是disk0s1s2,设备文件是/dev/disk0s1s2,挂载在“/private/var”目录,文件系统为hfs,可读写,是磁盘0的第二个分区。
      我的手机因为已经越狱,所以显示的是以上的信息。对于未越狱或者越狱有问题的机器,可能是如下信息:

      /dev/disk0s1s1 / hfs ro 0 1——ro=read only
      /dev/disk0s1s2 /private/var hfs rw,noexec 0 2或者/dev/disk0s2 /private/var hfs rw,nosuid,nodev 0 2

      PS:第一行表示系统盘disk0s1s1挂载在“/”目录下,文件系统是hfs,只读是个只读分区;disk0s1s2是的文件系统是hfs,挂载在/private/var目录下,不能运行可执行文件或者需要特殊的权限才能执行,这也是未越狱的手机里disk0s2中不能保存第三方应用商店如Cydia安装的应用程序的主要原因。越狱以后,会被越狱软件修改成/dev/disk0s1s2 /private/var hfs rw 0 2,让disk0s1s2上可以任意运行可执行文件,也就当然可以任意在这个分区安装应用程序。当然,你也可以用写字板等编辑器直接修改。

      所以,手机未越狱的时候,disk0s1s2这个卷是不能存放歌曲、视频和苹果商店以外的内容的,简单的说就是你不能在这里任意安装应用程序和其他的一些系统数据。Cydia是越狱者制做的相当于苹果AppStore的应用程序商店,通过Cydia下载的越狱应用的安装地点是不同的。主要是安装在root根目录的/Application目录下;墙纸和铃声也存放在根目录的 /Library/Wallpaper 和 /Library/Ringtones目录下,所以从Cydia安装的墙纸和铃声也也会占用系统分区空间。但是系统分区容量极其有限,很容易就会把有限的系统分区塞满。

      系统分区disk0s1s1—我们可以把它类比成windows系统中的C盘,这也是为什么有些同学的手机安装软件过多以后会出现C盘空间足的原因。
      好在开发越狱程序的大神们为我们想的很周到,越狱程序会把应用程序等存放到disk0s1s2上来节约系统盘disk0s1s1的空间,防止出现系统空间不足的现象。通常的作法是在iPhone的数据分区创建/var/stash目录,并把一些正常情况下位于root根文件系统下的应用程序移到/var/stash目录下。
      越狱程序可以这么做,当然我们也可以手动实现系统分区的瘦身O(∩_∩)O,当然,前提是你对Unix系统或者IOS系统的原理和命令足够熟悉
      通常被转移的目录会有(C盘- disk0s1s1)下的。/Applications、/Library/Ringtones、/Library/Wallpaper、/usr/include、/usr/lib/pam、/usr/libexec、/usr/share它们会被保存在(D盘- disk0s1s2)的下/private/var/stash目录中。在系统盘disk0s1s1中只留下相应的快捷方式,当然对于不同版本的IOS系统,转移的目录会有所不同,甚至会包括/etc、/user整个目录、/tmp等等。下面是我手机中的目录列表:



      PS:其实看到这里,就我感觉,还是WinSCP要比iFunbox显示的更准确一些。iFunbox把很多快捷方式也作为目录来显示,容易误导,WinSCP的显示就要好得多了。
      2.iPhone手机的分区与目录基本样式:
          /dev/disk0s1/
          devfs         /dev
          dev/disk0s2/private/var
          /dev/disk0s1   /Developer
         3个volume(即卷、文件、设备等) 分别mount到“/”、“/private/var”和“/Developer”,devfs mount到/dev上。
         在“/”即root目录下输入“ls –al”时候还能看到其他目录,他们或者是/dev/disk0s1s1mount下的/的子目录或者是link(快捷方式)。
   3.关于mount?
      mount主要涉及到3个东西,一个是volume,一个是文件系统(fs),一个是目录(或者叫mounting point)
volume指的是卷,它可以是磁盘的一部分,也可以是一个文件;文件系统大家应该都比较清楚,比如fat, ntfs等,它主要是用来解析磁盘结构的,把杂乱无章的磁盘解释为我们能理解的树状目录结构;目录(mounting point)就是盘符+子目录结构,也叫做挂载点,在 unix中没有盘符的概念。
       mount到底是什么含义呢?mount就是volume, fs即文件系统, mounting point关联在一起的过程,通常叫做挂载。关联在一起的意思就是通过mounting point可以知道它对应的文件系统是什么,通过文件系统可以访问这个mounting point对应的volume,也就是物理设备。
       操作系统简单实现方式可以是这样,以三元组为数据结构,创建一个数组即可。
比如:
{{/dev/disk0s1s2, ext3, /private/var},
{/dev/disk0s1s2,ext3, /user/},
{/dev/disk0s1s1,fat, /Developer},
........................................
}
      有了mount这个数组,我们再访问磁盘就方便多了。比如我们要读写/user/test.txt这个文件,要求file server读写的时候,它就会检查mount数组,看到/user/test.txt所属文件系统为ext3,它就使用ext3提供的api操作,再查mount数组看到它在/dev/disk0s1s2这个volume上,就通知相应的驱动来读写这块volume。

      这是本文的第二次修改,改动较大。原文的资料有不少讲的都是老版本ios系统的,新版本资料很少,重新整理后再次修改。这些内容很多来自网上各种资料和大神们的帖子,这里表示感谢,因为收集资料事件比较长,有的都不知道地址了,也就不一一列举了,也请高手多多指正。

15770134380 发表于 2015-1-12 21:50:30

学习了,

小黑修盘 发表于 2015-1-13 09:23:42

好东西,谢谢分享~~~

15770134380 发表于 2015-1-13 14:08:31

赞一个,好好研究下

songcw 发表于 2015-2-13 16:34:15

很强,原理性的

5b16 发表于 2015-4-11 10:59:25

学习一下

wang1113 发表于 2015-4-13 18:09:49

好东西,赞一个

hbz12330 发表于 2015-4-15 18:45:06

好东西,学习了

天使胡杨 发表于 2015-11-5 20:03:52

Linux还是精髓

cscip 发表于 2016-1-9 23:40:51

这方面比较弱,请问,要是iphone 做镜像前查看分区,也就是想知道哪个挂载点是存数据照片和微信的目录怎么看?接下来要怎么操作才是正确的把挂载点做镜像到电脑PC中?
页: [1] 2
查看完整版本: iPhone手机数据恢复基础 苹果OS的磁盘分区