这年头智能手机的硬件水平都已达一定的高度,特别是旗舰级手机,各家的机皇都是有多强上多强,所搭载的SoC、存储性能都在伯仲之间、难分高下,所以便有厂商开始在软件方面着手配合硬件进行优化,比如我们在前几期超能课堂中,提到过华为Mate 9上使用的F2FS文件系统,而从今年二月初iOS 10.3开始,苹果也在iPhone上加入了对APFS文件系统的支持,这其实早在去年WWDC 2016上,苹果便已经公布这个全新的文件系统,那么APFS文件系统究竟有什么革新之处?
    APFS 与 HFS 对比 - 图1
    APFS是什么?

    APFS的英文全称为Apple File System,这也就很简单地直译为“苹果文件系统”,为64位文件系统,单个分区支持9百亿亿文件,为取代苹果延用了30多年之久的HFS+文件系统而生,加入了很多现代文件系统应有的新功能特性。

    作为新一代文件系统,苹果在去年的WWDC 2016开发者大会上表示,APFS通用于iOS、macOS、watchOS和tvOS这四个苹果主要的操作系统上,由于目前苹果大部分设备都采用闪存或SSD,所以APFS完全为这类存储作了优化设计(这点与F2FS文件系统的特性一样),并把加密性作为新文件系统最主要的功能改进。

    APFS对苹果有多重要?

    现有的HFS+实在太落后了

    APFS文件系统对苹果有多重要,这就要提到苹果现有的文件系统HFS+。HFS+文件系统由苹果从HFS文件改进而来, 早在1998年就开始在苹果设备上使用(HFS在1984年),推出之时市面上仍以软盘和HDD作为主要存储设备,所以HFS+基本没有为现在流行的闪存和SSD作优化。HFS+在应付现代硬件和软件都已经力不从心,HFS+文件系统存在元数据以大字节序保存、单线程访问、不支持稀疏文件、写时复制等等一大堆缺点。

    苹果现有设备的文件系统不统一

    尽管苹果几乎所有设备和系统都是基于HFS文件系统,但实际上每个设备由于需要的特性不同(这其实也归咎于HFS的落后),导致采用的 文件系统却有多种,比如macOS上有HFS、HFS+和HFS+J,而iPhone、Apple Watch有用到HFS+和HFS+ Per-File Crypto,存储管理又有Fusion Drive和CoreStorage等等,相当混乱,所以苹果希望功能更先进、更齐全的APFS能改变这个现状,成为苹果设备中统一的文件系统。

    APFS 与 HFS 对比 - 图2
    苹果现在的文件系统太混乱

    APFS功能特性?

    APFS在基本的文件系统设计上就远比HFS+先进,HFS+为32位文件ID,而APFS支持64位索引节点,时间戳间距从HFS+的1秒降低至1纳秒,适应回现代处理器和SSD远低于1秒的文件操作时间,具备低延迟的特性,APFS还原生支持SSD的FTL和Trim,所以性能理论上会更强、空间利用率更高,另外与HFS+固定形式的文件系统结构不同,APFS是个具有扩展性的文件系统,可以在未来增加更多新特性、API。

    APFS 与 HFS 对比 - 图3
    APFS与HFS+对比

    APFS文件系统上新增的Clone、Snapshot、Crash Protection等多个功能,这得益于Copy-On-Write(写时复制、简称COW),该技术主要作用为文件在进行修改操作时, 会先复制一份新文件,用户修改的实际是在这份新文件上,原来文件不会作修改,而等修改完成后新文件再替换掉原文件,这能充分发挥存储的读写性能和保持文件的完整性 ,而在修改过程中就算出现意外,也能保证原文件不掉失。

    Clone(克隆)

    Clone指的是APFS在执行复制文件操作时,实际只是创建了一个类似快捷方式的副本,文件本身并没有增加多一份出来、占多一份空间,而当文件作了修改后,也只会保存修改的部分,这对于苹果系统采取的沙盒运行APP机制相当有用,可以节省APP的占用空间。

    APFS 与 HFS 对比 - 图4
    Clone演示

    Snapshot(快照)

    在APFS文件系统中作了分区快照后,无论原分区内的文件作了增加还是删除操作,快照分区内的文件都不会发生变化,这提高了文件备份效率,还可以实现撤销操作,这有利iTunes、Time Machine等备份功能。

    APFS 与 HFS 对比 - 图5
    Snapshot演示

    Space Sharing(空间共享)

    Space Sharing为解决在单个磁盘上分区固定位置、固定大小的限制,允许在不用重新分区的情况下,动态调整分区的大小,APFS格式的磁盘实际为单个容器(container),多个分区共享容器的空余容量。

    APFS 与 HFS 对比 - 图6
    支持动态调整容量

    比如在一个100GB的APFS格式磁盘上,有一个10GB的A分区和一个20GB的B分区,那么A和B分区都可以任意用到剩下的70GB,这样在A分区中,即使存储一个超过10GB的文件也没问题,最大可以去到80GB。

    Encryption(加密)

    APFS可同时支持无加密、单密钥(Single-key)到多密钥(Multi-key)三种加密方式,单密钥即为普遍采用的全盘加密,而多密钥加密为APFS独有的加密方式,文件数据采用单个文件级别加密,而元数据采用独立密匙,这使得就算用户的硬件加密被破解,也无法在系统中获取用户的文件。

    Crash Protection(防崩溃)

    由于Copy-on-write的加入,现在APFS不再需要两次写入的日志式文件保护来确保元文件数据不会崩溃。

    Sparse Files(稀疏文件)

    稀疏文件为一种文件存储方式,在创建文件时就预留连续存储信息,但未实际占用存储空间,而到只有真正写入数据时,才会分配空间,现在APFS文件系统也加入支持。

    Fast Directory(快速目录大小统计)

    在以往的HFS+文件系统计一个目录的总大小需要花费较长的时间,但在APFS中,目录的大小信息文件为分开保存,并用原子操作(Atomic Operation)来更新这个信息文件,这部分额外占用的文件为小增量增长。

    Atomic Safe-Save(原子级安全保存)

    在一个集群或目录类文件中进行重命名等原子级文件操作时,如果无法完全完成,原文件数据不会被替换或删除,这也体现了APFS的绝对一致性,要求文件只有一定能够修改成功的情况下,文件才会被保存,否则不会进行操作。

    HFS compatibility(向下兼容)

    APFS依然向下兼容HFS、HFS+文件系统,包括原来大部分的开发特性。

    APFS在什么设备上可以用到?

    APFS将统一iOS、watchOS、macOS和tvOS上的文件系统,所以包括有支持iOS 10.3及以后系统的iPhone、iPad、iPod Touch,Apple Watch(系统版本未定),支持macOS Sierra 10.12.4及以后系统的MacBook、MacBook Air、MacBook Pro、Mac mini、iMac、Mac Pro和Apple TV(系统版本未定)等苹果设备都将用到这个新的文件系统。

    APFS 与 HFS 对比 - 图7
    苹果主流的设备都支持APFS

    最新iOS 10.3 beta版上已经换成APFS系统、而macOS Sierra早已在底层支持APFS,但macOS 10.12.4 beta上才换用为主要文件系统。普通用户在即将到来iOS 10.3正式版和macOS Sierra 10.12.4正式版上,就能体验到APFS带来的新变化。

    APFS实际表现初体验?

    目前APFS文件尚未正式、完整地应用到苹果设备上,所以这里仅为简单的初体验。在macOS Sierra 10.12.3正式版系统中,使用hdiutli命令创建一个1GB的APFS文件系统分区后,与一个1GB的Mac OS扩展(即HFS+J)文件系统分区对比,在占用空间上APFS确实会更小。

    APFS 与 HFS 对比 - 图8
    左为APFS,右为Mac OS扩展

    iOS方面,这里选择把iPhone SE刷至iOS 10.3 beta3,用Passmark和Geekbench简单跑了一下测试,并对比回iOS 10.2正式版,在两个测试结果中,APFS的表现略差于原来的文件系统,但也不排除是这两个测试APP还没有对APFS文件系统作优化支持。

    APFS 与 HFS 对比 - 图9
    存储性能

    APFS 与 HFS 对比 - 图10
    GeekBench 4

    这样来看,APFS文件系统在当前对于开发者的意义更大,很可能普通消费者还不会从中获得很大的体验改善,至少在所谓的节省空间、提升性能和加强安全性上,APFS还需要点时间来发挥出优势,但APFS是足够先进和优秀的文件系统,对于未来苹果设备有极其重要的意义,未来更成熟的表现值得我们期待