AppleがAPFSファイルシステムを導入した際、APFS コンテナという新しい概念が一緒に登場しました。 すべてのAPFSボリュームは1つのコンテナの中にあり、そのコンテナはディスクのパーティションスキームの中にあります。 コンテナ内のすべてのボリュームはコンテナで利用可能なスペースを共有します。 別のAPFSコンテナはお互いのスペースを共有しません。
macOS High Sierraで、Appleはボリュームに 役割 の概念を追加しました。 その時点では、役割は3つだけで、大部分は平均的ユーザが気付くものではありませんでした:Preboot、復旧、そしてVM (仮想メモリ)です。 これらの役割により、システムが特定のボリュームを特定の目的に識別できるようになり、その後ボリュームを特定の方法で扱えるようになります (例えば、上記の役割を持つ任意のボリュームをデフォルトで非表示にしたり、またデフォルトでマウントしないようにできます)。
以下の記述でこれらのAPFSの概念を説明しましょう:
パーティションスキームは物理的ディスク全体を網羅します。 パーティションスキーム内には1つ以上のAPFSコンテナを作成でき、それぞれのコンテナ内には1つ以上のAPFSボリュームを作成できます。 過去のパーティションとは異なり、コンテナ内のすべてのボリュームはコンテナに割り当てられたスペースを共有します。 上の例では、3つのグレーのヘルパーパーティション、システムとデータボリューム、そして“その他のボリューム”、それらすべてがその700GBのストレージにアクセスできます。 しかし、“その他のボリューム B”は別のコンテナにあるので、コンテナ“A”のボリュームとスペースを共有しません。 通常、ディスクはこのようにパーティションされていませんが、例えば、同じディスクにある起動ディスクのバックアップを維持したい場合 (例:デバロッパがテスト目的で)、それが必要になります。
新しい概念:APFSボリュームグループ
macOS Catalinaで、AppleはAPFSファイルシステムにもう1つの新しい概念を導入しました:ボリュームグループ です。 これはAPFSコンテナ内のボリュームを概念的にグループ化したもので、新しいサブ構造ではありません。 また、AppleはAPFSボリュームに利用できる役割の数を大幅に広げました (現在16のユニークな役割があります)。 Catalinaにアップグレードすると、現在使用中のmacOSシステムボリュームは名前が変更されます。 例えば、“Macintosh HD - Data”にです。 その役割は データ に設定され、その後、新しいボリュームが システム の役割と共に起動ディスクのAPFSコンテナに追加され、同時にデータボリュームと共にグループ化されます。 そのグループ内の2つのボリュームは、特別な絆を共有し、Finderから、およびそれぞれのボリュームのファイルシステムから特別な扱いを受けます。 ユーザの視点から見ると、これら2つのボリュームは1つの、統合されたボリュームとして扱われます。 しかし、ディスクユーティリティを見ると、2つのボリュームは異なる、別個の項目として表示されます。
読み出し専用のシステムボリューム
おそらく、macOS Catalinaでの最大の変更を1つ挙げるなら、システムボリュームが起動時にマウントされる方法、つまり読み出し専用ということです。 ボリュームを読み出し専用にマウントすることで、攻撃者がmacOSのシステムボリュームのコンテンツに変更を加えることが不可能になります。 だからと言って、お使いのMacがすべての考え得る攻撃から100%安全という訳ではありません。
macOS Big Surより、Appleは暗号で封印された “署名付きのシステムボリューム”を導入して、システムボリュームの保護を拡張しました。 システムボリュームが起動時にマウントされることが完全になくなり、代わりに、システムボリュームのスナップショットがマウントされ、起動ディスクとして使用されています。 そのスナップショットは読み出し専用で、完全にイミュータブルです。
データボリューム
データボリュームはシステムボリュームの読み出し/書き込みの“影”と考えることができます。 データボリュームにはすべてのユーザデータ (例:ホームフォルダ、サードパーティアプリケーション等) が含まれていますが、同時に、読み出し専用ボリュームに存在できない一握りのシステムコンポーネントも含まれています。 例えば、AppleはSafariをデータボリュームに配置しています。 おそらく、より頻繁にアップデートできるからでしょう。 現在の起動ディスクのデータボリュームは、システムの特別なマウントポイントにマウントされています。 FinderからMacintosh HD システム ボリューム {データボリューム名} と進むと、見つけられます。 そこで目にするのは、システムボリュームのルートレベルのフォルダのレプリカです。 これらのフォルダ内には、まだ書き込み可能なシステムコンポーネントがすべてあります。 しかし通常、これらの項目はFinderに表示されません。 というのは、Finderは2つのボリュームのコンテンツを視覚的に1つにして、1つのボリュームとして表示するからです。 また、Finderがデータボリュームをその他すべてのボリュームの横にリスト表示することはありません。 つまり、 データボリュームはマウントされていますが、非表示です。
Firmlinkと結びつけるには
1つの統合されたボリュームであるという幻想を解き放つために、AppleはAPFSにFirmlinkのサポートを追加しました。 名前が暗示する通り、Firmlinkは概念的にソフトリンクとハードリンク間を繋ぎます。 しかし、おそらくその説明でそれらがより明確になる訳ではありません (ソフトリンクとハードリンクに精通している人でさえも! Appleは、Firmlinkを2つのファイルシステム間の“双方向ワームホール”と説明しています。 “ユーザ”フォルダを例にとって見てみましょう。 システムボリュームのルートレベルにある“ユーザ”フォルダは、実際データボリュームのルートレベルにある“ユーザ”フォルダを指すFirmlinkです。 システムボリュームの“/Users”フォルダに進んでみると、実際データボリュームの“/Users”フォルダのコンテンツが表示されます。 同様に、もしデスクトップのフォルダを見ているとして (つまり、データボリュームのコンテンツを見ています) 、数レベル上に進むとします。 “ユーザ”フォルダの親に到達した時には、見ているのはもはやデータボリュームではなく、むしろ、そのFirmlinkによってシステムボリュームのルートレベルに転送されています。
macOSのシステムボリュームには約20のファームリンクがあり、システムボリューム上のさまざまなフォルダをDataボリュームの書き込み可能なフォルダにリンクしています。 興味があるなら、Firmlinkの全リストを起動ディスクの“/usr/share/firmlinks”から閲覧できます。
アプリケーションフォルダとFinderのおふざけ
Firmlinkはほぼ明白でわかりやすいですが、1つ実に顕著な例外があります。 それはアプリケーションフォルダです。 システムボリュームのルートレベルにある“アプリケーション”フォルダは、Dataボリュームのルートレベルにある“アプリケーション”フォルダへのファームリンクです。 しかし、多くのアプリケーションは、データボリュームにある書き込み可能なアプリケーションフォルダには実際保管されていません。 ここでFinderがちょっとした魔法を使います。 読み出し専用のシステムアプリケーションフォルダは、実はシステムボリュームの、システム > アプリケーション、と進んだ場所にあります。 そして、Finderでアプリケーションフォルダを開くと、そのフォルダの集合体とDataボリュームのルートレベルのアプリケーションフォルダが表示されています (そこに お使いの アプリケーションがすべてあります)。 平均的ユーザにはこれが期待通りの動作で、それは素晴らしいことです。 しかし、この同じ集合体が、現在Macを起動しているのではない他のシステムボリューム(起動ディスクの古い起動可能なコピーなど)に適用されていないことに気づくかもしれません。 それらのボリュームで、表示されているシステムボリュームのルートレベルのアプリケーションフォルダを開くと、データボリュームのルートレベルのアプリケーションフォルダへのFirmlinkのコンテンツのみが表示されます (例:Appleのアプリケーションは無く、サードパーティのアプリケーションとSafariのみ)。 そのような場合には、システム > アプリケーション からAppleのシステムアプリケーションを見つけられます。