分享

Mac 上“磁盘工具”中可用的文件系统格式

 金刚光 2022-01-08

Mac 上的磁盘工具支持多种文件系统格式:

·        Apple 文件系统 (APFS)macOS 10.13 或后续版本使用的文件系统。

·        Mac OS 扩展:macOS 10.12 或之前版本使用的文件系统。

·        MS-DOS (FAT) ExFAT:与Windows 兼容的文件系统。

Apple 文件系统 (APFS)

Apple 文件系统 (APFS) 是运行macOS 10.13 或后续版本的 Mac 电脑所使用的默认文件系统,它具有强加密、空间共享、磁盘快照、快速目录大小统计等特性,以及改进的文件系统基础。虽然 APFS 最适合于新款 Mac 电脑中所用的闪存/SSD 储存,它也可以与使用传统硬盘驱动器 (HDD) 和外置直连储存设备的低版本系统配合使用。macOS 10.13 或后续版本支持 APFS 用于可引导启动的宗卷和数据宗卷。

APFS 按照需求分配容器(分区)中的磁盘空间。单个 APFS 容器包含多个宗卷时,容器的可用空间会共享,并且会自动按需分配到任意单独的宗卷。如果需要,您可以指定每个宗卷的保留大小和配额大小。每个宗卷仅使用整体容器的一部分,这样一来,可用空间即容器的总大小减去该容器中所有宗卷的大小。

为运行 macOS 10.13 或后续版本的 Mac 电脑选取以下其中一种 APFS 格式。

·        APFS:使用 APFS 格式。如果不需要加密或区分大小写格式,请选取此选项。

·        APFS(加密):使用 APFS 格式且加密宗卷。

·        APFS(区分大小写):使用 APFS 格式并区分文件和文件夹名称的大小写。例如,名称为“Homework”“HOMEWORK”的文件夹是两个不同的文件夹。

·        APFS(区分大小写,加密):使用 APFS 格式,区分文件和文件夹名称的大小写且加密宗卷。例如,名称为“Homework”“HOMEWORK”的文件夹是两个不同的文件夹。

您可以轻松添加或删除 APFS 容器中的宗卷APFS容器中的每个宗卷都可以拥有其 APFS 格式:APFSAPFS(加密)、APFS(区分大小写)或 APFS(区分大小写,加密)。

Mac OS 扩展

为兼容运行 macOS 10.12 或之前版本的 Mac 电脑选取以下其中一种 Mac OS 扩展文件系统格式。

·        Mac OS 扩展(日志式):使用 Mac 格式(日志式 HFS Plus)来保护分层文件系统的完整性。如果不需要加密或区分大小写格式,请选取此选项。

·        Mac OS 扩展(日志式,加密):使用 Mac 格式,要求密码,并加密分区。

·        Mac OS 扩展(区分大小写,日志式):使用 Mac 格式并区分文件夹名称的大小写。例如,名称为“Homework”“HOMEWORK”的文件夹是两个不同的文件夹。

·        Mac OS 扩展(区分大小写,日志式,加密):使用 Mac 格式,区分文件夹名称的大小写,要求密码,并加密分区。

Windows 兼容格式

如果格式化磁盘以配合 Windows 使用,请选取以下其中一种兼容 Windows 的文件系统格式。

·        MS-DOS (FAT):用于 Windows 宗卷且大小为 32 GB 或不足 32 GB

·        ExFAT:用于 Windows 宗卷且大小超过 32 GB

谈谈 Mac OS 的文件系统

谈谈 Mac OS 的文件系统

smartx

smartx

已认证账号

241 人赞同了该文章

Quite frankly, HFS+ is probably the worst filesystem ever. Christ what shit it is.

这是 Linus 在一封邮件中对 HFS+ 的评价。而 HFS+ 正式Mac OS 的文件系统,也就是笔者正在使用的文件系统。。。

Mac OS 有很长的发展历史,其中经历过很多不同的文件系统。今天我们来谈谈 Mac OS 中出现过的比较著名的文件系统:UFS,HFS+,以及 APFS。

UFS -- 划时代的文件系统

众所周知,1985 年,Steve Jobs 出走苹果,成立了 NeXT 公司。NeXT 公司基于 BSD 开发了 NeXTSTEP 操作系统,也就是现在大家熟悉的 Mac OS 的前身。NeXTSTEP 当时使用的文件系统是 Unix File System(UFS),这是当时最先进的文件系统,对后面的文件系统的设计产生了巨大的影响。

UFS,全称是 Unix File System,也被称作 Berkeley Fast File System。UFS 并不是苹果的原创。UFS 最早发表于 1984 年,他的作者是 Marshall Kirk McKusick 和 William Joy。顺便说一下这位 William Joy,实际上就是大名鼎鼎的Bill Joy,此人后来创办了 Sun 公司。

UFS 可以说是现代文件系统的鼻祖,它的出现使得文件系统可以真正适用于生产环境。在 UFS 之前的文件系统最多只能使用 5% 的磁盘带宽,而 UFS 将这个数字提升到了 50%。这主要源于 UFS 中的两个设计:

1.  将基础块大小从 1024 字节增加到 4096 字节

2.  增加 Cylinder Group 的概念,优化数据和元数据在磁盘上的分布,减少读写文件时磁头寻道的次数(减少磁头寻道次数是 HDD 时代文件系统在性能优化上的一个主要方向)

https://pic3./80/v2-6baa394960c376c7e8fd546126e4bbfe_720w.jpgUFS 磁盘 layout

UFS 的磁盘 layout 如上图。磁盘被分成了多个 Cylinder Group,每个 Cylinder Group 包含了一份 Superblock 的拷贝,以及这个 Cylinder Group 内部的元信息。由于操作文件时,通常都会先读取文件的 Inode,再操作文件的 Data Block。如果 Inode 和 Data Block 被放置在磁盘上相邻的位置,那就意味着不需要额外的寻道时间。

UFS 最早被实现在 BSD 系统上,此后,Sun 的 Solaris,IBM 的System V,以及 HP-UX 等 Unix 操作系统都移植了 UFS。包括现在存储界的巨头 EMC 公司的很多存储产品,操作系统是 Unix 的,而文件系统则是基于 UFS 演进而来的。NeXTSTEP 作为 BSD 的变种,自然也采用了 UFS。

Linux 上并没有 UFS 的实现,但著名的 ext2 文件系统在设计上很大程度借鉴了 UFS 的思想。而 ext3,ext4 又是基于 ext2设计的扩展,也继承了 UFS 的思想。

1997 年 2 月,苹果完成收购NeXT 公司,Steve Jobs 回归苹果。此后的 Mac OS 中仍然保留了对 UFS 的支持,直到 Mac OS X Lion 版本才取消对 UFS 的支持。

HFS+ -- 可能是目前最烂的文件系统

然而苹果收购 NeXT 后,UFS在 Mac OS 中作为默认文件系统的时间并不长。在 1998年 1 月,苹果收购 NeXT 一年后,发布了 Mac OS 8.1,并搭载了 HFS Plus(HFS+) 文件系统,用于取代 UFS。

从设计上来说,HFS+ 相对于他的上一代 HFS 有了不少改进,包括从 16 位升级为 32 位,支持 Unicode,最大文件支持 2^63 bytes 等等。

HFS+ 最吸引人的功能,就是 Time Machine 了。使用过 Time Machine 功能的人都知道,这是一个非常炫酷且实用的功能,它可以将文件系统完整的回滚到之前的某一个时间点,可以用于对文件系统做备份,找回历史版本文件,也可以用于做系统迁移。

https://pic4./80/v2-5e3ae27c7a231672b179bd7d08473b23_720w.jpgTime Machine

在 2007 年,当苹果第一次展示 Time Machine 时,很多开发者都兴奋的以为苹果在 HFS+ 上增加了对 Snapshot 功能的支持,甚至有人猜测苹果将 ZFS 移植到了 Mac 操作系统上。然而事实上,苹果并没有在 HFS+ 上增加 Snapshot 功能,Time Machine 功能只是基于 Hard Link 功能实现的。

尽管如此,HFS+ 可以说是饱受争议的文件系统,甚至被 Linus 痛斥为有史以来最烂的文件系统。

Quite frankly, HFS+ is probably the worst filesystem ever. Christ what shit it is.

对 HFS+ 的批评主要有以下几个方面:

1.  大小写不敏感(最新版本已支持大小写敏感,但默认配置仍未不敏感)

2.  不支持对数据内容进行 checksum 校验

3.  timestamp 只支持到秒级

4.  不支持并发访问

5.  不支持快照

6.  不支持 sparse file

7.  使用 big-endian 进行存储

文件系统对大小写不敏感是非常坑爹的一件事情。究竟有多坑爹呢?我们看看下面的例子:

$ echo a > a

$ echo b > A

$ cat a

b

$ cat A

b

可以发现,向文件 A 写入 b后,文件 a 的内容也被修改了。实际上,这是因为在 HFS+ 看来,文件 a 和 文件 A 实际上是同一个文件。。。

还有更加坑爹的场景:

$ git clone git://github.com/torvalds/linux.git

$ cd linux

$ git status

On branch master

Your branch is up-to-date with 'origin/master'.

Changes not staged for commit:

(use "git add <file>..." to update what will be committed)

(use "git checkout -- <file>..." to discard changes in working directory)

   modified:   include/uapi/linux/netfilter/xt_CONNMARK.h

   modified:   include/uapi/linux/netfilter/xt_DSCP.h

   modified:   include/uapi/linux/netfilter/xt_MARK.h

   modified:   include/uapi/linux/netfilter/xt_RATEEST.h

   modified:   include/uapi/linux/netfilter/xt_TCPMSS.h

   modified:   include/uapi/linux/netfilter_ipv4/ipt_ECN.h

   modified:   include/uapi/linux/netfilter_ipv4/ipt_TTL.h

   modified:   include/uapi/linux/netfilter_ipv6/ip6t_HL.h

   modified:   net/netfilter/xt_DSCP.c

   modified:   net/netfilter/xt_HL.c

   modified:   net/netfilter/xt_RATEEST.c

   modified:   net/netfilter/xt_TCPMSS.c

no changes added to commit (use "git add" and/or "git commit -a")

在 Mac 上想要用 Git 克隆 Linux 的代码库,然而始终无法成功。这背后的原因,也是因为 HFS+ 默认对大小写不敏感。也难怪 Linus 称 HFS+ 可能是目前最烂的文件系统。

从技术角度来看,HFS+ 完全不像是一个现代文件系统,尽管它可以完成 Time Machine 这样炫酷的功能,但是和其他文件系统相比,技术过于落后,硬伤太多,例如大小写不敏感,不支持 Sparse File 等。这样 HFS+ 很难被称作是一个优秀的文件系统。

ZFS -- 一段插曲

ZFS 由 Sun 公司开发并使用在 Solaris系统中,号称『宇宙无敌最强』文件系统,想必不需要过多介绍了。

2007 年,Sun 公司的 CEO Jonathan Schwartz 对外宣称 ZFS 将成为Mac OS 10 的文件系统。尤其是当苹果发布 Time Machine 功能后,大家都以为 Time Machine 功能就是基于 ZFS 开发的。然而现实却打了 Sun CEO 的脸,在一周后的 WWDC 上,苹果宣布 Mac OS 只是支持只读挂载 ZFS 而已。

此后几年,偶尔还有一些关于苹果和 ZFS 的消息传出来,苹果内部也确实在对ZFS 进行开发,但用户并没有看到实质性的进展。同时,NetAPP 公司也因为 ZFS 侵犯了 WAFL 的专利而起诉Sun 公司,使得苹果不敢轻易引入 ZFS。直到 2010 年,Sun 被 Oracle 收购,ZFS 和苹果就彻底无缘了。也许正是因为这个原因,促使苹果决定自己开发新一代文件系统。

APFS -- 新一代文件系统

2017 年, 伴随着 Mac OS High Sierra 版本,苹果正式发布了 Apple File System。而在 2016 年的 WWDC 上,苹果就已经公布了 APFS 项目。为了和 AFS(Apple File Service)进行区分,采用了 APFS 作为缩写。

苹果为什么需要一个新的文件系统?

HFS 是 HFS+ 的前身,HFS 设计于 1985 年,距今已经有 30 多年的时间。当时的磁盘设备还是以软盘和磁盘为主,当时的 Mac 电脑的内存更是只有 512K。而随着 CPU,内存,存储介质技术的发展,今天我们使用的硬件和 30 年前相比,发生了巨大的变化。CPU 向多核方向发展,内存容量不断增加,单机已经可以支持 TB 级容量的内存,而存储介质也从 HDD 逐渐转为 SSD。硬件特性的变化,导致软件也需要不断调整设计和架构,才能跟得上硬件的节奏。

HFS 经过 30 年的发展,技术生命已经走到了尽头,再对 HFS 进行改进已经非常困难了。而 ZFS 又因为种种原因没有办法使用,所以只能自己设计和开发了。

从 2014 年开始,在 Giampaolo 的带领下,苹果开始设计和开发新的文件系统,也就是 APFS。顺便八卦一下,Giampaolo 曾经为 BeOS 写过文件系统 Be File System,而 BeOS 是 Be 公司的产品。1996年,苹果公司准备收购一家操作系统公司,用于替代老一代的 Mac OS。当时入围的两家公司就是 Steve Jobs 的 NeXT 公司和这家 Be 公司。很难想象如果苹果选择收购 Be,而不是 NeXT,会发生什么。

这里要强调的是,APFS 的团队开发和测试团队效率非常高。APFS 并没有基于已有的文件系统进行改造,而是从零开始构建,仅仅用了三年的时间就发布并上线,而通常一个文件系统从开发到稳定至少需要 10 年左右的时间。

苹果对新的文件系统提出了以下几个需求:

1.  能够适应多种应用场景,从智能手表,智能手机,到笔记本电脑

2.  确保数据安全可靠

3.  能够充分利用多核 CPU 以及新硬件设备的并发性

同时,和 HFS+ 相比,APFS提供了更多的功能:

1.  保证 crash safe

2.  64 位文件系统(HFS+ 是32 位文件系统)

3.  支持 sparse file(HFS+ 不支持 sparse file!)

4.  可扩展的元数据设计

5.  支持快照和克隆

6.  元数据支持 checksum 校验

Mac OS 的用户只要升级到 High Sierra 版本,文件系统会自动从 HFS+ 升级到 APFS。之所以可以从 HFS+ 直接升级到 APFS,是因为苹果设计了一个比较巧妙的升级过程。HFS+ 升级到 APFS 的过程如下:

1.  按照 HFS+ 的格式,从磁盘中读取 Inode

2.  在磁盘中查找空闲位置,并按照 APFS 的格式,将新的 Inode 写入到空闲空间中

3.  修改磁盘的 Superblock,按照 APFS 的格式,将新的 Superblock 写入到磁盘中,新的 Superblock 将索引 APFS 的 Inode,并释放原有 HFS+ 的Inode 所占用的空间

https://pic4./80/v2-4ef3b60f8577f2d85fa41fb5ff925fe3_720w.jpghttps://pic2./80/v2-1a17b4adc439e629b4051a38648693fd_720w.jpghttps://pic2./80/v2-e3693d9a9b850917f91944889def51ad_720w.jpghttps://pic3./80/v2-2db9e6cad85e0e3cd97e5957b514eaba_720w.jpg

在整个升级过程中,数据并没有被移动和改写。同时,由于 Superblock 没有被改写,且 HFS+ 的元数据也没有被改写,所以不会产生任何副作用。即使升级过程中发生断电等故障情况,还可以按照 HFS+ 的格式加载文件系统。顺便提一下,btrfs 支持从 ext3 转换到 btrfs 的过程也是类似的。

同时,为了提高升级过程的可靠性,苹果很早就在操作系统中嵌入对了 APFS 的支持,并在之前几个小版本升级的时候,对文件系统从 HFS+ 到 APFS 的升级进行了演练(dry run),也就是只执行升级步骤中的前两步,以收集升级过程中出现问题的反馈,确保最后可以升级成功。

从性能上讲,尽管苹果宣称 APFS 为 SSD 做了优化,但有不少网站对 APFS 的性能进行了测试,发现 APFS 在 SSD 上的性能反而比HFS+ 还有所下降。

https://pic2./80/v2-452d7cb2e4d28d2579f4038781fd5ab1_720w.jpghttps://pic4./80/v2-0a65e48d01029b9d4e137b1a49b6ebeb_720w.jpg

原报告可见链接

总结

当大家谈到苹果时,都认为苹果是一家伟大的公司,同时也承认苹果在基础设施领域的技术并不优秀。从文件系统的发展来看,老迈HFS+ 直到 2017 年才被取代,苹果的动作确实有些慢了。但是 APFS 的功能,以及团队开发速度,还是让人眼前一亮,未来值得期待。

参考文献

https://en.wikipedia.org/wiki/UFS

https://people.eecs.berkeley.edu/~brewer/cs262/FFS.pdf

http://slideplayer.com/slide/9071498/

http://devstreaming.apple.com/videos/wwdc/2016/701q0pnn0ietcautcrv/701/701_introducing_apple_file_system.pdf

https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/APFS_Guide/ToolsandAPIs/ToolsandAPIs.html#//apple_ref/doc/uid/TP40016999-CH7-DontLinkElementID_15

https://www.youtube.com/watch?v=-99L_23uWDg

https://hackmd.io/s/By77pO5a

https://malcont.net/2017/07/apfs-and-hfsplus-benchmarks-on-2017-macbook-pro-with-macos-high-sierra/

https://arstechnica.com/gadgets/2016/06/zfs-the-other-new-apple-file-system-that-almost-was-until-it-wasnt/

作者介绍

@张凯(Kyle Zhang)

,SmartX 联合创始人& CTO。SmartX 拥有国内最顶尖的分布式存储和超融合架构研发团队,是国内超融合领域的技术领导者。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多