MacOS 10.15.5中的错误会影响可引导备份

2020-05-28 04:55:13

上周早些时候,我们在MacOS10.15.5的测试版中发现了一个APFS文件系统缺陷。该错误的技术细节如下所示,但简而言之,我们不能再使用自己的文件复制机来建立MacOS Catalina系统卷的初始可引导备份。需要非常清楚的是,现有备份不会受到影响,这不会影响CCC保存数据的能力,也不会影响启动盘或备份盘上文件系统的完整性。此错误的影响仅限于初始创建可引导备份。

所以那是个柠檬……。但是,嘿,北半球的夏天已经到了,所以让我们来做点柠檬水吧!

在去年的苹果开发者大会上,苹果建议备份软件应该使用苹果软件还原(ASR)来克隆APFS卷组。起初我对此不屑一顾-我不应该使用苹果的黑匣子工具来做我的工作,我更喜欢对我的备份承担全部责任。然而,考虑到苹果将继续限制APFS的使用,而不是授予它,我们决定投入相当多的时间来评估这一功能,我们在过去的8个月里一直在对其进行Beta测试。我不喜欢依赖ASR进行常规备份,因为它有一些缺点,并且无法深入了解其内部活动(例如,复制的文件、遇到的错误),但在这种定义非常狭窄的情况下,我们可以利用Apple的专有实用程序来建立可引导的备份。上周日,我们发布了一个测试版,其中包含了围绕此功能的新用户界面,我们打算通过利用ASR进行初始备份来继续生成可引导的备份。

我已经有10.15.4的备份,更新到10.15.5后需要做什么特殊的事情吗?

不是的。如果您在以前版本的Catalina上建立了备份,则您的备份卷已经具有功能正常的固件链接,CCC将继续正常更新该卷。坚持使用CCC 5.1.17,并在下周左右更新到CCC 5.1.18。

我正在尝试创建10.15.5的新备份。如何继续创建可引导备份?

如果您正在运行10.15.5,并且要将Catalina系统卷备份到空磁盘,则应使用CCC 5.1.18测试版替换您的CCC副本。打开CCC 5.1.18后:

CCC随后将显示新的UI,该UI将引导您完成创建可引导备份的过程,或者如果您选择只创建数据备份的话。新功能记录如下:

我们预计CCC 5.1.18的测试期很短--大部分更改都是在新的UI中进行的,后端功能已经过了相当严格的测试。我们已经将本地化资源发送给我们的翻译团队,我们预计在接下来的几周内发布5.1.18的最终版本。

CHFLAGS()系统调用不能再在APFS卷上的文件夹上设置SF_FIRMLINK标志。它不是以我们会检测到的错误代码失败,而是以静默方式失败-它以成功退出状态退出,但以静默方式无法设置特殊标志。这是CHFLAGS的APFS文件系统实现中的一个错误-如果系统调用没有执行您要求它做的事情,它应该返回一个错误代码,而不是成功。这也是一个相当令人讨厌的错误。苹果公司宣扬说,你应该经常检查你的错误代码,我们也是这样做的--出于宗教原因。这个错误从我们身边溜走了多久,谁知道呢,因为系统调用以成功错误代码退出。

我们不需要设置许多这样的标志,也不需要经常设置它们-只需在第一次备份MacOS系统卷时就可以了。不过,它恰好对APFS卷组的功能至关重要,因此设置这些标志失败意味着在10.15.5和更高版本上创建的新的全系统备份将不能引导,并且看起来您的数据都不在目标上(不过要清楚的是,所有数据都已备份)。这与我们在这里试图做的事情有些背道而驰。现在很难找到亲切的语言来表达我对苹果的感情。不过,我只想说,我对苹果在点发布的操作系统更新中引入这类错误感到非常失望。我们现在已经看到了Catalina的5个主要更新,我们应该期待从操作系统中看到比这个更高的质量。

上周一(5月18日),我就此问题向苹果提交了一份错误报告(FB7706647)。我还与苹果的开发者技术支持部门发生了一起事件。我得到了一个同情的耳朵,有人向苹果工程部提出了我的观点--我非常感激。然而,这一切都是徒劳的。最新的10.15.5测试版于上周三(5月20日)发布,没有任何修复。今天,苹果公司发布了10.15.5,带有这个令人讨厌的小错误,而我们现在正在创建完整的,但功能略差的备份。

这会不会仅仅是一个安全补丁--也许苹果不想让第三方创建Firmlink?

如果是这样的话--如果这实际上不是一个漏洞,而实际上是苹果故意改变的,那么我会认为这远远比一个漏洞糟糕得多。首先,如果第三方不应设置或删除SF_FIRMLINK标志,则应将其与标志的定义一起记录(即在/usr/include/sys/stat.h中)。其次,如果您不允许设置SF_FIRMLINK标志,那么系统调用应该返回-1并将errno设置为EPERM-报告成功和失败应受到谴责。最后,也是最重要的一点--在没有任何警告的情况下在生产操作系统版本中进行这样的更改是对依赖文档功能的第三方开发人员的公开敌意。

我想我们会在未来的操作系统版本中发现这是不是一个简单的文件系统缺陷,溜进了生产操作系统版本,或者苹果公司发现这是一种可以接受的做法,通过在生产操作系统发布周期的中间悄悄地删除文档功能,从而让开发人员不知不觉地意识到这一点。