Apple File System

Apple File System  は、Appleが開発したmacOS、iPadOS、iOS、visionOS、tvOSおよびwatchOS 向けのファイルシステムである。これらのOSで使われてきたHFS+  の根本的な問題を解決することを目的としている。APFSは フラッシュメモリおよびSSDに最適化されており、暗号化に重点を置いている。

1. 歴史
-----

2016年6月13日に開催されたWorldwide Developers Conference  2016にて、1998年から使用されていた HFS+ 以来約20年ぶりに、2017年の導入を目指した開発が発表された。

iOSデバイスには2017年3月27日に iOS 10.3のリリースで導入され、macOSデバイスには2017年9月25日に macOS High Sierraのリリースで導入された。

HFS+はシングルスレッドにしか対応していないが、APFSはマルチスレッドに対応しており、ファイルのタイムスタンプはナノ秒単位で管理される。

ファイル共有プロトコルはAFPには対応していないため、SMBを使うことが推奨されている。

2014年よりドミニク・ジャンパオロが中心になり、Core Storageとは異なる新しいファイルシステムとして開発が始まった。

2. 設計
-----

このファイルシステムはApple WatchからMac Proにまでスケールしている。inodeには64bitの数が採用され、よりセキュアなストレージになっている。APFS のコードでは、HFS+ と同様に TRIMコマンド が使われており、空き容量の管理とパフォーマンスの改善に貢献している。これにより、iOS, iPadOSとmacOSでは、読み書きの速度が向上する場合があり、iOSデバイスではAPFSの利用可能データの計算方法の改善により、デバイスの空き容量が増加することがある。

2.1. クローン
---------

クローンを利用することで、オペレーティングシステムは、同じボリュームにあるファイルのコピーを追加のスペースを消費せずに効率よく作成できる。クローンファイルに対してなされた変更は、差分データとして保存されるため、ドキュメントの改訂やコピーに必要なストレージ容量が削減できる。

2.2. スナップショット
-------------

APFSは、ポイントインタイムで読み取り専用のファイルシステムのインスタンスを作成することで、スナップショットをサポートする。

2.3. 暗号化
--------

APFSはネイティブにディスク全体の暗号化に対応している。ファイルの暗号化には以下のオプションが選択できる。

暗号化なし
1つの鍵による暗号化
複数の鍵による暗号化 

2.4. ファイル数の最大値の増加
-----------------

APFS はinodeの数が64bitに増加したため、1つのボリュームに 個以上のファイルを作成することが可能になった。

2.5. データの完全性 
-----------------------------

APFSはチェックサムを利用してメタデータの完全性を保証している。ただし、現時点ではユーザー領域のデータには未対応である。

2.6. クラッシュに対する保護
----------------

APFSはシステムのクラッシュによるメタデータの破損を回避できるように設計されている。既存のメタデータを置き換えるように上書きするのではなく、初めに完全に新しいレコードとして書き込み、新しいデータにポインタを変更した後に、古いデータを開放するようになっている。この仕組みにより、データの更新中にクラッシュした場合に、同じレコード中に古いデータと新しいデータが部分的に混在するような事態を避けることができるようになった。また、HFS+ ジャーナルファイルシステムではファイルをジャーナルに書き込んだ後にカタログファイルにもう一度書き込む必要があり、1回の変更のたびにストレージに2回書き込まなければならないという問題があったが、これも解消した。

2.7. 空き容量の共有
------------

APFS は複数の論理ドライブ  を同じコンテナ内に作成し、コンテナ間で空き容量を共有できるようになった。AppleのFusion Driveの機能と同様に、1つの物理パーティションからでも2つの異なるドライブ上の2つのパーティションからでも、APFSのコンテナを作ることができる。

3. 制限
-----

初期バージョンのAPFSでは、メタデータに対してはチェックサムを利用して完全性の検証ができるが、ユーザーデータに対してはできない。また、バイトアドレス可能な不揮発性メモリ の利点を活用できない。現時点では、圧縮の機能も利用できない。

4. サポート
-------

4.1. macOS
----------

macOS High Sierraでは、フラッシュストレージデバイス上のすべてのファイルシステムを、自動的にAPFSに変換する。FileVaultボリュームも変換されるが、Fusion Driveとハードディスクドライブは変換されない。ユーザーはこの変換をオプトアウトすることはできず、High Sierraバージョン以降のAPFSは、前のバージョンのmacOS Sierraからは読み取れなくなる。

MacBook Pro 専用のmacOS High SierraやmacOS Mojaveでは、インストール先がフラッシュストレージデバイスの場合だけではなく、ハードディスクドライブや Fusion Drive の場合も、自動的にAPFSに変換する。

制限付きの実験段階のバージョンの APFS が、古いバージョンの macOS  でも、コマンドラインの diskutil ユーティリティで利用できる。HFS+が行う Unicode 正規化 を行わないという制限があるため、英語以外の言語では問題が発生する。SierraのベータバージョンのAPFSでフォーマットされたドライブは、新しいバージョンのmacOS High Sierraと互換性がなく、Time Machine、FileVault volumes、またはFusion Driveを使用できない。

macOS Big SurでAPFSのボリュームを Time Machine のバックアップ先として利用する事に対応し、より高速でコンパクトとなり、信頼性を増した。

4.2. iOS、tvOS、および watchOS
-------------------------

iOS 10.3、tvOS 10.2、およびwatchOS 3.2以降では、互換性のあるデバイスでは、既存のHFSXファイルシステムがAPFSに変換される。

4.3. iPadOS、visionOS
--------------------

APFSを標準サポートしている。

4.4. Linux
----------

各種Linuxにおいては、Paragon Software社が提供するAPFS for Linux by Paragon Softwareをインストールすることによって、APFSでフォーマットされたボリュームの読み書きが可能となる。

5. 関連項目
-------

ファイルシステムの比較
Btrfs
HAMMER
ReFS
Write Anywhere File Layout
ZFS

6. 脚注
-----

7. 外部リンク
--------

https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/APFS_Guide/Introduction/Introduction.html - Apple Developer
[1] - arstechnica.com
[2] - gihyo.jp 後藤大地 2016年7月1日