看蘋果表演黑魔法:macOS Catalina 文件和硬盤出現兩個


看蘋果表演黑魔法

首先恭喜你成功升級到了最新的 macOS Catalina 10.15,普通用戶可能在使用中感受不出特別的變化,但開發者在程序開發時會遇到一些奇怪的現象,因為蘋果在新系統中使用了黑魔法。

技術開發人員在搜索某個應用的時候是否會出現兩個文件?只是路徑不同的兩個文件?例如:

/Applications/Microsoft Excel.app/System/Volumes/Data/Applications/Microsoft Excel.app

而且進入Macintosh HD/System/Volumes/以後,似乎又回到了Macintosh HD,自我循環?見下圖:


進入Macintosh HD/System/Volumes/以後,似乎又回到了Macintosh HD

macOS 的系統文件安全更新

早在2015年蘋果的工程師就給EI Capitan增加了「系統完整性保護」策略,任何系統文件想要被修改都需要root權限,但是惡意程序獲得root權限後還是能破壞系統文件。

在Catalina 10.15,蘋果工程師做了更加瘋狂的事情,徹底將系統文件和用戶的文件分離出來,形成了一個新的文件系統,而且這個系統文件系統是隻讀的,不允許寫入。

想要實現這個黑魔法需要感謝macOS High Sierra中的APFS文件系統,APFS文件系統有很多新的特性支持,例如:Clones、Snapshots、Space Sharing、Encryption、Crash Protection、Sparse Files、Fast Directory Sizing、Atomic Safe-Save。Catalina會先在APFSContainer(容器)中新建一個Volume(卷):Macintosh HD,那原來的就會更名為 Macintosh HD - Data,不過這個名字還是挺難看的,不知道蘋果在未來會不會修改這個 -Data 的後綴命名,那麼Macintosh HD - Data就是我們之前的硬盤,可以讓用戶自由的讀寫數據,新建的 Macintosh HD 就是專門用於存儲系統文件的地方,整個都是隻讀的。這樣就實現了系統文件和用戶文件的分割,用戶的任何操作和惡意軟件的操作都不會影響系統本身。

蘋果表演黑魔法

雖然系統文件和用戶文件分割的想法非常好,但是,顯示兩個分區會給用戶帶來很奇怪的感覺,我想要的文件到底在哪?為了解決這個問題蘋果又開始了精彩的表演:在 macOS 10.15 Catalin中,蘋果啟用了新的文件概念——卷宗組(Volume Groups),擁有可以將卷宗組和在容器內,這樣就把兩個卷合併成一個來顯示。下一個問題,現在所有系統文件都會被移到了 Macintosh HD 中,而第三方應用只能待在 Macintosh HD - Data,開發者的程序們需要調用系統文件,但程序們並不知道系統文件們一起搬家走了,還按照之前的路徑去調用系統文件,找不到它們怎麼辦?蘋果又開始了精彩的表演:使用「firmlink」技術,用 Apple 工程師自己的原話說,它就是數據卷與系統卷之間的「雙向蟲洞」。其實就是相互之間做了一個鏡像,這樣看起來系統文件們還在我們身邊,只不過你看到的只是鏡子中的鏡像,而不是真身,例如:/Users 是 Macintosh HD Data 中的文件夾,但它在系統卷的根目錄下有一個 firmlink 。 所以你在硬盤的根目錄中看到的 /Users ,真實的目錄地址其實是 /System/Volumes/Data/Users/。如果你想知道自己 Mac 為哪些文件創建了 firmlink,可以打開 /usr/share/firmlinks 查看。