APFSの登場とDisk Utilityの変化

macOS Sierraでは、Siriのサポートやストレージ最適化ツールなど多くの新機能が追加されたが、OSとしての基盤部分となると、個人的には「Apple File System(APFS)」を置いて他にない。

APFSは、現在メインに利用されている「HFS+」の後継であり、正統進化版に位置付けられる最新のファイルシステム。ジャーナリングやFusion DriveといったHFS+の全機能にくわえ、さまざまな新機能が用意されている。64bit i-node番号のサポート(HFS+は32bit)、連続する空データがある場合に物理的なディスク消費をせずにすむ「Sparseファイル(疎ファイル)」のサポート、3種類の暗号化処理(なし/単一キー/マルチキー)のネイティブサポートはその一例だ。

データ構造の遅延初期化が可能になった結果、利用開始前にボリューム全体を一括フォーマットする必要がなくなった点も新しい。ファイルに対し変更がくわえられた状態で初めてコピーと書き換えが実行される「Copy-On-Write」は、他のファイルシステムに見られないAPFS独自の機能だ。

ユーザ目線での最大のメリットは、「スナップショット」と「クローン」のサポートだろう。前者は特定時点におけるシステムの自動バックアップ機能で、ファイルシステムに生じた変更は差分として保存される。後者は"書き込み可能なスナップショット"とでもいうべき機能で、文書のバージョン管理が容易になる。この2つの機能は、応用次第ではTime Machineを置き換えうる存在という意味でも要注目だ。

APFSで初期化したストレージ(USBメモリ)の情報ウインドウ。フォーマット欄に注目しよう

実際にAPFSを使ってみよう

そのAPFSだが、macOS Sierraと同じWWDC 2016の場で発表されたものの、macOS Sierraネイティブのファイルシステムとして出荷されることは叶わなかった。収録されてはいるが、開発者向けプレビューという扱いであり、正式リリースは2017年と少し遅れる。

確かに、新装あいなった「Disk Utility」を起動しても、フォーマット形式の選択肢に「Mac OS拡張」や「exFAT」はあるが、APFSの文字は見当たらない。現時点では、Disk UtilityにはAPFSでフォーマットする機能は実装されていないのだ。

物理ストレージをAPFSでフォーマットする場合は、Terminalで「diskutil」コマンドを実行する。まずは対象のストレージをマウントしたあと「diskutil list」を実行し、ストレージ番号(ex. disk2、disk3)を特定しよう。その後、以下の書式に従いコマンドを実行すると、そのストレージ上にAPFSコンテナが作成される。開発者向けプレビューということもあり、コマンドを実行するたびに警告を受けるので注意してほしい。

$ diskutil apfs createContainer /dev/disk2s1

/dev/disk2として認識されたUSBメモリに、diskutilコマンドでAPFSコンテナを作成した

次に、コンテナ上に仮想パーティション(ボリューム)を作成する。diskutilコマンドの書式は以下のとおり、デバイス名(disk○s○)はコンテナ作成時と同じものを指定すればOK。デバイス名に続くのはフォーマット名、その次は任意のボリューム名だ。以下の例では、APFSフォーマットの「MyAPFS」というボリュームが作成される。

$ diskutil apfs addVolume disk2s1 APFS MyAPFS

APFSでは、コンテナ上に複数の仮想パーティション(ボリューム)を作成できる。たとえば、以下のとおりコマンドを実行すると、同じコンテナ上に「2ndAPFS」というボリュームが作成される。フォーマット形式は同じAPFSしか指定できないため、たとえばHFSを指定すると「HFS is not a valid file system personality for APFS」と表示され失敗する。

$ diskutil apfs addVolume disk2s1 APFS 2ndAPFS

作成したボリュームは物理的にパーティショニングした場合と同様に独立しているため、個別にマウント/アンマウントできる。Disk Utilityはフォーマット/パーティショニングには対応しないものの、情報の確認やマウント/アンマウントには利用可能だ。ただし、ファイル個別の暗号化機能は実装されていないらしく、Finderに情報画面を見てもHFS Plusとの違いは確認できない。

Disk UtilityでAPFSフォーマットのストレージを表示したところ

なお、diskutilコマンドに続く「apfs」は、APFS専用の内部コマンドを使うためのオプションで、機能的には従来のdiskutilコマンドとは分離されている。「ap」とだけ省略することも可能なので、まずは「diskutil ap」を実行して簡易ヘルプを表示してみよう。

内部コマンド「list」は、APFSコンテナの詳細情報を確認するときに利用する。「diskutil ap list」を実行すると、現在マウントされているストレージのうちAPFSでフォーマットされたものを対象に、ボリュームサイズや空き容量を確認できる。

「diskutil ap list」を実行したところ、USBメモリに作成されたAPFSコンテナと仮想ボリュームの情報が表示された

ディスクイメージを作成/管理するCUIツール「hdiutil」も、APFSに対応している。たとえば、以下のとおりコマンドを実行すると、1GBのスパース・ディスクイメージを作成できる。空き物理ストレージが手もとにない場合は、この方法で作成したイメージファイルでAPFSを試すのもいいだろう。

$ hdiutil create -fs APFS -size 1GB test.sparseimage

hdiutilコマンドでAPFSのディスクイメージを作成したところ