text: 1
  00:00:19.620 --> 00:00:25.993
  <c.magenta>Apple File System介绍</c>
  <c.magenta>下一代存储的快照</c>
  
  
  2
  00:00:26.927 --> 00:00:28.428
  <c.magenta>好了 欢迎各位</c>
  
  
  3
  00:00:28.495 --> 00:00:32.198
  <c.magenta>我叫Eric Tamura</c>
  <c.magenta>旁边是Dominic Giampaolo</c>
  
  
  4
  00:00:32.266 --> 00:00:35.135
  <c.magenta>我们会向各位讲一下</c>
  <c.magenta>Apple File System</c>
  
  
  5
  00:00:42.743 --> 00:00:47.181
  <c.magenta>这是关于今天展示内容的</c>
  <c.magenta>一些流程图</c>
  
  
  6
  00:00:47.447 --> 00:00:50.484
  <c.magenta>我会稍微讲一下</c>
  <c.magenta>介绍与动机</c>
  
  
  7
  00:00:50.584 --> 00:00:52.152
  <c.magenta>为什么我们决定去构建它</c>
  
  
  8
  00:00:52.553 --> 00:00:55.689
  <c.magenta>我们添加了一些新功能</c>
  <c.magenta>作为Apple File System的一部分</c>
  
  
  9
  00:00:55.756 --> 00:00:57.791
  <c.magenta>我们简短地展示这些新功能</c>
  
  
  10
  00:00:57.858 --> 00:00:59.026
  <c.magenta>然后在结尾我们会</c>
  
  
  11
  00:00:59.092 --> 00:01:02.396
  <c.magenta>谈谈你可以在应用中</c>
  <c.magenta>使用的一些新API</c>
  
  
  12
  00:01:04.431 --> 00:01:06.133
  <c.magenta>我们开始吧</c>
  
  
  13
  00:01:06.533 --> 00:01:08.302
  <c.magenta>就像Sebastian提过的</c>
  
  
  14
  00:01:08.368 --> 00:01:12.072
  <c.magenta>Apple File System可用在</c>
  <c.magenta>macOS Sierra的 WWDC 版本</c>
  
  
  15
  00:01:12.139 --> 00:01:13.807
  <c.magenta>你们昨天都得到了</c>
  
  
  16
  00:01:14.174 --> 00:01:17.244
  <c.magenta>并且它会作为</c>
  <c.magenta>开发者预览版技术</c>
  
  
  17
  00:01:17.311 --> 00:01:21.682
  <c.magenta>于秋季macOS Sierra的</c>
  <c.magenta>发布之后 在其上面使用</c>
  
  
  18
  00:01:22.950 --> 00:01:24.818
  <c.magenta>什么是Apple File System？</c>
  
  
  19
  00:01:25.085 --> 00:01:28.989
  <c.magenta>它是我们下一代文件系统</c>
  <c.magenta>是我们为Apple产品所构建的</c>
  
  
  20
  00:01:29.356 --> 00:01:30.657
  <c.magenta>你可能会关心这个</c>
  
  
  21
  00:01:30.724 --> 00:01:36.029
  <c.magenta>因为它会在watchOS</c>
  <c.magenta>iOS tvOS和macOS上运行</c>
  
  
  22
  00:01:36.630 --> 00:01:38.232
  <c.magenta>对于预期的受众</c>
  
  
  23
  00:01:38.298 --> 00:01:41.668
  <c.magenta>我们预计你们要么</c>
  <c.magenta>在这些平台上是初来乍到</c>
  
  
  24
  00:01:41.735 --> 00:01:43.170
  <c.magenta>或者是一位长期开发者</c>
  
  
  25
  00:01:43.604 --> 00:01:45.072
  <c.magenta>但我们打算涵盖</c>
  
  
  26
  00:01:45.138 --> 00:01:48.609
  <c.magenta>新文件系统中</c>
  <c.magenta>所有高级功能的足够细节</c>
  
  
  27
  00:01:48.675 --> 00:01:49.977
  <c.magenta>这样你能跟得上</c>
  
  
  28
  00:01:51.011 --> 00:01:54.314
  <c.magenta>该产品的一个特点是</c>
  <c.magenta>我们想从</c>
  
  
  29
  00:01:54.381 --> 00:01:57.150
  <c.magenta>从Apple Watch</c>
  <c.magenta>一路扩展到Mac Pro</c>
  
  
  30
  00:01:58.452 --> 00:02:01.555
  <c.magenta>我们也想利用闪存和SSD存储</c>
  
  
  31
  00:02:01.622 --> 00:02:04.725
  <c.magenta>因为几乎我们所有的产品</c>
  <c.magenta>都使用SSD</c>
  
  
  32
  00:02:06.159 --> 00:02:09.496
  <c.magenta>最后 其构建有加密</c>
  <c.magenta>作为主要功能</c>
  
  
  33
  00:02:09.562 --> 00:02:13.133
  <c.magenta>从最开始到现在</c>
  <c.magenta>我们将这个想法变为现实</c>
  
  
  34
  00:02:14.501 --> 00:02:17.070
  <c.magenta>你可能会想那HFS+怎么办</c>
  
  
  35
  00:02:17.137 --> 00:02:21.708
  <c.magenta>我们目前把HFS+</c>
  <c.magenta>作为主文件系统发布</c>
  
  
  36
  00:02:22.843 --> 00:02:25.612
  <c.magenta>但其最初设计</c>
  <c.magenta>到目前几乎有30年之久</c>
  
  
  37
  00:02:25.679 --> 00:02:28.815
  <c.magenta>你们当中有多少人希望</c>
  <c.magenta>我们再发布30年的HFS+？</c>
  
  
  38
  00:02:30.384 --> 00:02:34.688
  <c.magenta>很好 所以HFS+设计于</c>
  
  
  39
  00:02:34.755 --> 00:02:37.658
  <c.magenta>软盘和硬盘代表</c>
  <c.magenta>最新技术水平的时代</c>
  
  
  40
  00:02:38.392 --> 00:02:39.626
  <c.magenta>自此世界改变了很多</c>
  
  
  41
  00:02:39.693 --> 00:02:44.698
  <c.magenta>现在我们使用SSD 而且</c>
  <c.magenta>其它下一代存储技术也不断发展</c>
  
  
  42
  00:02:45.699 --> 00:02:48.936
  <c.magenta>HFS+的数据结构</c>
  <c.magenta>相对来说也是单线程的</c>
  
  
  43
  00:02:49.002 --> 00:02:53.807
  <c.magenta>所以B-trees要依靠</c>
  <c.magenta>大分块来访问或改变它们</c>
  
  
  44
  00:02:56.610 --> 00:02:59.079
  <c.magenta>并且数据结构也相对死板</c>
  
  
  45
  00:02:59.146 --> 00:03:03.317
  <c.magenta>我们的意思是 像是</c>
  <c.magenta>HFS+中的文件记录或目录记录</c>
  
  
  46
  00:03:03.383 --> 00:03:06.687
  <c.magenta>差不多相当于其他</c>
  <c.magenta>文件系统的索引节点</c>
  
  
  47
  00:03:06.753 --> 00:03:09.990
  <c.magenta>是固定的 这是为了添加</c>
  <c.magenta>新的字段来扩展文件系统</c>
  
  
  48
  00:03:10.057 --> 00:03:12.359
  <c.magenta>加入新的功能</c>
  <c.magenta>我们必须付出代价</c>
  
  
  49
  00:03:12.426 --> 00:03:15.229
  <c.magenta>那就是向后不兼容的卷格式改变</c>
  
  
  50
  00:03:15.295 --> 00:03:18.398
  <c.magenta>我们的意思是</c>
  <c.magenta>如果我们给HFS+添加新功能</c>
  
  
  51
  00:03:18.465 --> 00:03:22.936
  <c.magenta>回到10.5版本 然后</c>
  <c.magenta>附加那个相同的文件系统</c>
  
  
  52
  00:03:23.136 --> 00:03:24.238
  <c.magenta>这会发生什么？</c>
  
  
  53
  00:03:24.671 --> 00:03:27.107
  <c.magenta>所以如果我们关心向后兼容</c>
  
  
  54
  00:03:27.174 --> 00:03:30.644
  <c.magenta>以及向前兼容</c>
  <c.magenta>我们开始考虑</c>
  
  
  55
  00:03:30.711 --> 00:03:34.515
  <c.magenta>也许打造完全</c>
  <c.magenta>崭新的东西是有意义的</c>
  
  
  56
  00:03:35.849 --> 00:03:37.784
  <c.magenta>所以我们考虑出新的东西</c>
  
  
  57
  00:03:38.719 --> 00:03:43.257
  <c.magenta>我们想要的是为Apple产品</c>
  <c.magenta>专门设计和优化的东西</c>
  
  
  58
  00:03:43.524 --> 00:03:46.960
  <c.magenta>其他文件系统良好地</c>
  <c.magenta>执行着其他目的</c>
  
  
  59
  00:03:47.394 --> 00:03:53.500
  <c.magenta>尤其 文件管理器或者企业级别</c>
  <c.magenta>存储服务器有很多的功能</c>
  
  
  60
  00:03:53.567 --> 00:03:55.636
  <c.magenta>对于Apple产品没有太大意义</c>
  
  
  61
  00:03:55.702 --> 00:03:58.939
  <c.magenta>我们通常在所有产品上</c>
  <c.magenta>使用单个存储设备</c>
  
  
  62
  00:03:59.139 --> 00:04:02.042
  <c.magenta>而且我们的规模广泛</c>
  
  
  63
  00:04:02.109 --> 00:04:07.347
  <c.magenta>在Apple Watch上</c>
  <c.magenta>你有更少的DRAM和存储空间</c>
  
  
  64
  00:04:07.414 --> 00:04:10.050
  <c.magenta>与Mac Pro相比</c>
  <c.magenta>Mac Pro有数十GB的</c>
  
  
  65
  00:04:10.117 --> 00:04:12.953
  <c.magenta>潜在DRAM</c>
  <c.magenta>以及数TB的存储空间</c>
  
  
  66
  00:04:13.086 --> 00:04:15.389
  <c.magenta>所以我们想要</c>
  <c.magenta>灵活动态的东西</c>
  
  
  67
  00:04:15.489 --> 00:04:18.492
  <c.magenta>而且在那些平台上运行</c>
  
  
  68
  00:04:20.894 --> 00:04:22.162
  <c.magenta>我们想打造的其它东西</c>
  
  
  69
  00:04:22.229 --> 00:04:24.965
  <c.magenta>我们想新加并增强安全功能</c>
  
  
  70
  00:04:25.032 --> 00:04:29.269
  <c.magenta>我们现在已经在iOS上</c>
  <c.magenta>发布了HFS+的一个版本</c>
  
  
  71
  00:04:29.469 --> 00:04:31.572
  <c.magenta>使用每文件加密</c>
  
  
  72
  00:04:31.638 --> 00:04:34.341
  <c.magenta>所以在存储空间上</c>
  <c.magenta>每个文件都是不同加密的</c>
  
  
  73
  00:04:34.408 --> 00:04:37.110
  <c.magenta>不同于这个文件系统</c>
  <c.magenta>上的其它任何文件</c>
  
  
  74
  00:04:37.845 --> 00:04:39.413
  <c.magenta>我们想更进一步</c>
  
  
  75
  00:04:39.479 --> 00:04:43.183
  <c.magenta>我们会在稍后的展示中</c>
  <c.magenta>深入谈谈这些功能</c>
  
  
  76
  00:04:44.384 --> 00:04:47.821
  <c.magenta>最后 我们想加入一些</c>
  <c.magenta>新的通用文件系统功能</c>
  
  
  77
  00:04:48.455 --> 00:04:51.925
  <c.magenta>是应大家要求</c>
  <c.magenta>而且我们认为是十分重要的</c>
  
  
  78
  00:04:51.992 --> 00:04:54.161
  <c.magenta>对于我们平台的未来</c>
  
  
  79
  00:04:55.429 --> 00:04:56.997
  <c.magenta>在我们讲这些新功能之前</c>
  
  
  80
  00:04:57.064 --> 00:05:00.133
  <c.magenta>我想给大家简短介绍一下</c>
  
  
  81
  00:05:00.200 --> 00:05:02.769
  <c.magenta>Apple存储软件的样子</c>
  
  
  82
  00:05:03.170 --> 00:05:07.808
  <c.magenta>在文件系统和存储方面</c>
  <c.magenta>我们会谈论HFS+</c>
  
  
  83
  00:05:08.375 --> 00:05:12.112
  <c.magenta>但我们涉及的范围</c>
  <c.magenta>不止是HFS+</c>
  
  
  84
  00:05:12.179 --> 00:05:14.381
  <c.magenta>这里实际上有很多辅助技术</c>
  
  
  85
  00:05:14.448 --> 00:05:16.617
  <c.magenta>构成了我们的存储软件</c>
  
  
  86
  00:05:17.518 --> 00:05:18.952
  <c.magenta>在一开始</c>
  <c.magenta>我们有HFS标准</c>
  
  
  87
  00:05:19.019 --> 00:05:21.421
  <c.magenta>这几乎</c>
  <c.magenta>至今有30年之久</c>
  
  
  88
  00:05:21.655 --> 00:05:25.492
  <c.magenta>若干年后</c>
  <c.magenta>我们添加了HFS+</c>
  
  
  89
  00:05:25.659 --> 00:05:27.261
  <c.magenta>不过我们加入了死机防护</c>
  
  
  90
  00:05:27.327 --> 00:05:30.664
  <c.magenta>我们还加入了</c>
  <c.magenta>区分大小写变体的日志</c>
  
  
  91
  00:05:32.065 --> 00:05:35.502
  <c.magenta>我们还增加了CoreStorage</c>
  <c.magenta>这给了我们全盘加密</c>
  
  
  92
  00:05:35.569 --> 00:05:39.206
  <c.magenta>以及Fusion Drive</c>
  <c.magenta>这将SSD的速度与</c>
  
  
  93
  00:05:39.273 --> 00:05:41.441
  <c.magenta>硬盘的容量相组合</c>
  
  
  94
  00:05:42.075 --> 00:05:44.745
  <c.magenta>我们不能忘记</c>
  <c.magenta>所有针对iOS的变体</c>
  
  
  95
  00:05:44.811 --> 00:05:49.383
  <c.magenta>我们有针对iOS的HFS+变体</c>
  <c.magenta>以及支持</c>
  
  
  96
  00:05:49.449 --> 00:05:51.885
  <c.magenta>刚才谈到的每文件加密的变体</c>
  
  
  97
  00:05:52.653 --> 00:05:55.355
  <c.magenta>所以我们的目的是</c>
  <c.magenta>所有这些技术</c>
  
  
  98
  00:05:55.422 --> 00:05:59.560
  <c.magenta>都被一样东西所取代</c>
  <c.magenta>那就是Apple File System</c>
  
  
  99
  00:06:02.329 --> 00:06:05.966
  <c.magenta>我来稍微谈谈Apple File</c>
  <c.magenta>System中的一些新功能</c>
  
  
  100
  00:06:09.136 --> 00:06:13.207
  <c.magenta>这个简明的视图</c>
  <c.magenta>囊括了我们现有内容</c>
  
  
  101
  00:06:13.273 --> 00:06:15.876
  <c.magenta>我们有一些</c>
  <c.magenta>改进的文件系统底层技术</c>
  
  
  102
  00:06:16.176 --> 00:06:21.381
  <c.magenta>HFS兼容性 空间分享</c>
  <c.magenta>克隆文件和目录</c>
  
  
  103
  00:06:21.448 --> 00:06:24.418
  <c.magenta>快照和快照恢复</c>
  
  
  104
  00:06:24.852 --> 00:06:27.354
  <c.magenta>一项我们称之为</c>
  <c.magenta>目录大小快速调整的功能</c>
  
  
  105
  00:06:27.688 --> 00:06:30.324
  <c.magenta>原子级安全存储基元</c>
  <c.magenta>以及加密</c>
  
  
  106
  00:06:30.390 --> 00:06:31.859
  <c.magenta>你不必把它们都记下来</c>
  
  
  107
  00:06:31.925 --> 00:06:35.529
  <c.magenta>我们会在下面的幻灯片中</c>
  <c.magenta>进行深入讲解的</c>
  
  
  108
  00:06:37.664 --> 00:06:40.667
  <c.magenta>首先来谈谈</c>
  <c.magenta>一些改进的底层技术</c>
  
  
  109
  00:06:40.734 --> 00:06:42.936
  <c.magenta>改进的文件系统底层技术</c>
  
  
  110
  00:06:43.003 --> 00:06:45.839
  <c.magenta>首先闪存和SSD优化</c>
  
  
  111
  00:06:46.540 --> 00:06:49.877
  <c.magenta>在我们所有的设备上</c>
  <c.magenta>在我们所有的iOS设备上</c>
  
  
  112
  00:06:49.943 --> 00:06:52.779
  <c.magenta>而且很多Mac上</c>
  <c.magenta>是内置有SSD的</c>
  
  
  113
  00:06:52.946 --> 00:06:55.949
  <c.magenta>我们想尽可能地</c>
  <c.magenta>对固态硬盘进行优化</c>
  
  
  114
  00:06:56.950 --> 00:06:59.987
  <c.magenta>其还有死机防护功能</c>
  <c.magenta>APFS或Apple File System</c>
  
  
  115
  00:07:00.053 --> 00:07:02.923
  <c.magenta>采用崭新的</c>
  <c.magenta>写入时复制元数据方案</c>
  
  
  116
  00:07:02.990 --> 00:07:07.661
  <c.magenta>所以每个元数据写入都</c>
  <c.magenta>写入到稳态存储上的新位置</c>
  
  
  117
  00:07:07.828 --> 00:07:10.898
  <c.magenta>我们将其与</c>
  <c.magenta>事务处理子系统相组合</c>
  
  
  118
  00:07:10.964 --> 00:07:13.967
  <c.magenta>这保证了如果断电</c>
  <c.magenta>如果机器死机</c>
  
  
  119
  00:07:14.034 --> 00:07:16.770
  <c.magenta>或糟糕的事情发生</c>
  <c.magenta>你会看到一致视图</c>
  
  
  120
  00:07:16.837 --> 00:07:20.807
  <c.magenta>关于之前的磁盘内容</c>
  <c.magenta>或者什么变更都看不到</c>
  
  
  121
  00:07:23.477 --> 00:07:25.879
  <c.magenta>我们有现代64位原生字段</c>
  
  
  122
  00:07:25.946 --> 00:07:29.049
  <c.magenta>所以索引节点号</c>
  <c.magenta>扩展成了64位</c>
  
  
  123
  00:07:29.316 --> 00:07:32.486
  <c.magenta>我们有时间戳现在也是64位</c>
  
  
  124
  00:07:32.553 --> 00:07:34.988
  <c.magenta>我们支持纳秒时间戳粒度</c>
  
  
  125
  00:07:35.255 --> 00:07:38.692
  <c.magenta>我们也支持Sparks Files</c>
  <c.magenta>在Apple File System上是首次</c>
  
  
  126
  00:07:39.893 --> 00:07:43.830
  <c.magenta>所有指向磁盘上</c>
  <c.magenta>分块实际位置的</c>
  
  
  127
  00:07:43.897 --> 00:07:47.100
  <c.magenta>文件和目录记录</c>
  <c.magenta>也扩展成了64位</c>
  
  
  128
  00:07:48.368 --> 00:07:51.471
  <c.magenta>我们的数据结构也是可扩展的</c>
  <c.magenta>而且允许未来扩展</c>
  
  
  129
  00:07:51.772 --> 00:07:54.374
  <c.magenta>所以我们讨论</c>
  <c.magenta>HFS+的一件事是</c>
  
  
  130
  00:07:54.441 --> 00:07:57.244
  <c.magenta>其数据结构相对死板</c>
  
  
  131
  00:07:57.711 --> 00:07:59.913
  <c.magenta>在APFS或Apple</c>
  <c.magenta>File System上</c>
  
  
  132
  00:08:00.347 --> 00:08:04.718
  <c.magenta>代表核心索引节点的</c>
  <c.magenta>数据结构现在是灵活的</c>
  
  
  133
  00:08:05.018 --> 00:08:07.921
  <c.magenta>所以字段是可选的</c>
  <c.magenta>或我们可能尚未将其创造出来</c>
  
  
  134
  00:08:07.988 --> 00:08:10.757
  <c.magenta>所以我们在过程中</c>
  <c.magenta>可能选择添加的新字段</c>
  
  
  135
  00:08:11.124 --> 00:08:13.427
  <c.magenta>会被正确识别成不支持</c>
  
  
  136
  00:08:13.493 --> 00:08:16.763
  <c.magenta>或是我不清楚</c>
  <c.magenta>你是否将那个存储</c>
  
  
  137
  00:08:16.830 --> 00:08:20.200
  <c.magenta>附加到当前版本的</c>
  <c.magenta>macOS Sierra</c>
  
  
  138
  00:08:20.667 --> 00:08:22.469
  <c.magenta>这样我们可以添加新功能</c>
  
  
  139
  00:08:22.536 --> 00:08:26.006
  <c.magenta>不需要担心</c>
  <c.magenta>会破坏掉向后兼容</c>
  
  
  140
  00:08:26.573 --> 00:08:28.775
  <c.magenta>这还允许我们</c>
  <c.magenta>拥有可选字段</c>
  
  
  141
  00:08:28.842 --> 00:08:32.578
  <c.magenta>在一些系统上</c>
  <c.magenta>单是文件的存在</c>
  
  
  142
  00:08:32.645 --> 00:08:34.982
  <c.magenta>就足够传递出一些信息</c>
  
  
  143
  00:08:35.349 --> 00:08:38.619
  <c.magenta>如果你有0字节的文件</c>
  <c.magenta>你不一定需要</c>
  
  
  144
  00:08:38.684 --> 00:08:41.121
  <c.magenta>所有机器指向</c>
  <c.magenta>哪个分块在磁盘上</c>
  
  
  145
  00:08:41.188 --> 00:08:43.857
  <c.magenta>因为它们不需要</c>
  <c.magenta>所以这些字段是可选的</c>
  
  
  146
  00:08:45.592 --> 00:08:48.262
  <c.magenta>这也优化于Apple</c>
  <c.magenta>Software生态系统</c>
  
  
  147
  00:08:48.328 --> 00:08:52.165
  <c.magenta>我们想添加功能</c>
  <c.magenta>并优化API</c>
  
  
  148
  00:08:52.232 --> 00:08:55.569
  <c.magenta>这对我们平台的</c>
  <c.magenta>向前发展极其重要</c>
  
  
  149
  00:08:58.639 --> 00:09:00.607
  <c.magenta>我们也有低延迟设计</c>
  
  
  150
  00:09:00.674 --> 00:09:04.945
  <c.magenta>在文件系统中 延迟</c>
  <c.magenta>通常是延迟与吞吐量之间的折衷</c>
  
  
  151
  00:09:05.012 --> 00:09:08.081
  <c.magenta>我们选择倾向延迟这一边</c>
  
  
  152
  00:09:08.549 --> 00:09:10.584
  <c.magenta>这么做是因为</c>
  <c.magenta>我们想让你的应用</c>
  
  
  153
  00:09:10.651 --> 00:09:15.489
  <c.magenta>当用户在桌面上点击应用</c>
  <c.magenta>或在手机上按下应用时</c>
  
  
  154
  00:09:15.556 --> 00:09:17.624
  <c.magenta>你想让应用快速出现</c>
  <c.magenta>响应迅速</c>
  
  
  155
  00:09:17.691 --> 00:09:19.426
  <c.magenta>而且有非常明快的动画</c>
  
  
  156
  00:09:19.760 --> 00:09:21.828
  <c.magenta>这个的原因是</c>
  <c.magenta>当你进入文件系统</c>
  
  
  157
  00:09:21.895 --> 00:09:25.933
  <c.magenta>我们想确保</c>
  <c.magenta>你会尽快得到你想要的回答</c>
  
  
  158
  00:09:27.501 --> 00:09:30.771
  <c.magenta>最后我们有原生加密支持</c>
  <c.magenta>内置于系统内部</c>
  
  
  159
  00:09:31.138 --> 00:09:34.575
  <c.magenta>我们提过了 在HFS+上</c>
  <c.magenta>使用的是每文件加密</c>
  
  
  160
  00:09:34.641 --> 00:09:37.244
  <c.magenta>不过它们是通过</c>
  <c.magenta>扩展属性存储在磁盘上的</c>
  
  
  161
  00:09:37.578 --> 00:09:40.981
  <c.magenta>在Apple File System上并非如此</c>
  <c.magenta>它们现在就如头等公民一般</c>
  
  
  162
  00:09:41.048 --> 00:09:44.184
  <c.magenta>是文件系统内部的一级对象</c>
  
  
  163
  00:09:45.819 --> 00:09:47.421
  <c.magenta>这就是底层技术的略微介绍</c>
  
  
  164
  00:09:47.721 --> 00:09:48.956
  <c.magenta>HFS兼容性</c>
  
  
  165
  00:09:49.022 --> 00:09:52.326
  <c.magenta>如果你们的应用</c>
  <c.magenta>在HFS+上运行良好</c>
  
  
  166
  00:09:52.659 --> 00:09:54.828
  <c.magenta>我们打算让它们继续运行</c>
  
  
  167
  00:09:54.895 --> 00:09:57.865
  <c.magenta>不需要你那边</c>
  <c.magenta>进行任何更改</c>
  
  
  168
  00:09:58.265 --> 00:10:02.236
  <c.magenta>Apple File System会支持</c>
  <c.magenta>并替换HFS+的功能</c>
  
  
  169
  00:10:02.302 --> 00:10:03.303
  <c.magenta>这里有个星号</c>
  
  
  170
  00:10:03.370 --> 00:10:06.874
  <c.magenta>因为有三个功能</c>
  <c.magenta>我们不会继续支持</c>
  
  
  171
  00:10:07.207 --> 00:10:10.811
  <c.magenta>一个是交换数据</c>
  <c.magenta>另一个是Search FS</c>
  
  
  172
  00:10:10.878 --> 00:10:14.781
  <c.magenta>然后第三个是</c>
  <c.magenta>“时间机器”的目录硬链接</c>
  
  
  173
  00:10:15.749 --> 00:10:21.388
  <c.magenta>不过其他剩下的API和行为</c>
  <c.magenta>都会得到支持 和HFS+一样</c>
  
  
  174
  00:10:23.056 --> 00:10:24.958
  <c.magenta>现在我想稍微讲讲</c>
  <c.magenta>空间分享</c>
  
  
  175
  00:10:25.025 --> 00:10:28.428
  <c.magenta>这是Apple File System上</c>
  <c.magenta>新添加的一项功能</c>
  
  
  176
  00:10:29.196 --> 00:10:32.099
  <c.magenta>我快速调查一下</c>
  <c.magenta>在座的有多少人</c>
  
  
  177
  00:10:32.165 --> 00:10:35.669
  <c.magenta>有Mac或者在Mac上</c>
  <c.magenta>使用一个以上的分区？</c>
  
  
  178
  00:10:36.870 --> 00:10:41.842
  <c.magenta>非常好 我们也是</c>
  <c.magenta>在内部我们做的一件事</c>
  
  
  179
  00:10:41.909 --> 00:10:45.279
  <c.magenta>是我们想让开发版本的OS</c>
  <c.magenta>在一个分区上</c>
  
  
  180
  00:10:45.345 --> 00:10:48.615
  <c.magenta>我们想让稳定发布版本</c>
  <c.magenta>在另一个分区上</c>
  
  
  181
  00:10:48.815 --> 00:10:50.851
  <c.magenta>或你可能选择将主目录放在一个分区上</c>
  
  
  182
  00:10:50.918 --> 00:10:54.154
  <c.magenta>其他你不在意的不同数据</c>
  <c.magenta>放在另一个上面</c>
  
  
  183
  00:10:54.621 --> 00:10:57.891
  <c.magenta>不过我们得知了一件事</c>
  <c.magenta>通过分析</c>
  
  
  184
  00:10:57.958 --> 00:10:59.960
  <c.magenta>来自用户选择性输入的</c>
  <c.magenta>数据收集</c>
  
  
  185
  00:11:00.027 --> 00:11:02.429
  <c.magenta>以及向Apple设备</c>
  <c.magenta>报告的统计数据</c>
  
  
  186
  00:11:02.496 --> 00:11:07.167
  <c.magenta>大多数终端用户不这样做</c>
  <c.magenta>他们只有一个分区</c>
  
  
  187
  00:11:07.734 --> 00:11:10.137
  <c.magenta>他们不做的原因是这很困难</c>
  
  
  188
  00:11:10.370 --> 00:11:13.040
  <c.magenta>你必须清楚知道</c>
  <c.magenta>如何给磁盘布局</c>
  
  
  189
  00:11:13.106 --> 00:11:16.777
  <c.magenta>在你设置的时候</c>
  <c.magenta>而且更换它是比较昂贵的</c>
  
  
  190
  00:11:17.211 --> 00:11:19.847
  <c.magenta>此外 一个分区上的空闲空间</c>
  <c.magenta>如你所知</c>
  
  
  191
  00:11:19.913 --> 00:11:23.650
  <c.magenta>不会转换成</c>
  <c.magenta>另一分区上的可用空闲空间</c>
  
  
  192
  00:11:24.151 --> 00:11:27.254
  <c.magenta>所以我们使用名为</c>
  <c.magenta>空间分享的功能来解决该问题</c>
  
  
  193
  00:11:27.654 --> 00:11:28.889
  <c.magenta>我们看看这个例子</c>
  
  
  194
  00:11:28.956 --> 00:11:32.159
  <c.magenta>我们会在流程中</c>
  <c.magenta>说明这项功能</c>
  
  
  195
  00:11:32.226 --> 00:11:35.362
  <c.magenta>假设你在下载</c>
  <c.magenta>最新最棒的猫咪视频</c>
  
  
  196
  00:11:35.429 --> 00:11:38.498
  <c.magenta>从朋友那里得来的</c>
  <c.magenta>在网络上用AirDrop下载</c>
  
  
  197
  00:11:39.266 --> 00:11:42.402
  <c.magenta>假设文件变大</c>
  <c.magenta>越来越大</c>
  
  
  198
  00:11:42.469 --> 00:11:45.973
  <c.magenta>事实上</c>
  <c.magenta>大到你的空间都被占满了</c>
  
  
  199
  00:11:46.039 --> 00:11:48.008
  <c.magenta>在你运行的那个分区上</c>
  
  
  200
  00:11:48.509 --> 00:11:50.244
  <c.magenta>这种情况下</c>
  <c.magenta>你做不了多少事情</c>
  
  
  201
  00:11:50.310 --> 00:11:51.545
  <c.magenta>若空间占满</c>
  <c.magenta>那就是占满了</c>
  
  
  202
  00:11:51.979 --> 00:11:55.916
  <c.magenta>你可以做的一件事是</c>
  <c.magenta>之后马上完全销毁</c>
  
  
  203
  00:11:55.983 --> 00:11:58.652
  <c.magenta>那个分区</c>
  <c.magenta>然后扩张分区1</c>
  
  
  204
  00:11:58.719 --> 00:11:59.786
  <c.magenta>我们来看看</c>
  
  
  205
  00:12:00.053 --> 00:12:04.758
  <c.magenta>我们可以销毁分区2</c>
  <c.magenta>分区1扩张</c>
  
  
  206
  00:12:04.825 --> 00:12:08.562
  <c.magenta>现在你有足够的空间</c>
  <c.magenta>来继续下载猫咪视频了</c>
  
  
  207
  00:12:09.763 --> 00:12:12.999
  <c.magenta>但这也很不灵活</c>
  <c.magenta>而且会带来一些问题</c>
  
  
  208
  00:12:13.066 --> 00:12:16.570
  <c.magenta>如果你下载的文件不在分区1上</c>
  
  
  209
  00:12:16.637 --> 00:12:19.072
  <c.magenta>而实际上是在分区0</c>
  
  
  210
  00:12:19.673 --> 00:12:21.942
  <c.magenta>这种情况下</c>
  <c.magenta>你会下载文件</c>
  
  
  211
  00:12:22.009 --> 00:12:26.246
  <c.magenta>越来越大</c>
  <c.magenta>就算你有空闲空间</c>
  
  
  212
  00:12:26.313 --> 00:12:29.383
  <c.magenta>或者愿意销毁分区2上的内容</c>
  
  
  213
  00:12:29.550 --> 00:12:33.687
  <c.magenta>我们可以销毁它</c>
  <c.magenta>不过这样分区0不会扩张</c>
  
  
  214
  00:12:33.820 --> 00:12:35.956
  <c.magenta>因为它并不靠近任何我们刚才</c>
  
  
  215
  00:12:36.023 --> 00:12:37.391
  <c.magenta>腾出来的空闲空间</c>
  
  
  216
  00:12:37.524 --> 00:12:40.727
  <c.magenta>所以我们认为这是可以</c>
  <c.magenta>使用空间分享解决的问题</c>
  
  
  217
  00:12:41.128 --> 00:12:43.764
  <c.magenta>在Apple File System中</c>
  <c.magenta>我们想出了这一基本概念</c>
  
  
  218
  00:12:43.830 --> 00:12:46.033
  <c.magenta>我们称其为容器</c>
  <c.magenta>很合适的名字</c>
  
  
  219
  00:12:46.099 --> 00:12:49.736
  <c.magenta>因为它包含了卷或单个文件系统</c>
  
  
  220
  00:12:50.571 --> 00:12:53.607
  <c.magenta>在这个实例中</c>
  <c.magenta>Apple File System的容器</c>
  
  
  221
  00:12:53.674 --> 00:12:55.609
  <c.magenta>代表了最低级别的功能</c>
  
  
  222
  00:12:55.676 --> 00:12:58.579
  <c.magenta>这个封装了我们的块分配器</c>
  
  
  223
  00:12:58.645 --> 00:13:00.981
  <c.magenta>以及我们的死机防护子系统</c>
  
  
  224
  00:13:01.715 --> 00:13:04.718
  <c.magenta>假如说我们有分区0</c>
  <c.magenta>在分区中占有一定</c>
  
  
  225
  00:13:04.785 --> 00:13:07.921
  <c.magenta>数量的空闲空间</c>
  
  
  226
  00:13:08.989 --> 00:13:11.925
  <c.magenta>卷可以扩张或缩小</c>
  
  
  227
  00:13:12.860 --> 00:13:15.429
  <c.magenta>但在所有这些情况下</c>
  <c.magenta>空闲空间会动态地调整成</c>
  
  
  228
  00:13:15.495 --> 00:13:18.565
  <c.magenta>在你进行请求时</c>
  <c.magenta>可用的大小</c>
  
  
  229
  00:13:18.932 --> 00:13:21.335
  <c.magenta>还可在容器中</c>
  <c.magenta>创建一个以上的卷</c>
  
  
  230
  00:13:21.401 --> 00:13:23.570
  <c.magenta>这会逐渐占用更多空间</c>
  
  
  231
  00:13:24.104 --> 00:13:26.807
  <c.magenta>如果你想在这个时候</c>
  
  
  232
  00:13:26.874 --> 00:13:28.375
  <c.magenta>扩张卷0</c>
  <c.magenta>你就能做到</c>
  
  
  233
  00:13:28.442 --> 00:13:31.812
  <c.magenta>如果你询问</c>
  <c.magenta>系统中还剩多少空间可用</c>
  
  
  234
  00:13:31.879 --> 00:13:35.015
  <c.magenta>绿色长方形底部的区域就是</c>
  
  
  235
  00:13:35.249 --> 00:13:36.250
  <c.magenta>开发者们 要注意</c>
  
  
  236
  00:13:36.316 --> 00:13:38.452
  <c.magenta>这个东西稍微不同于</c>
  
  
  237
  00:13:38.519 --> 00:13:40.988
  <c.magenta>你之前计算空闲空间的方法</c>
  
  
  238
  00:13:41.054 --> 00:13:44.491
  <c.magenta>如果你使用一些范例</c>
  <c.magenta>例如使用总共存储大小</c>
  
  
  239
  00:13:44.558 --> 00:13:47.027
  <c.magenta>减去已用空间</c>
  <c.magenta>来得出空闲空间</c>
  
  
  240
  00:13:47.094 --> 00:13:50.030
  <c.magenta>这不会再起作用了</c>
  <c.magenta>因为容器上的</c>
  
  
  241
  00:13:50.097 --> 00:13:52.999
  <c.magenta>其他卷</c>
  <c.magenta>也在参与空间分享</c>
  
  
  242
  00:13:53.433 --> 00:13:58.438
  <c.magenta>此外 你也没有必要</c>
  <c.magenta>将所有已用空间加起来</c>
  
  
  243
  00:14:00.140 --> 00:14:02.142
  <c.magenta>接下来 我请Dominic上台</c>
  
  
  244
  00:14:02.209 --> 00:14:05.045
  <c.magenta>它会给大家讲讲</c>
  <c.magenta>克隆文件和目录</c>
  
  
  245
  00:14:10.918 --> 00:14:13.353
  <c.magenta>嗨 我叫Dominic</c>
  <c.magenta>我将讲解一些</c>
  
  
  246
  00:14:13.420 --> 00:14:16.156
  <c.magenta>我们在APFS中有的</c>
  <c.magenta>其他高级功能</c>
  
  
  247
  00:14:16.657 --> 00:14:19.793
  <c.magenta>首先 我们来谈谈</c>
  <c.magenta>克隆文件和目录</c>
  
  
  248
  00:14:19.860 --> 00:14:23.096
  <c.magenta>这里我们有一个文件</c>
  <c.magenta>TOP_SECRET_APFS.key</c>
  
  
  249
  00:14:23.397 --> 00:14:24.831
  <c.magenta>这在Eric的主目录中</c>
  
  
  250
  00:14:24.898 --> 00:14:27.234
  <c.magenta>它引用了两个数据快</c>
  
  
  251
  00:14:27.467 --> 00:14:30.504
  <c.magenta>现在如果Eric</c>
  <c.magenta>想做这次展示的档案</c>
  
  
  252
  00:14:30.737 --> 00:14:33.373
  <c.magenta>它在这一时刻中存在着</c>
  <c.magenta>他可以复制数据</c>
  
  
  253
  00:14:33.440 --> 00:14:36.143
  <c.magenta>通过全部读取</c>
  <c.magenta>然后再写出来</c>
  
  
  254
  00:14:36.410 --> 00:14:41.582
  <c.magenta>这很明显会消耗CPU</c>
  <c.magenta>电力以及磁盘空间使用</c>
  
  
  255
  00:14:41.682 --> 00:14:44.585
  <c.magenta>相反 在APFS上</c>
  <c.magenta>你可以克隆文件</c>
  
  
  256
  00:14:44.751 --> 00:14:47.721
  <c.magenta>通过克隆文件</c>
  <c.magenta>你复制了数据的引用</c>
  
  
  257
  00:14:47.788 --> 00:14:49.389
  <c.magenta>而不是实际数据</c>
  
  
  258
  00:14:49.456 --> 00:14:53.493
  <c.magenta>所以很明显会更快</c>
  <c.magenta>而且如果是大文件</c>
  
  
  259
  00:14:53.594 --> 00:14:55.629
  <c.magenta>你不会使用两倍的空间</c>
  
  
  260
  00:14:55.696 --> 00:14:57.631
  <c.magenta>你使用的是</c>
  <c.magenta>大小完全一样的空间</c>
  
  
  261
  00:14:57.698 --> 00:15:02.035
  <c.magenta>外加用于数据额外引用</c>
  <c.magenta>少量递增空间</c>
  
  
  262
  00:15:02.336 --> 00:15:04.805
  <c.magenta>克隆在文件系统中能保证</c>
  
  
  263
  00:15:04.872 --> 00:15:08.575
  <c.magenta>如果在原件或克隆</c>
  <c.magenta>上进行修改</c>
  
  
  264
  00:15:08.742 --> 00:15:11.545
  <c.magenta>文件系统会将</c>
  <c.magenta>那个数据写入新的位置</c>
  
  
  265
  00:15:11.612 --> 00:15:13.647
  <c.magenta>所以克隆原封不动</c>
  
  
  266
  00:15:14.815 --> 00:15:16.850
  <c.magenta>所以这一点要着重记住</c>
  
  
  267
  00:15:16.917 --> 00:15:20.787
  <c.magenta>当你有克隆时</c>
  <c.magenta>你在克隆的时候</c>
  
  
  268
  00:15:20.854 --> 00:15:22.289
  <c.magenta>你没在使用任何额外空间</c>
  
  
  269
  00:15:22.356 --> 00:15:26.660
  <c.magenta>随着你继续进行修改</c>
  <c.magenta>你会开始使用越来越多的空间</c>
  
  
  270
  00:15:27.895 --> 00:15:31.465
  <c.magenta>此外 因为APFS</c>
  <c.magenta>iOS和macOS</c>
  
  
  271
  00:15:31.532 --> 00:15:34.735
  <c.magenta>支持应用程序捆绑包中的文档</c>
  
  
  272
  00:15:34.801 --> 00:15:38.739
  <c.magenta>APFS还会允许你克隆</c>
  <c.magenta>整个目录层级</c>
  
  
  273
  00:15:38.805 --> 00:15:40.607
  <c.magenta>文档捆绑包是一个目录</c>
  
  
  274
  00:15:40.674 --> 00:15:43.076
  <c.magenta>其内部包含着一套文件</c>
  
  
  275
  00:15:43.143 --> 00:15:46.113
  <c.magenta>APFS可以原子级别地克隆它</c>
  
  
  276
  00:15:47.114 --> 00:15:49.183
  <c.magenta>接下来我们谈谈快照</c>
  
  
  277
  00:15:49.716 --> 00:15:53.520
  <c.magenta>这里我们有文件系统的</c>
  <c.magenta>另一个代表 其中有两个文件</c>
  
  
  278
  00:15:53.587 --> 00:15:55.856
  <c.magenta>BikeRacing和</c>
  <c.magenta>CoffeeOrigins</c>
  
  
  279
  00:15:55.989 --> 00:15:59.660
  <c.magenta>BikeRacing有两个数据块</c>
  <c.magenta>CoffeeOrigins是一个</c>
  
  
  280
  00:15:59.860 --> 00:16:03.597
  <c.magenta>如果我们捕获文件系统的快照</c>
  <c.magenta>我们现在有一个分离的</c>
  
  
  281
  00:16:03.664 --> 00:16:07.568
  <c.magenta>可独立挂载的</c>
  <c.magenta>只读的文件系统副本</c>
  
  
  282
  00:16:07.634 --> 00:16:12.806
  <c.magenta>这代表在捕获快照的那一时刻</c>
  <c.magenta>文件系统中的数据</c>
  
  
  283
  00:16:12.940 --> 00:16:16.910
  <c.magenta>跟克隆很相似 如果在</c>
  <c.magenta>活动的文件系统中进行写入</c>
  
  
  284
  00:16:16.977 --> 00:16:19.646
  <c.magenta>文件系统会将</c>
  <c.magenta>那个数据放入新的位置</c>
  
  
  285
  00:16:19.713 --> 00:16:21.915
  <c.magenta>保留快照的完整性</c>
  
  
  286
  00:16:22.850 --> 00:16:26.887
  <c.magenta>同样的 如果我们删除</c>
  <c.magenta>CoffeeOrigins.key</c>
  
  
  287
  00:16:26.954 --> 00:16:30.991
  <c.magenta>尝试清空一些空间</c>
  <c.magenta>文件系统无法回收那些数据块</c>
  
  
  288
  00:16:31.058 --> 00:16:33.927
  <c.magenta>因为如你所见</c>
  <c.magenta>快照的文件系统</c>
  
  
  289
  00:16:33.994 --> 00:16:35.896
  <c.magenta>继续引用这那些数据块</c>
  
  
  290
  00:16:36.029 --> 00:16:37.631
  <c.magenta>这是一个很重要的考虑</c>
  
  
  291
  00:16:37.698 --> 00:16:40.434
  <c.magenta>开发者在快照上工作时需要留意</c>
  
  
  292
  00:16:40.501 --> 00:16:43.971
  <c.magenta>因为当一个文件被删除</c>
  <c.magenta>如果它存在于</c>
  
  
  293
  00:16:44.037 --> 00:16:46.840
  <c.magenta>快照捕获的时刻</c>
  <c.magenta>那数据块就无法回收</c>
  
  
  294
  00:16:46.907 --> 00:16:49.710
  <c.magenta>所以快照可以致使你</c>
  <c.magenta>使用所有的磁盘空间</c>
  
  
  295
  00:16:49.776 --> 00:16:52.913
  <c.magenta>如果你不定期回收它们</c>
  
  
  296
  00:16:53.580 --> 00:16:56.316
  <c.magenta>我们预计开发者</c>
  <c.magenta>可能会将快照</c>
  
  
  297
  00:16:56.383 --> 00:16:59.486
  <c.magenta>用于获取稳定只读的数据副本</c>
  
  
  298
  00:16:59.553 --> 00:17:02.856
  <c.magenta>将其用于备份</c>
  <c.magenta>不过我们也想知道来自</c>
  
  
  299
  00:17:02.923 --> 00:17:05.791
  <c.magenta>开发者的其他反馈</c>
  <c.magenta>关于快照的其他可能用途</c>
  
  
  300
  00:17:05.858 --> 00:17:08.228
  <c.magenta>所以请在12:30</c>
  <c.magenta>到实验室和我们见面</c>
  
  
  301
  00:17:08.694 --> 00:17:11.031
  <c.magenta>让我们知道</c>
  <c.magenta>你会如何使用快照</c>
  
  
  302
  00:17:12.833 --> 00:17:14.902
  <c.magenta>现在我们谈谈</c>
  <c.magenta>快照恢复</c>
  
  
  303
  00:17:14.968 --> 00:17:17.069
  <c.magenta>这是APFS支持的</c>
  <c.magenta>另一项功能</c>
  
  
  304
  00:17:17.137 --> 00:17:19.306
  <c.magenta>我们有相同的文件系统状态</c>
  
  
  305
  00:17:19.373 --> 00:17:22.009
  <c.magenta>不过我们决定</c>
  <c.magenta>不要这样</c>
  
  
  306
  00:17:22.075 --> 00:17:25.412
  <c.magenta>我们想恢复</c>
  <c.magenta>这基本上是全局撤销</c>
  
  
  307
  00:17:25.479 --> 00:17:28.248
  <c.magenta>我们想回到之前捕获这个快照</c>
  
  
  308
  00:17:28.315 --> 00:17:30.651
  <c.magenta>那一时刻的文件系统</c>
  
  
  309
  00:17:30.951 --> 00:17:35.088
  <c.magenta>你可以标记文件系统</c>
  <c.magenta>恢复到快照状态</c>
  
  
  310
  00:17:35.155 --> 00:17:36.657
  <c.magenta>下一次挂载的时候</c>
  
  
  311
  00:17:36.990 --> 00:17:42.496
  <c.magenta>文件系统会返回到</c>
  <c.magenta>捕获这个快照的那一时刻</c>
  
  
  312
  00:17:42.563 --> 00:17:45.732
  <c.magenta>之后允许你继续</c>
  <c.magenta>从那时开始进行更改</c>
  
  
  313
  00:17:45.799 --> 00:17:48.836
  <c.magenta>你能看到</c>
  <c.magenta>CoffeeOrigins.key回来了</c>
  
  
  314
  00:17:48.902 --> 00:17:51.972
  <c.magenta>而且在其他文件上</c>
  <c.magenta>做出的更改也被丢弃了</c>
  
  
  315
  00:17:52.039 --> 00:17:54.041
  <c.magenta>快照会继续存在</c>
  
  
  316
  00:17:54.107 --> 00:17:56.844
  <c.magenta>而且你可以无限次数进行恢复</c>
  
  
  317
  00:17:59.146 --> 00:18:01.982
  <c.magenta>好了 我们来谈谈</c>
  <c.magenta>目录大小快速调整</c>
  
  
  318
  00:18:02.249 --> 00:18:03.750
  <c.magenta>这项功能回答了一个问题</c>
  
  
  319
  00:18:03.817 --> 00:18:06.553
  <c.magenta>那就是目录层级</c>
  <c.magenta>会使用多少的空间</c>
  
  
  320
  00:18:06.620 --> 00:18:09.690
  <c.magenta>应用程序会经常</c>
  <c.magenta>需要计算这个大小</c>
  
  
  321
  00:18:09.756 --> 00:18:13.327
  <c.magenta>用于操作大小调整</c>
  <c.magenta>给用户提供进程</c>
  
  
  322
  00:18:13.393 --> 00:18:16.363
  <c.magenta>这样做的一个明显方式</c>
  <c.magenta>是打开目录层级</c>
  
  
  323
  00:18:16.430 --> 00:18:18.665
  <c.magenta>递归性地迭代所有的内容</c>
  
  
  324
  00:18:18.732 --> 00:18:22.269
  <c.magenta>然后查看所有项目的大小</c>
  <c.magenta>加在一起</c>
  
  
  325
  00:18:22.703 --> 00:18:26.473
  <c.magenta>当然 用户会非常乐意</c>
  <c.magenta>更快一点得知那个答案</c>
  
  
  326
  00:18:26.540 --> 00:18:27.741
  <c.magenta>在下一张幻灯片上</c>
  
  
  327
  00:18:27.808 --> 00:18:30.477
  <c.magenta>如果你把注意力</c>
  <c.magenta>集中在屏幕的左边</c>
  
  
  328
  00:18:30.544 --> 00:18:34.615
  <c.magenta>当Get Info面板显示出来</c>
  <c.magenta>你会看到上面写着 计算大小</c>
  
  
  329
  00:18:36.817 --> 00:18:39.586
  <c.magenta>几秒钟之后</c>
  <c.magenta>就会填充上大小</c>
  
  
  330
  00:18:39.653 --> 00:18:41.522
  <c.magenta>这是我们想提升的地方</c>
  
  
  331
  00:18:42.089 --> 00:18:44.358
  <c.magenta>文件系统可以跟踪它</c>
  
  
  332
  00:18:44.458 --> 00:18:47.227
  <c.magenta>很明显 你可以保存</c>
  <c.magenta>目录层级的大小</c>
  
  
  333
  00:18:47.294 --> 00:18:50.998
  <c.magenta>外加目录本身</c>
  <c.magenta>不过这有一个主要问题</c>
  
  
  334
  00:18:51.231 --> 00:18:55.302
  <c.magenta>如果安全地在链上更新</c>
  <c.magenta>父目录以及父目录的上级？</c>
  
  
  335
  00:18:55.769 --> 00:18:58.438
  <c.magenta>我们深入到了文件系统的内部</c>
  
  
  336
  00:18:58.505 --> 00:19:02.309
  <c.magenta>不过当你在修改时</c>
  <c.magenta>锁定了子目录</c>
  
  
  337
  00:19:02.376 --> 00:19:05.946
  <c.magenta>你无法再锁定父目录</c>
  <c.magenta>应为这会违反锁定顺序</c>
  
  
  338
  00:19:06.113 --> 00:19:09.149
  <c.magenta>文件系统总是会</c>
  <c.magenta>从父目录向子目录锁定</c>
  
  
  339
  00:19:09.216 --> 00:19:10.918
  <c.magenta>从来不是从子目录到父目录</c>
  
  
  340
  00:19:10.984 --> 00:19:14.021
  <c.magenta>如果你反着来做</c>
  <c.magenta>就会出现死锁</c>
  
  
  341
  00:19:14.855 --> 00:19:17.724
  <c.magenta>而APFS绕过了这个问题</c>
  
  
  342
  00:19:17.958 --> 00:19:20.327
  <c.magenta>如果问题是将</c>
  <c.magenta>大小和目录一起保存</c>
  
  
  343
  00:19:20.394 --> 00:19:22.396
  <c.magenta>那我们将大小保存到别的地方</c>
  
  
  344
  00:19:22.796 --> 00:19:24.698
  <c.magenta>所以通过分隔保存大小</c>
  
  
  345
  00:19:24.765 --> 00:19:27.568
  <c.magenta>我们可以使用</c>
  <c.magenta>原子级操作来将大小更新在</c>
  
  
  346
  00:19:27.634 --> 00:19:30.704
  <c.magenta>由文件系统</c>
  <c.magenta>所维护的单独记录中</c>
  
  
  347
  00:19:30.904 --> 00:19:33.473
  <c.magenta>而且不会违反任何锁定顺序</c>
  
  
  348
  00:19:34.041 --> 00:19:37.678
  <c.magenta>额外的大小记录</c>
  <c.magenta>会带来少量增量成本</c>
  
  
  349
  00:19:37.744 --> 00:19:40.848
  <c.magenta>不过这基本与IO一起</c>
  <c.magenta>可忽略不计</c>
  
  
  350
  00:19:43.016 --> 00:19:46.420
  <c.magenta>好了 接下来我们要谈谈</c>
  <c.magenta>原子级安全存储基元</c>
  
  
  351
  00:19:46.687 --> 00:19:48.822
  <c.magenta>第一个例子</c>
  <c.magenta>只是一个基本文件</c>
  
  
  352
  00:19:48.889 --> 00:19:52.659
  <c.magenta>这是当今安全存储</c>
  <c.magenta>怎样在普通文件上起作用的</c>
  
  
  353
  00:19:52.893 --> 00:19:55.128
  <c.magenta>这里我有</c>
  <c.magenta>MakeMoneyFast.key</c>
  
  
  354
  00:19:55.462 --> 00:19:57.231
  <c.magenta>我想出了一些</c>
  <c.magenta>聪明绝顶的新方案</c>
  
  
  355
  00:19:57.297 --> 00:19:58.699
  <c.magenta>能快速赚钱</c>
  
  
  356
  00:19:58.799 --> 00:20:00.901
  <c.magenta>当应用程序保存那个数据时</c>
  
  
  357
  00:20:00.968 --> 00:20:04.071
  <c.magenta>它会被写入边下的</c>
  <c.magenta>一个临时位置</c>
  
  
  358
  00:20:04.304 --> 00:20:07.107
  <c.magenta>当应用程序得知一切都写好</c>
  
  
  359
  00:20:07.174 --> 00:20:11.111
  <c.magenta>并安全存在磁盘上</c>
  <c.magenta>它会请求文件系统进行重命名</c>
  
  
  360
  00:20:11.278 --> 00:20:14.047
  <c.magenta>文件重命名</c>
  <c.magenta>一直都是原子级的</c>
  
  
  361
  00:20:14.214 --> 00:20:16.783
  <c.magenta>文件系统保证</c>
  <c.magenta>要么完全发生</c>
  
  
  362
  00:20:16.850 --> 00:20:19.353
  <c.magenta>而且是安全的</c>
  <c.magenta>要么根本不发生</c>
  
  
  363
  00:20:19.720 --> 00:20:22.089
  <c.magenta>此外 文件系统会负责删除</c>
  
  
  364
  00:20:22.155 --> 00:20:24.124
  <c.magenta>文档先前的版本</c>
  
  
  365
  00:20:24.291 --> 00:20:26.760
  <c.magenta>这对普通文件来说非常好</c>
  <c.magenta>但如果你有</c>
  
  
  366
  00:20:26.827 --> 00:20:28.395
  <c.magenta>文档捆绑包该怎么办？</c>
  
  
  367
  00:20:28.662 --> 00:20:32.566
  <c.magenta>我们这里有一个文档捆绑包</c>
  <c.magenta>ClutchConcertReview.rtfd</c>
  
  
  368
  00:20:32.633 --> 00:20:37.237
  <c.magenta>这是一个目录</c>
  <c.magenta>其中包含着文档的资源</c>
  
  
  369
  00:20:37.571 --> 00:20:40.307
  <c.magenta>今天会发生的是</c>
  <c.magenta>假如我去看Clutch表演</c>
  
  
  370
  00:20:40.374 --> 00:20:43.610
  <c.magenta>他们的表演十分出色</c>
  <c.magenta>然后我更新我的评论</c>
  
  
  371
  00:20:43.944 --> 00:20:48.815
  <c.magenta>这个改变写出来了</c>
  <c.magenta>但现在发生的是无法</c>
  
  
  372
  00:20:48.882 --> 00:20:51.985
  <c.magenta>将一个目录在另一个目录</c>
  <c.magenta>上面进行原子级重命名</c>
  
  
  373
  00:20:52.052 --> 00:20:54.922
  <c.magenta>因为POSIX语义不允许这样</c>
  
  
  374
  00:20:54.988 --> 00:20:57.257
  <c.magenta>如果有东西在目的地内部</c>
  
  
  375
  00:20:57.424 --> 00:20:59.359
  <c.magenta>我们开始玩一个脱壳游戏</c>
  
  
  376
  00:20:59.960 --> 00:21:02.829
  <c.magenta>首先 将文档移动开</c>
  <c.magenta>活动的文档</c>
  
  
  377
  00:21:02.896 --> 00:21:06.500
  <c.magenta>这时如果出现什么差错</c>
  <c.magenta>然后应用程序崩溃</c>
  
  
  378
  00:21:06.567 --> 00:21:09.536
  <c.magenta>或者系统断电</c>
  <c.magenta>用户数据就消失了</c>
  
  
  379
  00:21:10.070 --> 00:21:13.040
  <c.magenta>之后 应用程序将数据移动到位</c>
  
  
  380
  00:21:13.106 --> 00:21:17.144
  <c.magenta>最后 它要负责删除</c>
  <c.magenta>目录的先前版本</c>
  
  
  381
  00:21:17.477 --> 00:21:18.645
  <c.magenta>文档捆绑包</c>
  
  
  382
  00:21:18.712 --> 00:21:20.781
  <c.magenta>所以这不是原子级</c>
  <c.magenta>而且不安全</c>
  
  
  383
  00:21:20.848 --> 00:21:22.749
  <c.magenta>这个问题困扰我们</c>
  
  
  384
  00:21:22.816 --> 00:21:25.319
  <c.magenta>很长时间</c>
  <c.magenta>而且我们想改进它</c>
  
  
  385
  00:21:25.519 --> 00:21:29.423
  <c.magenta>在APFS上我们推出了</c>
  <c.magenta>新的系统 叫做renamex_np</c>
  
  
  386
  00:21:29.489 --> 00:21:33.961
  <c.magenta>用于非POSIX 这允许</c>
  <c.magenta>目录的原子级安全存储</c>
  
  
  387
  00:21:34.027 --> 00:21:38.298
  <c.magenta>现在当应用程序将数据</c>
  <c.magenta>写入其临时位置时</c>
  
  
  388
  00:21:38.498 --> 00:21:43.971
  <c.magenta>并请求执行重命名操作</c>
  <c.magenta>APFS会原子级地负责交换</c>
  
  
  389
  00:21:44.338 --> 00:21:46.707
  <c.magenta>并删除文档的先前版本</c>
  
  
  390
  00:21:46.773 --> 00:21:48.876
  <c.magenta>所以现在是原子级的并且安全</c>
  
  
  391
  00:21:49.142 --> 00:21:51.378
  <c.magenta>当然 作为开发者</c>
  <c.magenta>你可能不会借助于</c>
  
  
  392
  00:21:51.445 --> 00:21:53.981
  <c.magenta>这种低级的系统调用</c>
  
  
  393
  00:21:54.081 --> 00:21:56.683
  <c.magenta>因为已经为大家</c>
  <c.magenta>在Foundation中采用好了</c>
  
  
  394
  00:21:56.750 --> 00:22:01.355
  <c.magenta>所以你会在APFS上</c>
  <c.magenta>享受到这个改进行为的益处</c>
  
  
  395
  00:22:08.295 --> 00:22:10.297
  <c.magenta>接下来 我将谈谈加密</c>
  
  
  396
  00:22:11.131 --> 00:22:13.400
  <c.magenta>就如Eric所说</c>
  <c.magenta>有了HFS+</c>
  
  
  397
  00:22:13.634 --> 00:22:19.840
  <c.magenta>在Mac上 我们使用叫做Core</c>
  <c.magenta>Storage的层 位于HFS下层</c>
  
  
  398
  00:22:20.007 --> 00:22:22.442
  <c.magenta>提供全盘加密</c>
  <c.magenta>以及其他内容</c>
  
  
  399
  00:22:22.509 --> 00:22:25.546
  <c.magenta>这是一个相当复杂的层</c>
  <c.magenta>而且功能很多</c>
  
  
  400
  00:22:25.946 --> 00:22:28.015
  <c.magenta>在iOS上</c>
  <c.magenta>我们有不同的变体</c>
  
  
  401
  00:22:28.081 --> 00:22:31.685
  <c.magenta>保存加密密钥</c>
  <c.magenta>和有效扩展属性</c>
  
  
  402
  00:22:31.752 --> 00:22:33.620
  <c.magenta>这些加密密钥会与</c>
  
  
  403
  00:22:33.687 --> 00:22:37.424
  <c.magenta>iOS设备上的</c>
  <c.magenta>加速AES硬件一同协作</c>
  
  
  404
  00:22:37.491 --> 00:22:39.226
  <c.magenta>来提供每文件加密</c>
  
  
  405
  00:22:39.426 --> 00:22:43.197
  <c.magenta>这是个有点复杂故事</c>
  <c.magenta>有两个非常不同的代码库</c>
  
  
  406
  00:22:43.263 --> 00:22:47.568
  <c.magenta>在APFS上 我们想尝试</c>
  <c.magenta>提供更完成的故事</c>
  
  
  407
  00:22:47.634 --> 00:22:49.203
  <c.magenta>在我们所有的产品上</c>
  
  
  408
  00:22:49.903 --> 00:22:53.540
  <c.magenta>APFS支持多种级别的</c>
  <c.magenta>文件系统加密</c>
  
  
  409
  00:22:53.974 --> 00:22:55.209
  <c.magenta>不过首先</c>
  <c.magenta>最简单的级别</c>
  
  
  410
  00:22:55.275 --> 00:22:57.578
  <c.magenta>我们一开始就做好了</c>
  <c.magenta>那就是没有加密</c>
  
  
  411
  00:22:57.711 --> 00:22:59.446
  <c.magenta>所有的数据</c>
  <c.magenta>都是以纯文本写成</c>
  
  
  412
  00:22:59.513 --> 00:23:02.616
  <c.magenta>所有数据和元数据都是</c>
  <c.magenta>以纯文本写入磁盘中的</c>
  
  
  413
  00:23:03.016 --> 00:23:05.853
  <c.magenta>下一级别是</c>
  <c.magenta>每个卷配有一个密钥</c>
  
  
  414
  00:23:06.420 --> 00:23:11.058
  <c.magenta>所有敏感的元数据和数据</c>
  <c.magenta>都是使用相同的密钥加密</c>
  
  
  415
  00:23:11.124 --> 00:23:14.194
  <c.magenta>这基本上相当于全盘加密</c>
  
  
  416
  00:23:14.494 --> 00:23:18.031
  <c.magenta>我们支持的最复杂级别</c>
  <c.magenta>是多密钥加密</c>
  
  
  417
  00:23:18.398 --> 00:23:21.535
  <c.magenta>这里 所有敏感的元数据是由</c>
  
  
  418
  00:23:22.135 --> 00:23:26.240
  <c.magenta>单个密钥加密</c>
  <c.magenta>密钥不同于用于加密</c>
  
  
  419
  00:23:26.306 --> 00:23:30.277
  <c.magenta>单个文件的每文件密钥</c>
  
  
  420
  00:23:30.577 --> 00:23:33.547
  <c.magenta>此外 由于快照和</c>
  <c.magenta>克隆的工作原理</c>
  
  
  421
  00:23:33.714 --> 00:23:36.350
  <c.magenta>APFS支持每盘区加密</c>
  
  
  422
  00:23:36.416 --> 00:23:40.053
  <c.magenta>所以文件的每个区域</c>
  <c.magenta>都可以使用自己的密钥加密</c>
  
  
  423
  00:23:40.487 --> 00:23:44.625
  <c.magenta>这是独一无二的 而且没有</c>
  <c.magenta>其他文件系统支持此类功能</c>
  
  
  424
  00:23:44.892 --> 00:23:47.661
  <c.magenta>此外 这允许我们</c>
  <c.magenta>统一我们的加密故事</c>
  
  
  425
  00:23:47.728 --> 00:23:49.596
  <c.magenta>在我们所有的平台之间</c>
  
  
  426
  00:23:49.897 --> 00:23:52.432
  <c.magenta>好了 之后我将交给Eric</c>
  
  
  427
  00:23:59.806 --> 00:24:01.708
  <c.magenta>好了 现在我将快速展示</c>
  
  
  428
  00:24:01.775 --> 00:24:06.914
  <c.magenta>WWDC 版macOS Sierra上的</c>
  <c.magenta>Apple File System</c>
  
  
  429
  00:24:09.950 --> 00:24:14.221
  <c.magenta>可能最简单最快速的试验</c>
  <c.magenta>Apple File System的方法就是</c>
  
  
  430
  00:24:14.288 --> 00:24:16.790
  <c.magenta>使用磁盘镜像</c>
  <c.magenta>我们首先那样做</c>
  
  
  431
  00:24:17.824 --> 00:24:22.563
  <c.magenta>你能看到在命令行上</c>
  <c.magenta>输入了hdiutil create-fs APFS</c>
  
  
  432
  00:24:22.629 --> 00:24:25.666
  <c.magenta>这会指定 给我创建</c>
  <c.magenta>APFS类型的磁盘镜像</c>
  
  
  433
  00:24:26.033 --> 00:24:28.569
  <c.magenta>我们指定大小</c>
  <c.magenta>然后进行稀疏束</c>
  
  
  434
  00:24:28.802 --> 00:24:32.172
  <c.magenta>这会出现警告</c>
  <c.magenta>因为这是尚在开发中的项目</c>
  
  
  435
  00:24:32.239 --> 00:24:34.541
  <c.magenta>我们希望你清楚</c>
  
  
  436
  00:24:34.608 --> 00:24:39.279
  <c.magenta>你使用的东西目前</c>
  <c.magenta>并非是100％完成的</c>
  
  
  437
  00:24:39.813 --> 00:24:42.816
  <c.magenta>这时它会提醒我</c>
  <c.magenta>我说是</c>
  
  
  438
  00:24:44.518 --> 00:24:47.654
  <c.magenta>你这就创建出磁盘镜像了</c>
  <c.magenta>如果我附加</c>
  
  
  439
  00:24:52.259 --> 00:24:55.395
  <c.magenta>你可以在桌面上检查它</c>
  <c.magenta>进行Get Info</c>
  
  
  440
  00:24:56.196 --> 00:24:59.366
  <c.magenta>你能看到文件系统的类型</c>
  <c.magenta>确实是APFS</c>
  
  
  441
  00:24:59.433 --> 00:25:01.502
  <c.magenta>这可能是最简单的方式</c>
  <c.magenta>如果你只想</c>
  
  
  442
  00:25:01.568 --> 00:25:04.137
  <c.magenta>得出某个东西来尝试</c>
  
  
  443
  00:25:06.273 --> 00:25:08.775
  <c.magenta>接下来 我想展示一些其他</c>
  
  
  444
  00:25:09.176 --> 00:25:12.379
  <c.magenta>我们加入的更高级功能</c>
  
  
  445
  00:25:13.313 --> 00:25:14.314
  <c.magenta>关上它</c>
  
  
  446
  00:25:15.082 --> 00:25:20.521
  <c.magenta>这里我有两个优盘</c>
  <c.magenta>它们只是普通的优盘</c>
  
  
  447
  00:25:20.587 --> 00:25:23.257
  <c.magenta>你可以从任何</c>
  <c.magenta>标准办公用品商店买到</c>
  
  
  448
  00:25:23.624 --> 00:25:24.625
  <c.magenta>我插入一个</c>
  
  
  449
  00:25:24.691 --> 00:25:29.196
  <c.magenta>其中一个是HFS+格式</c>
  <c.magenta>另一个是Apple File System格式</c>
  
  
  450
  00:25:39.006 --> 00:25:41.708
  <c.magenta>在这两个上面</c>
  <c.magenta>都进行Get Info</c>
  
  
  451
  00:25:41.775 --> 00:25:44.945
  <c.magenta>这样在操作过程中</c>
  <c.magenta>你能看到空闲空间</c>
  
  
  452
  00:25:45.913 --> 00:25:51.718
  <c.magenta>这个时候我有</c>
  <c.magenta>意大利旅行的一些演示照片</c>
  
  
  453
  00:25:51.818 --> 00:25:57.024
  <c.magenta>这两个的目录层级中</c>
  <c.magenta>都有不少存储空间</c>
  
  
  454
  00:25:57.324 --> 00:26:00.527
  <c.magenta>首先我们开始</c>
  <c.magenta>复制HFS卷中的</c>
  
  
  455
  00:26:00.594 --> 00:26:04.731
  <c.magenta>最新版iTunes</c>
  <c.magenta>然后在APFS中也是同样</c>
  
  
  456
  00:26:04.798 --> 00:26:08.235
  <c.magenta>开始复制 进行中</c>
  
  
  457
  00:26:08.635 --> 00:26:11.839
  <c.magenta>你能看到这里的进程条</c>
  <c.magenta>不过APFS已经完成了</c>
  
  
  458
  00:26:11.905 --> 00:26:13.574
  <c.magenta>因为它在后台使用克隆</c>
  
  
  459
  00:26:13.640 --> 00:26:17.010
  <c.magenta>Finder已经采用了</c>
  <c.magenta>所有新的克隆行为</c>
  
  
  460
  00:26:17.077 --> 00:26:19.646
  <c.magenta>所以如果你进行复制</c>
  <c.magenta>Finder会自动替你</c>
  
  
  461
  00:26:19.713 --> 00:26:21.181
  <c.magenta>在后台进行克隆</c>
  
  
  462
  00:26:21.515 --> 00:26:22.983
  <c.magenta>然而HFS还没有完成</c>
  
  
  463
  00:26:27.621 --> 00:26:30.991
  <c.magenta>好了 我可以用</c>
  <c.magenta>演示照片做同样的事</c>
  
  
  464
  00:26:31.058 --> 00:26:33.727
  <c.magenta>你在这里能看到</c>
  <c.magenta>这里有几张照片</c>
  
  
  465
  00:26:33.794 --> 00:26:36.363
  <c.magenta>它们全是几MB的大小</c>
  
  
  466
  00:26:37.764 --> 00:26:43.003
  <c.magenta>注意这里的空闲空间</c>
  <c.magenta>3.35GB空闲</c>
  
  
  467
  00:26:43.070 --> 00:26:47.040
  <c.magenta>如果我进行复制</c>
  <c.magenta>这实际上会替我克隆</c>
  
  
  468
  00:26:47.107 --> 00:26:50.677
  <c.magenta>你会看到空闲空间</c>
  <c.magenta>根本没有减小</c>
  
  
  469
  00:26:53.280 --> 00:26:56.984
  <c.magenta>接下来</c>
  <c.magenta>我将展示捕获快照</c>
  
  
  470
  00:26:59.086 --> 00:27:01.054
  <c.magenta>这用叫做</c>
  <c.magenta>SnapshotUtil的工具</c>
  
  
  471
  00:27:01.121 --> 00:27:05.692
  <c.magenta>这会在公测版发布之后</c>
  <c.magenta>供大家使用</c>
  
  
  472
  00:27:06.560 --> 00:27:08.362
  <c.magenta>抱歉 这个要作为根运行</c>
  
  
  473
  00:27:11.932 --> 00:27:17.804
  <c.magenta>好了 现在我创建了一个快照</c>
  <c.magenta>我能用SnapshotUtil-s检查它</c>
  
  
  474
  00:27:23.544 --> 00:27:26.747
  <c.magenta>你能看到</c>
  <c.magenta>它现在识别出APFS_Snap</c>
  
  
  475
  00:27:27.047 --> 00:27:32.519
  <c.magenta>我在这次演讲之前</c>
  <c.magenta>创建了一个挂载点</c>
  
  
  476
  00:27:32.920 --> 00:27:36.857
  <c.magenta>我会挂载这个时候的快照</c>
  
  
  477
  00:27:37.624 --> 00:27:40.460
  <c.magenta>你能看到这个快照</c>
  <c.magenta>出现在桌面上了</c>
  
  
  478
  00:27:40.527 --> 00:27:43.463
  <c.magenta>这包含系统文件的只读视图</c>
  
  
  479
  00:27:43.530 --> 00:27:47.434
  <c.magenta>与捕获快照时候的样子相同</c>
  
  
  480
  00:27:53.907 --> 00:27:57.511
  <c.magenta>现在 在APFS卷中</c>
  <c.magenta>我将创建一个临时文件</c>
  
  
  481
  00:27:59.346 --> 00:28:02.115
  <c.magenta>大家好 我是临时文件</c>
  
  
  482
  00:28:03.016 --> 00:28:05.953
  <c.magenta>保存 关闭</c>
  <c.magenta>你能看到它在这里显示</c>
  
  
  483
  00:28:06.019 --> 00:28:09.456
  <c.magenta>在APFS卷中</c>
  <c.magenta>这是挂载的读写</c>
  
  
  484
  00:28:09.990 --> 00:28:11.892
  <c.magenta>但在快照中不存在</c>
  
  
  485
  00:28:14.795 --> 00:28:19.600
  <c.magenta>相应地 我还能删除</c>
  <c.magenta>一些演示照片</c>
  
  
  486
  00:28:19.666 --> 00:28:22.669
  <c.magenta>将它们移到垃圾箱 然后删除</c>
  
  
  487
  00:28:24.104 --> 00:28:26.473
  <c.magenta>空闲空间实际上还是没有减小</c>
  
  
  488
  00:28:26.540 --> 00:28:31.044
  <c.magenta>因为现在它们被</c>
  <c.magenta>快照的存在所固定</c>
  
  
  489
  00:28:31.111 --> 00:28:36.116
  <c.magenta>如果我想删除它们</c>
  <c.magenta>我还要删除快照</c>
  
  
  490
  00:28:38.452 --> 00:28:43.257
  <c.magenta>好了 这简短展示了Apple</c>
  <c.magenta>File System的实际效果</c>
  
  
  491
  00:28:50.964 --> 00:28:53.100
  <c.magenta>好了 我们来谈谈</c>
  <c.magenta>一些新的API</c>
  
  
  492
  00:28:53.166 --> 00:28:55.502
  <c.magenta>我们为支持Apple</c>
  <c.magenta>File System而添加</c>
  
  
  493
  00:28:56.436 --> 00:28:59.873
  <c.magenta>首先 我们预计可能</c>
  <c.magenta>大家会熟悉这一个</c>
  
  
  494
  00:28:59.940 --> 00:29:02.676
  <c.magenta>如果你使用Foundation</c>
  <c.magenta>或FileManager</c>
  
  
  495
  00:29:02.743 --> 00:29:08.015
  <c.magenta>这两者都得到Swift增强</c>
  <c.magenta>如果你用copyItem或replaceItem</c>
  
  
  496
  00:29:08.148 --> 00:29:11.051
  <c.magenta>它们会采用克隆或</c>
  <c.magenta>安全存储语义</c>
  
  
  497
  00:29:11.118 --> 00:29:13.287
  <c.magenta>我们刚才自动给你描述了</c>
  
  
  498
  00:29:13.353 --> 00:29:15.689
  <c.magenta>你不需要做任何事</c>
  <c.magenta>不费任何功夫</c>
  
  
  499
  00:29:15.756 --> 00:29:19.393
  <c.magenta>它会自动弄清你使用的</c>
  <c.magenta>文件系统是HFS+</c>
  
  
  500
  00:29:19.459 --> 00:29:23.230
  <c.magenta>还是Apple File System</c>
  <c.magenta>而且只有在合适时使用行为</c>
  
  
  501
  00:29:24.464 --> 00:29:27.901
  <c.magenta>但是 如果你断定</c>
  <c.magenta>Foundation或FileManager</c>
  
  
  502
  00:29:27.968 --> 00:29:29.403
  <c.magenta>无法提供你所要的确切内容</c>
  
  
  503
  00:29:29.469 --> 00:29:33.340
  <c.magenta>你可以到下面 我们有一个</c>
  <c.magenta>叫做libcopyfile的库</c>
  
  
  504
  00:29:33.407 --> 00:29:36.376
  <c.magenta>这个支持深层级的复制</c>
  
  
  505
  00:29:36.443 --> 00:29:38.111
  <c.magenta>我们在有克隆功能之前</c>
  
  
  506
  00:29:38.178 --> 00:29:39.646
  <c.magenta>已经用它很多年了</c>
  
  
  507
  00:29:40.047 --> 00:29:43.283
  <c.magenta>复制文件支持新的位</c>
  <c.magenta>叫做COPYFILE CLONE</c>
  
  
  508
  00:29:43.350 --> 00:29:46.987
  <c.magenta>这与其下方的</c>
  <c.magenta>5或6个位相同</c>
  
  
  509
  00:29:47.254 --> 00:29:48.655
  <c.magenta>我们决定将其选择性加入</c>
  
  
  510
  00:29:48.722 --> 00:29:51.458
  <c.magenta>因为如果你使用</c>
  <c.magenta>像这样的专门库</c>
  
  
  511
  00:29:51.825 --> 00:29:54.695
  <c.magenta>你未必想要ACL和扩展属性</c>
  
  
  512
  00:29:54.761 --> 00:29:57.931
  <c.magenta>以及剩下的内容</c>
  <c.magenta>完完全全地复制过来</c>
  
  
  513
  00:29:58.699 --> 00:30:01.568
  <c.magenta>而克隆会隐式地</c>
  <c.magenta>复制所有那些东西</c>
  
  
  514
  00:30:01.635 --> 00:30:05.572
  <c.magenta>这个库也会自动</c>
  <c.magenta>为你调用克隆</c>
  
  
  515
  00:30:05.639 --> 00:30:07.508
  <c.magenta>如果后端文件系统支持</c>
  
  
  516
  00:30:07.574 --> 00:30:09.943
  <c.magenta>如果不支持 那它就会</c>
  <c.magenta>继续像往常一样运行</c>
  
  
  517
  00:30:11.411 --> 00:30:13.347
  <c.magenta>这些就是新的安全存储API</c>
  
  
  518
  00:30:13.413 --> 00:30:17.584
  <c.magenta>renamex Np和renameatx Np</c>
  <c.magenta>是新的系统调用</c>
  
  
  519
  00:30:17.651 --> 00:30:20.254
  <c.magenta>支持安全存储基元</c>
  
  
  520
  00:30:20.787 --> 00:30:24.224
  <c.magenta>你可以在Man Pages上使用</c>
  <c.magenta>在macOS Sierra版本中</c>
  
  
  521
  00:30:24.291 --> 00:30:26.994
  <c.magenta>如果你想去看一下Man Page</c>
  <c.magenta>它们就在这里</c>
  
  
  522
  00:30:27.561 --> 00:30:29.663
  <c.magenta>这些也是克隆API</c>
  
  
  523
  00:30:29.730 --> 00:30:34.234
  <c.magenta>所以克隆文件及其变体</c>
  <c.magenta>支持克隆文件和目录</c>
  
  
  524
  00:30:35.836 --> 00:30:38.972
  <c.magenta>说一下兼容性</c>
  <c.magenta>我们认为最简单的方式</c>
  
  
  525
  00:30:39.039 --> 00:30:44.278
  <c.magenta>访问Apple File System镜像</c>
  <c.magenta>就是使用我给你展示的hdiutil</c>
  
  
  526
  00:30:44.411 --> 00:30:45.913
  <c.magenta>目前只在macOS Sierra上的</c>
  
  
  527
  00:30:45.979 --> 00:30:49.316
  <c.magenta>命令行中可用</c>
  <c.magenta>作为开发者预览版技术</c>
  
  
  528
  00:30:49.383 --> 00:30:53.353
  <c.magenta>还并未特意地完全</c>
  <c.magenta>为Disk Utility做优化</c>
  
  
  529
  00:30:54.054 --> 00:30:58.358
  <c.magenta>所以最快的方法是使用</c>
  <c.magenta>hdiutil create-fs APFS</c>
  
  
  530
  00:30:58.425 --> 00:31:00.627
  <c.magenta>你可以得到磁盘镜像</c>
  <c.magenta>然后附加它</c>
  
  
  531
  00:31:01.461 --> 00:31:05.699
  <c.magenta>你还可用diskutil APFS</c>
  <c.magenta>增加容器</c>
  
  
  532
  00:31:05.766 --> 00:31:08.268
  <c.magenta>创建容器</c>
  <c.magenta>添加卷 删除卷</c>
  
  
  533
  00:31:09.002 --> 00:31:13.006
  <c.magenta>任何你想对容器</c>
  <c.magenta>本身进行的低级操作</c>
  
  
  534
  00:31:13.640 --> 00:31:17.211
  <c.magenta>最后 我们还有FS检查</c>
  <c.magenta>这是我们在研发的功能</c>
  
  
  535
  00:31:17.277 --> 00:31:20.280
  <c.magenta>这个能够验证文件系统</c>
  
  
  536
  00:31:20.347 --> 00:31:21.815
  <c.magenta>也可以进行修复</c>
  
  
  537
  00:31:21.982 --> 00:31:24.251
  <c.magenta>所以还会继续开发该功能</c>
  
  
  538
  00:31:25.853 --> 00:31:30.224
  <c.magenta>macOS Sierra中</c>
  <c.magenta>APFS上目前的一些限制</c>
  
  
  539
  00:31:31.124 --> 00:31:32.860
  <c.magenta>这只会在数据卷上支持</c>
  
  
  540
  00:31:32.926 --> 00:31:35.829
  <c.magenta>现在不支持从Apple</c>
  <c.magenta>File System启动</c>
  
  
  541
  00:31:36.997 --> 00:31:41.201
  <c.magenta>现在Apple File</c>
  <c.magenta>System不支持“时间机器”备份</c>
  
  
  542
  00:31:42.569 --> 00:31:45.572
  <c.magenta>FileVault和Fusion Drive</c>
  <c.magenta>支持还尚需等待</c>
  
  
  543
  00:31:47.074 --> 00:31:50.177
  <c.magenta>当前的卷格式</c>
  <c.magenta>只能是区分大小写的</c>
  
  
  544
  00:31:50.244 --> 00:31:53.547
  <c.magenta>如果你不确定你的程序</c>
  <c.magenta>是否需要不区分大小写</c>
  
  
  545
  00:31:53.814 --> 00:31:57.050
  <c.magenta>请试一下</c>
  <c.magenta>创建磁盘镜像或设置在</c>
  
  
  546
  00:31:57.117 --> 00:32:01.522
  <c.magenta>Mac上的分区里</c>
  <c.magenta>试着证实它并将你的应用</c>
  
  
  547
  00:32:01.588 --> 00:32:05.359
  <c.magenta>在Apple File System中运行</c>
  <c.magenta>然后告诉我们它的效果</c>
  
  
  548
  00:32:07.461 --> 00:32:09.229
  <c.magenta>其他对兼容性的备注</c>
  
  
  549
  00:32:09.596 --> 00:32:12.999
  <c.magenta>Apple File System</c>
  <c.magenta>无法通过AFP分享</c>
  
  
  550
  00:32:13.066 --> 00:32:17.871
  <c.magenta>如果你想使用文件分享</c>
  <c.magenta>我们建议你使用SMB代替</c>
  
  
  551
  00:32:18.705 --> 00:32:21.808
  <c.magenta>作为未来首选的文件分享机制</c>
  
  
  552
  00:32:22.342 --> 00:32:24.478
  <c.magenta>OS X Yosemite</c>
  <c.magenta>或更早版本</c>
  
  
  553
  00:32:24.545 --> 00:32:26.680
  <c.magenta>将无法识别Apple</c>
  <c.magenta>File System卷</c>
  
  
  554
  00:32:26.747 --> 00:32:29.082
  <c.magenta>所以请不要把Apple</c>
  <c.magenta>File System实例</c>
  
  
  555
  00:32:29.149 --> 00:32:31.952
  <c.magenta>带回到OS X Yosemite</c>
  <c.magenta>或更早版本</c>
  
  
  556
  00:32:32.019 --> 00:32:36.690
  <c.magenta>你必定会碰到</c>
  <c.magenta>你不想回应的对话</c>
  
  
  557
  00:32:37.824 --> 00:32:43.397
  <c.magenta>所以macOS Sierra</c>
  <c.magenta>会有开发者预览版的</c>
  
  
  558
  00:32:43.463 --> 00:32:45.165
  <c.magenta>Apple File System</c>
  
  
  559
  00:32:45.566 --> 00:32:47.935
  <c.magenta>这会是开发者预览版技术</c>
  
  
  560
  00:32:48.001 --> 00:32:52.472
  <c.magenta>一旦macOS Sierra</c>
  <c.magenta>于今秋发布</c>
  
  
  561
  00:32:53.307 --> 00:32:55.909
  <c.magenta>现在你可能会好奇</c>
  <c.magenta>我们有什么样的推出计划</c>
  
  
  562
  00:32:55.976 --> 00:32:59.980
  <c.magenta>各位如何在你们设备上获取Apple</c>
  <c.magenta>File System？</c>
  
  
  563
  00:33:01.315 --> 00:33:02.416
  <c.magenta>我们会讨论这个的</c>
  
  
  564
  00:33:03.517 --> 00:33:04.952
  <c.magenta>升级到Apple File System</c>
  
  
  565
  00:33:05.018 --> 00:33:07.354
  <c.magenta>你想要这些我们展示过的</c>
  <c.magenta>出色的新功能</c>
  
  
  566
  00:33:07.421 --> 00:33:08.388
  <c.magenta>那你怎样获得它们？</c>
  
  
  567
  00:33:08.822 --> 00:33:11.758
  <c.magenta>一个可能方法是</c>
  <c.magenta>要求所有人</c>
  
  
  568
  00:33:11.825 --> 00:33:14.628
  <c.magenta>所有用户备份系统</c>
  <c.magenta>保存起来</c>
  
  
  569
  00:33:14.695 --> 00:33:16.563
  <c.magenta>确保所有东西都绝对安全</c>
  
  
  570
  00:33:16.630 --> 00:33:18.799
  <c.magenta>然后擦除卷</c>
  <c.magenta>擦除设备</c>
  
  
  571
  00:33:18.866 --> 00:33:21.969
  <c.magenta>还原 放入新的OS</c>
  <c.magenta>然后从备份中还原</c>
  
  
  572
  00:33:22.035 --> 00:33:23.904
  <c.magenta>这个过程会花数小时</c>
  
  
  573
  00:33:23.971 --> 00:33:25.806
  <c.magenta>然后期盼所有东西</c>
  <c.magenta>在还原后</c>
  
  
  574
  00:33:25.873 --> 00:33:27.140
  <c.magenta>都完好如初</c>
  
  
  575
  00:33:27.541 --> 00:33:28.709
  <c.magenta>我们不会这样做</c>
  
  
  576
  00:33:29.276 --> 00:33:32.579
  <c.magenta>相反 Apple会提供</c>
  <c.magenta>就地升级路径</c>
  
  
  577
  00:33:32.646 --> 00:33:35.649
  <c.magenta>从HFS+</c>
  <c.magenta>到Apple File System</c>
  
  
  578
  00:33:41.355 --> 00:33:44.958
  <c.magenta>在此期间 用户数据</c>
  <c.magenta>仍保持在其原来位置</c>
  
  
  579
  00:33:45.259 --> 00:33:49.062
  <c.magenta>Apple会将崭新的APFS元数据</c>
  
  
  580
  00:33:49.129 --> 00:33:54.668
  <c.magenta>写入HPF+空闲空间</c>
  <c.magenta>我们这么做是为了死机防护</c>
  
  
  581
  00:33:55.269 --> 00:33:59.239
  <c.magenta>这个操作可能会耗时</c>
  <c.magenta>几秒或者几分钟</c>
  
  
  582
  00:33:59.806 --> 00:34:02.809
  <c.magenta>在这段期间</c>
  <c.magenta>如果设备断电 死机</c>
  
  
  583
  00:34:02.876 --> 00:34:05.479
  <c.magenta>任何发生的糟糕事情</c>
  <c.magenta>我们想要设备上的数据</c>
  
  
  584
  00:34:05.546 --> 00:34:08.114
  <c.magenta>安然无恙</c>
  <c.magenta>仿佛什么都未发生过一样</c>
  
  
  585
  00:34:08.482 --> 00:34:13.120
  <c.magenta>所以Apple File System Converter</c>
  <c.magenta>会尽可能以原子级别执行操作</c>
  
  
  586
  00:34:13.187 --> 00:34:14.855
  <c.magenta>这不是完全瞬时完成的</c>
  
  
  587
  00:34:14.922 --> 00:34:16.822
  <c.magenta>但随着操作持续进行</c>
  
  
  588
  00:34:16.889 --> 00:34:17.958
  <c.magenta>如果设备死机</c>
  
  
  589
  00:34:18.225 --> 00:34:23.429
  <c.magenta>我们的打算是</c>
  <c.magenta>使其完好如初 归于原样</c>
  
  
  590
  00:34:24.231 --> 00:34:29.735
  <c.magenta>Apple File System 将于2017年</c>
  <c.magenta>在所有设备上以默认程序发布</c>
  
  
  591
  00:34:37.311 --> 00:34:38.411
  <c.magenta>总而言之</c>
  
  
  592
  00:34:40.047 --> 00:34:42.081
  <c.magenta>Apple File System</c>
  <c.magenta>会是默认的文件系统</c>
  
  
  593
  00:34:42.149 --> 00:34:44.384
  <c.magenta>用于2017年的</c>
  <c.magenta>所有Apple产品</c>
  
  
  594
  00:34:45.118 --> 00:34:49.188
  <c.magenta>它超现代 有死机防护</c>
  <c.magenta>支持空间分享</c>
  
  
  595
  00:34:50.224 --> 00:34:53.793
  <c.magenta>我们支持克隆和快照</c>
  <c.magenta>增强的数据安全功能</c>
  
  
  596
  00:34:53.860 --> 00:34:57.197
  <c.magenta>像我们刚刚讨论的</c>
  <c.magenta>多密钥加密</c>
  
  
  597
  00:34:59.132 --> 00:35:01.201
  <c.magenta>它也专门优化和设计</c>
  
  
  598
  00:35:01.268 --> 00:35:03.804
  <c.magenta>用于我们所有设备里的</c>
  <c.magenta>Apple生态系统</c>
  
  
  599
  00:35:05.439 --> 00:35:07.975
  <c.magenta>你可以得到更多关于</c>
  <c.magenta>Apple File System的信息</c>
  
  
  600
  00:35:08.041 --> 00:35:09.776
  <c.magenta>在我身后的URL中</c>
  
  
  601
  00:35:10.344 --> 00:35:13.514
  <c.magenta>那里会有开发者指南</c>
  <c.magenta>以及一些示例代码</c>
  
  
  602
  00:35:13.580 --> 00:35:17.784
  <c.magenta>这样你可以看到</c>
  <c.magenta>克隆文件和目录的实际演示</c>
  
  
  603
  00:35:19.653 --> 00:35:22.189
  <c.magenta>给在座各位说一些要点</c>
  
  
  604
  00:35:22.256 --> 00:35:26.093
  <c.magenta>Apple File System</c>
  <c.magenta>即将到来 2017年将在转眼间来临</c>
  
  
  605
  00:35:26.994 --> 00:35:29.763
  <c.magenta>我想请大家将你们的应用</c>
  <c.magenta>在Apple File System上测试</c>
  
  
  606
  00:35:29.830 --> 00:35:32.599
  <c.magenta>用你们昨天获得的macOS版本</c>
  
  
  607
  00:35:32.999 --> 00:35:35.068
  <c.magenta>试着在Apple File System上</c>
  <c.magenta>运行你们的应用</c>
  
  
  608
  00:35:35.135 --> 00:35:38.305
  <c.magenta>请告诉我们这一过程的进展如何</c>
  
  
  609
  00:35:38.972 --> 00:35:41.875
  <c.magenta>如果你要报告任何错误</c>
  <c.magenta>请使用Bug Reporter报告</c>
  
  
  610
  00:35:41.942 --> 00:35:44.178
  <c.magenta>通过传统的手段</c>
  <c.magenta>这样我们可以调查</c>
  
  
  611
  00:35:44.244 --> 00:35:47.281
  <c.magenta>我们都希望大家会</c>
  <c.magenta>像我们一样喜欢它</c>
  
  
  612
  00:35:49.283 --> 00:35:52.019
  <c.magenta>还有一些相关演讲</c>
  
  
  613
  00:35:52.085 --> 00:35:54.888
  <c.magenta>如果你有兴趣学习</c>
  <c.magenta>更多关于安全功能的内容</c>
  
  
  614
  00:35:54.955 --> 00:35:57.024
  <c.magenta>在我们的平台上</c>
  <c.magenta>特别是iOS</c>
  
  
  615
  00:35:57.758 --> 00:36:01.428
  <c.magenta>我们建议你可以看看</c>
  <c.magenta>iOS Security实际工作原理</c>
  
  
  616
  00:36:01.495 --> 00:36:04.331
  <c.magenta>将于今天4点钟</c>
  <c.magenta>在本会议厅开始</c>
  
  
  617
  00:36:04.731 --> 00:36:06.700
  <c.magenta>至此 这就是</c>
  <c.magenta>Apple File System</c>
  
  
  618
  00:36:06.767 --> 00:36:08.635
  <c.magenta>我们迫不及待想知道</c>
  <c.magenta>各位会如何使用它</c>
  
  