首先恭喜你成功升級到了最新的 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 檢視。