大多数浏览器和
Developer App 均支持流媒体播放。
-
Apple 文件系统的新功能
了解文件系统技术的新变化,包括文件系统布局和映像技术的变更。如果新的只读系统宗卷对您有影响,那就不要错过这个讲座。
资源
相关视频
WWDC19
-
下载
女士们 先生们下午好 欢迎来到 Filesystem 的会议 在本次会议中 我们将介绍与 Filesystem 相关的几个主题 首先 我们将了解 文件系统在保护 macOS 上的 系统软件中 所起的作用
我们将描述卷复制 在 APFS 中的工作原理 最后 我们将讨论 即将迎来的 运行 iOS 和 iPadOS 设备的 新的和非常令人兴奋的功能 即访问外部媒体上 的外部文件 但在我们开始之前 让我们回顾最近 APFS 发生的事情 APFS 一直是默认的文件系统 -- 自 10.3 以来在 iOS 和 tvOS 上 以及自 High Sierra 以来的 macOS 上
APFS 引入的功能之一是 内置卷管理器
卷的概念对 APFS 来说 并不陌生 它们存在于 HFS Plus 中
HFS Plus 卷是此分区上的 一对一映射 它占用磁盘上连续的块范围
由于这种 一对一映射到分区 和 HFS Plus 卷无法轻松添加 要将新卷添加到分区磁盘 你们首先需要 缩小现有卷 然后你们可以添加新卷 APFS 卷更灵活 因为它们与兄弟卷 共享自己的 磁盘分区空间
而且这种灵活性 允许更高级别的
系统实现无法 用旧式卷 实现的功能
我们要介绍中的一个 - 我们 将实施的功能之一是 保护系统软件免受 恶意或意外更新
你们可能还记得 在 macOS El Capitan 时代 我们介绍了系统完整性保护的概念
它用于控制对目录层次结构的 一部分的访问
某些目录将被写保护 而文件系统的其他部分 将被允许更改 今年 我们更进一步 我们将整个根文件系统设为只读
显然 无法安装 新软件或用户无法 保存数据的系统 并不是特别有用
为了实现我们 如何协调这两个 相互冲突的目标 同时只读和可写 让我们来看看 当我们从 macOS Mojave 升级到 macOS Catalina 时会发生什么 macOS Mojave 上的 一个典型容器具有一个主卷 并且服务量很少 例如 VM 主卷用于存储 用户的数据和系统软件
当我们开始升级时 --
当我们开始升级到 macOS Catalina 时 我们首先更改主卷的职能 并将其标记为数据卷
然后 我们可以修剪 仅包含系统软件的 指令层次结构的某些部分
一经完成后 我们就可以进入下一个阶段 我们将创建一个新的空卷 该卷仅用于存储系统软件 我们将使用系统 内容填充该卷 一旦这个过程完成 我们就可以在保护方面宣布成功 我们是只读的 我们受到保护 这很好 但还不够
我们仍然需要以某种方式 将新系统内容与用户内容联系起来 为此 我们介绍了 卷组的概念 卷组是由一个数据卷 和一个系统卷组成的 他们将其视为一个 单一的实体
UI 将其显示为单个磁盘 它们共享加密状态 如果你们的卷已加密 则可以使用相同的密码 来解锁这两个卷 几乎所有东西看起来 都是一个统一的实体
有一件事是 我们还没做的 我们仍然需要以某种方式提供 单个目录层次结构的错觉 传统上 它是通过在根文件系统中的 目录之上安装文件系统来完成的
由于我们需要引入 许多交叉点 以及文件系统中 所需的卷数之多 这种方法变得 相当具有消耗性 因此 为了解决这个问题 我们引入了一个名为 Firmlink 的新概念 Firmlink 是一个新的文件系统对象
它与 Symlink 类似 但与 Symlink 不同 Firmlink 支持向后和 向前路径反转 这在其表示中是一致的 而且这种一致性非常重要 如果你曾经不得不处理一个 App 而绝对需要它 必须存在于 特定的目录中 比如在 App 目录下 你们知道 你们必须能够 从文件系统的顶部或者从道路 向下走到支路上 并且能够得到相同的路径 我们可以用 Firmlink 做到这一点
Firmlink 是从 系统卷上的目录到数 据卷上的目录的遍历点
它们只有一对一的映射 一个来源 一个目标的映射
你们不能使用 Firmlink 跨越卷组的边界
Firmlink 对于 用户和 App 非常易懂 它们是在安装时 通过 install 创建的 它们一般不会被注意到
一旦我们得到这个新工具 我们就可以用它来拼凑卷 安装程序将在系统卷上创建条目
并将它们指向 数据卷上的相应卷
一旦完成后 我们就有了统一的目录层次结构 我们可以重新启动 以只读方式挂载 root 并享受它给我们的保护
生活很美好 一切都受到保护了 一切都在运行 但你们仍需记住
在安装过程中拆分卷 没有办法避免它 它会发生的 在开发人员的预览中 我们选择保留 根文件系统可写 以便你们更轻松地测试 App 如果你们想模仿 将来实现的行为
你们则可以 在根目录中创建 一个特殊文件 并在重新启动时 你们的卷将会以只读方式挂载
这将在下一个种子的 下一次构建中发生变化
在发布版本中 如果禁用系统完整性保护 你们仍然可以 将根文件系统挂载为读写
但这不是一个持久的变化 在重新启动时 它将恢复为只读状态 你们可以再一次将其重新安装为只读 读写状态
同样的 它将在重新启动时 恢复到相同的状态
你们可以想象 这是 macOS 形状和安装方式 的一个相当大的变化 它可以捕获一些 App 例如 如果你们的 App 在文件系统上 使用复杂布局 或附带安装程序包 请确保它适用于 新的只读根分区
如果你们正在编写备份实用程序 该实用程序关注 inode 编号 文件系统 ID 等 请确保对其进行测试 因为你们之前 可能具有的假设也许不正确 所以底线是测试 测试 测试 接下来 我将交给 Jon Becker 由他来说说卷复制
谢谢你 Max 大家下午好 我的名字是 Jon 我将讨论使用 APFS 进行卷复制 不妨让我们直接进入 什么是卷复制
嗯 基本的想法很简单 我们想要将一个卷 复制到另一个卷
这听起来很简单 但这一点的重要方面 是我们希望这个副本的 保真度尽可能高 通常 只进行 逐个文件复制是不够的 我们希望复制所有卷内容 复制所有数据 所有元数据 卷属性 如果源卷包含可启动的 OS 我们希望复制 使该卷可启动的元数据 以便我们的 副本目标也可以启动 现在 我将讨论 Apple 软件在 Restore 命令行实用程序 或 ASR 环境中 的复制 ASR 已经存在了很长时间 你们中的许多人可能都熟悉它 它的主要功能是 进行卷复制
现在 有了 ASR 对于我们的 复制源而言很常见的 是磁盘映像 在这种情况下 我们经常会参考执行 此复制的过程 - 将目标卷 恢复(Restore)为目标卷 这就是 Apple Software Restore 名字的由来 但你会听到我使用的 恢复和复制的专业术语 几乎可以互换
那么谁想要这个呢 谁需要这个功能呢
好吧 如果你在教育 或企业 IT 如果你做的事情 类似配置有大量机器的大型实验室 或者如果你编写 备份实用程序 那么复制是一个 你可能需要或想要定期 使用的功能 正如我们将看到的 APFS 的一些新功能 对我们如何进行复制 提出了挑战
另一方面 同样也看到 这些新功能还 提供了使复制 成为更强大 更灵活的 操作的可能
所以我想稍微备份一下 然后再谈谈复制 在过去 APFS 之前 看起来如何 现在正如 Max 所展示的那样 对于以前的文件系统 如 HFS Plus 文件系统 或者我应该说的卷 与包含它的分区是 一对一的关系 这意味着该卷 由一个连续的块设备支持 因此 复制实际上 只涉及对整个分区 进行块复制 当然 如果我们要 复制整个块设备 我们将复制该卷中的 所有文件系统信息 现在可能会出现 一些复杂情况 如图中所示 我们的源和目标分区的大小不同 但有一些方法可以解决这个问题 总的来说 块复制是 一种非常有效且 相对简单的复制方式 但是 当然 有了 APFS 就有一些新功能 使这张图片复杂化
因此 正如 Max 告诉你们的那样 APFS 具有一些功能 如卷管理和空间共享 正如我们所看到的 如果我们看一下 图中的第 1 卷 它就会 分散在容器分区周围 所以它不是一个连续的块设备
它可能是 - 它的数据可能 散布在同一容器中 另一个卷的数据中 如本例中的第 2 卷
此外 我们当然关心 安全和隐私 所以我们必须考虑加密 现在使用 APFS 加密会在文件系统级别完成 而且 在拥有用于 内部存储设备的 T2 安全芯片的 Mac 上 加密始终处于开启状态 它直接与硬件绑定 这意味着它 特定于该 Mac 中的存储设备 因此 如果我们尝试 复制该卷的块 并将其带到其他地方 它们将无法被解密
所以这里的结果是 块拷贝实际上不是 一种用 APFS 卷进行复制的可能方式 那么我们如何将这与 我们的需求相协调呢 好吧 在 macOS Catalina 上一同更新的 我们正在推出 带 ASR 的 APFS 卷复制 带 ASR 和 APFS 的
是这样 谢谢 ASR 和 APFS 紧密集成 并且 ASR 可以让 APFS 从源卷生成流 然后该流被写入目标卷 现在因为 APFS 正在 生成此流 它知道在何处需要读取 源卷的各个部分
因此 源卷不是 连续的块设备 也不是问题
就加密而言 如果卷的源是加密的 那么它将是 -- 来自它的数据 将在生成流时 被动态解密 当然 如果源卷 受 FileVault 保护 则它需要在 进行此复制之前 通过用户操作解锁 如果目标卷本身已加密 则数据处于 - 或者 数据在从流 写入目标卷时被加密 因此 在这种情况下 该数据在到达 目标卷时从 get go 加密 懂了吗 此复制的另一个不错的功能是 在生成流时 会立即对卷数据进行碎片整理 元数据被压缩 因此生成的流 以及由此产生的 目标卷得到了非常好的优化 这可能是一个很好的方法 -- 例如去掌握图像 如果你们正在掌握图像 并且最后一步是 执行复制操作 那么你们的图像卷将得到非常好的优化
因此 当我们进行恢复
复制时 无论你们想说什么 我们都可以使用多种选项 我只是想说出其中几个 第一个真的非常像 我们习惯的恢复 我们可以指定一个源卷 你们可以指定一个目标卷 并且我们的想法是目标卷 将被完全擦除和替换 或者其内容由 源卷的内容替换 现在在这种情况下 我们将第 2 卷作为目标卷 所以我们的恢复 看起来像这样 你会在这里看到一个 示例命令行
结果是第 2 卷的 内容被删除 取而代之的是源卷的内容 因此恢复的卷 和源卷是相同的 顺便提一下 请注意 在此示例中 目标容器中还包含另一个卷 而且这个数量是独一无二的 它的内容得以保留 它不以任何方式 形成复制操作的一部分
但是我们还有另一个选择 即不必指定 目标卷和删除它 我们可以生成 一个全新的卷作为动态目标 我们通过将整个容器指定为 目标来完成此操作 这告诉 ASR 我们 真正想要的是 生成一个全新的卷并恢复到那个 你们可以看到另一个示例命令行 结果是创建并恢复了 一个新卷 因此 在这种情况下 第 1 卷和第 2 卷都是独立的
现在我想移步复制 一会儿 我想谈谈 APFS 中的快照 那么 快照只是 所有卷状态的时间点捕获 例如 我们可能有 一个包含大量文件的卷 我们可以拍摄该卷的快照 结果是一次捕获 一个冻结帧 表示在拍摄快照时 该卷的样子 如果我们对卷 进行后续更改 例如 删除文件或 添加一些新文件 则快照仍然包含 创建时存在的所有状态
因此 在这种情况下 如果我们查看实时卷 则看起来已删除的文件不存在 但从某种意义上说 它仍然存在 因为它是快照的一部分
所以你可能会好奇 “嗯 这与复制有什么关系?” 那么 再一次 有了 macOS Catalina 的新功能
我们现在可以对快照 进行恢复 复制 所以要理解这意味着什么 -- 谢谢你们
要了解这意味着什么 请在左侧考虑此卷 它里面有两个快照 Snap 1 和 Snap 2 它们包含一些共同的文件 那些黄颜色的文件一些快照 而不是另一个快照的文件 一些文件在另一个文件中 而不是在这个 以及该文件不是任何一个快照 我可以将此卷恢复到 右侧的目标卷 它目前是空的 当然 在那里的想法是 在恢复结束时 目标卷看起来像源卷 但是 不是恢复排序 -- 源卷的实时版本 而是当前的样式 我可以改为恢复快照 因此 例如 如果 我想恢复 Snap 1 我可以指定我想恢复的快照
结果是我的目标 现在看起来像 Snap 1 特别注意那两个 从源卷中 删除的文件 他们已经在目标卷中起死回生了
完成后 我可能想在目标卷中 添加一些新文件 但是 也许现在 我想将 Snap 2 恢复到目标卷 当然 同样的想法是 在该操作结束时 实时目标卷 应该看起来像源卷中的 Snap 2
但请注意 源卷和目标卷上 都已有 Snap 1 如果不需要 复制 Snap 2 中的一切 我只需要复制 Snap 1 和 Snap 2 之间不同的东西 那难道不是很好吗 嗯 我确实可以做到 我们将两个快照之间的区别 称为快照增量 我的想法是当我恢复 快照增量时 我正在指定我想要 采取的两个快照 我执行还原 当然最后 实时目标卷从源头 看起来像 Snap 2 但是我想让你 注意到有关这个 目标卷的三件事 第一 所有那些 不属于目标快照的 文件都被丢弃了
第二个 在 Snap 1 中 但不在 Snap 2 中的文件 已从实时目标卷中丢弃 当然 它们仍然 存在于目标卷上的 Snap 1 中
第三 我们需要 复制的唯一内容 是那些属于 Snap 2 但不属于 Snap 1 的文件
好了吗 现在这是一个 非常强大的功能 这是增加发布的 一个好方法 想象一下 你们正在更新一个 装满 100 台机器的实验室 如果你们只是复制 源图像上几个 快照之间的差异 则可以节省大量时间 和大量网络带宽
这就是我对 复制的看法 在这里做点笔记 一个更复杂的文件系统 需要更复杂的 复制机制
APFS 卷复制 最好使用 ASR 完成 因为它提供 最高保真度的副本 它会将加密作为必需处理 最后 我们现在可以 使用 ASR 恢复快照增量中的快照 那么有了这一点之后 我将把话筒转交给 Bill 他将讨论 iOS 的外部文件访问 谢谢 谢谢你 Jon 大家下午好 你们可能记得两年前 我们介绍了文件 App 和一个新的 文件提供程序 API
它们共同为 基于云的文档 提供了出色的体验
今年 我们认为我们可以做得更多
所以今年 我们很高兴宣布 支持 iOS 访问网络共享 和 USB 存储上的文件
对于 USB 存储 我们支持从紧凑型闪存和 CF 卡和棒 再到 USB raid 盒的所有功能
我们支持许多文件系统 我们支持未加密的 APFS
未加密的 HFS Plus 我们支持 FAT 和 ExFAT 所有 iOS 和 iPadOS 设备 均提供此功能 它可以在带有 USB-C 的 iPad Pro 上使用 对于闪电设备 可以使用适当的适配器
继续使用网络共享 我们支持连接到 SMB 3.0 服务器
我们支持通过 WiFi 蜂窝和以太网连接
这里有很多令人兴奋的功能 但我们想要提到的 是我们的 iOS 设备 和 iPadOS 设备 我们支持使用 Windows 搜索协议进行搜索
因此 如果它支持 WSP 协议 所有这些设备都可以 搜索你们的 SMB 服务器
我们也非常高兴地 宣布它包括 SMB 服务器和 macOS Catalina
在继续之前 我想谈谈安全问题 安全性是用户期望 从 iOS 获得的功能 我们用于帮助 实现此安全性的 两个工具是进程 分离和权限分离 在开发此功能时 我们始终牢记这一点 并将其从头开始合并
因此 对于我们 所有的卷和共享 文件系统操作 不是发生在内核上 而是发生在专用的进程空间中 这种分离有助于 我们提供 iOS 用户期望的安全性
现在 让我们在一个实际操作中看到它
好的 我有一台 iPad
那么我不知道 - 你们可能看不到它 但我连接了 USB
我有邮件 在文件的左侧 你们可以看到它的位置 iCloud Drive 如果我们有第三方云提供商 我们也会在那里把他们列出 我们看到了我们的 USB 设备的目的地 当我们选择它时 我们会看到我们的照片 文档 所有文件和目录 我们可以像文件 App 中的 任何其他文件一样操纵它们 因此 要复制一个 你们只需选择它 准备拖放 选择目的地 拖动它 然后放下它 你现在可以看到它 已经在文件夹中了
我们喜欢用设备做的 另一件事就是让照片复制 到它们上面 照片 我有一张 我朋友在印度吃西红柿的照片
我们将它保存到 USB 中 为此 我们只需选择文档 转到“分享” 然后在列表中下载以“保存到文件” 你们可以看到 作为目的地 我们列出了 USB 我们只是选择了它 它已经是了 我们点击了保存 然后它就被复制了 我希望你们很多人 都是 App 开发人员 而且你们想知道 你们的 App 如何利用这一点 此功能适用于 在 iOS 13 上或之后链接的 任何所有 App
因此 请重新构建 App 你可以开始利用
为了实现这一点 我们来看看 Numbers 表格 当我打开 Numbers 表格时 它就开始了 -- 它是从我的 iCloud Drive 开始的
USB 被列为目的地 我们选择它
在那里 我们可以看到 我们所有的文件 我们可以看到我们的照片变暗 因为它们不是 Numbers 表格 然后我们看到我们在这个驱动器上 有两个 Numbers 表格
让我们打开其中一个 这是一项贷款比较 比较两种不同的贷款金额 和两种不同的利率
仅仅为了比较 让我们看看如果我们 提高利率会发生什么 不 Oh 把它设置为 20 而不是 200
哦 不 好吧 这太疯狂了
你可以看到 - 现场可以看到利率正在变化
那么这对开发者来说意味着什么呢
正如我所说的 如果你们在 iOS 13 上或之后进行链接 则可以使用它 因此 请重新构建 App 并进行测试
我们在 iOS 中添加了 五种不同的文件系统类型 这些文件系统 与内部闪存存储上的 APFS 略有不同
一个区别是 iOS 总是有 区分大小写的文件系统 FAT 和 ExFAT 不区分大小写
并且可以以任何方式 配置 HFS 和 APFS
克隆系统调用 可能并不总是可用的
因此 这些差异是 -- 如果这些差异对你们或 确实很重要 请注意卷功能 有两种不同的 API 或 几种 API 可以为你们提供 我想要调用的是 NSURL 中的 resourceValues
这些可以为你们 正在使用的文件系统提供参数
另一个重点是 文件移动可能需要一些时间 所以请将临时文件 放在工作文件附近 如果你不这么做 这很有帮助 因为保存 -- 保存 在最后使用重命名 以便用户 总能看到一个好的文件 他们要么看到 他们开始的文件 要么看到新的保存
为此 我们需要重命名 只有当它们都在同一个 文件系统上时才有效
此外 如果你们对 临时文件不小心 它们可能会在内部存储的 容器中结束 这将导致许多 不必要的 IO
文件管理器可以帮助你们解决此问题 如果你们要求提供 适合你们的文档的 itemReplacementDirectory 的 URL 它将在同一文件系统上 为你们提供一个临时目录
另一件事是 外部设备可能会消失
网络可能超出范围
文件服务器可能会关闭 甚至一只猫可能会咬开电缆
这些事情都可能发生 并且你们的 App 需要 在面对它时是结实的 我特别想指出的一点 是 mmap 可能很危险 它真的很强大 但是如果文件消失了 内核可以告诉你的唯一方法 就是报告 BUS 错误
所以有一件事 如果你正在使用 NSData 你可以 提供一个提示 如果它是安全的 你可以从文件中读出 mmap 这个数据
最后一点是外部设备 所有这些设备 在内部闪存存储器上 具有比 APFS 更高的延迟
因此 如果你们正在进行大规模的 IO 请立即保留多个操作 未完成状态
因此 为了总结今天的演讲
Max 与我们讨论了 如何使根卷只读 以增强安全性 Jon 与我们讨论了 ASR 以及 如何使用 ASR 复制卷 包括快照增量 我和你们谈了 我们如何在 iOS 和 iPadOS 上添加对外部文件的支持 以及如何让你 访问 USB 存储和网络共享上的文件
有关更多信息 我们在 本次会议后有一次实验室 另外明天 有一个
Foundation 中的 Combine 和 Advances 的演讲 他们将 更多地谈论你可以在 外部媒体上做什么 此外 还有一个视频会话 文件管理和 Quick Look 的新内容 将更多地讨论本演讲 UI 文档方面的内容 谢谢大家
[掌声]
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。