書いて覚えるSwift入門

第32回 APFSの研究

この記事を読むのに必要な時間:およそ 5 分

さよならパーティション

APFSのもう1つの特長は,物理的なパーティションを不要にしたこと。物理的にストレージをパーティションした場合,それぞれのパーティションの空き容量は物理的に固定されてしまいますが,APFSではまず「コンテナ」⁠container)があり,そこに論理的なヴォリューム(volume)を作成することで,コンテナの空き容量をすべて活用できます。ZFSをご存じの方は前者がpool,後者がdatasetというと理解しやすいでしょう。

図7図8は起動ヴォリュームと同じコンテナにヴォリュームを追加した例。どちらも総容量が一緒であることが確認できます。

図7 起動ボリューム

図7 起動ボリューム

図8 ボリュームを追加

図8 ボリュームを追加

APFSではヴォリュームが論理的な存在です。実はこのことが,HDDやFusion DriveへのAPFS導入が見送られた理由でもあります。APFSというのはファイルシステムというよりメモリ管理システムのようだと感じた読者は鋭い。空き容量を増やすにはスナップショットを削除する必要があるというのはガベージコレクションのようですし,ヴォリュームがコンテナを共有するというのは実メモリをプロセスに仮想アドレスとして割り当てるような感じ。実はそうなのです。SSDというのはRAMに似て,どのブロックにもアクセスする速度は変わりません。だったらより利便性の高いメモリ管理に似せようとするのはソフトウェアエンジニアの願望といってもいいでしょう。ZFSでは実メモリをどっさり使ってRAMに似ていないHDDでそれを実現しました。SSDを前提とすればそれも不要です。そして今日日のApple製品は,廉価なデスクトップを除けばその前提条件がそろっています。実にAppleらしい割り切りっぷりではありませんか。

「APFS? 何それ知らない」と昔のハードウェアは言った

新開発のファイルシステムの導入はそれ自体がたいへんなものですが,それを標準とするにあたってはもう1つ問題があります。OSをそこからブートするにはどうすれば良いのでしょう?

ここで,新旧2つの起動ストレージを見比べてみましょう。どちらもdiskutil listの表示結果です図9,図10⁠。

図9 Sierraの場合

/dev/disk0 (external, physical):
   #:                       TYPE NAME                SIZE        IDENTIFIER
   0:      GUID_partition_scheme                    *68.7 GB     disk0
   1:                        EFI EFI                 209.7 MB    disk0s1
   2:                  Apple_HFS Macintosh HD        67.9 GB     disk0s2
   3:                 Apple_Boot Recovery HD         650.1 MB    disk0s3

図10 High Sierraの場合

/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *68.7 GB    disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                 Apple_APFS Container disk1         68.5 GB    disk0s2

/dev/disk1 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +68.5 GB    disk1
                                 Physical Store disk0s2
   1:                APFS Volume root                    15.2 GB    disk1s1
   2:                APFS Volume Preboot                 19.9 MB    disk1s2
   3:                APFS Volume Recovery                519.9 MB   disk1s3
   4:                APFS Volume VM                      20.5 KB    disk1s4

High SierraではSierraのころにあったRecovery Partitionが消え,APFSコンテナの中に収納されたことが見てとれます。それはよしとして,Prebootとはいったい何でしょう?

実は,現代のOSというのはmacOSを含め,最初にロードされるプログラムではありません。まずブートローダーという,OSをロードするプログラムが読み込まれ,そのブートローダーがOSをロードするという2段ロケットのようなしくみになっています。BIOS時代,パソコンはそもそもファイルシステムなんて知らず,起動ディスクの最初のセクター(これがMBR[Master BootRecord⁠⁠)を決め打ちで読み込んで,それがブートローダーを読み込んで,最後にやっとOSがロードされるというしくみでした。EFI時代になって,パソコンはFAT32でフォーマットされたEFIパーティションをサポートするようになりましたが,それにしてもハードウェアが知っているのはFAT32だけです。Macのファームウェアはそれに加えてHFS+もサポートしているので,たとえEFIパーティションが空でもブートできたのですが,それにしてもAPFSなんて知らないことは変わりません。

Prebootの役割は,FAT32とHFS+しか知らない現在のMacにAPFSを教えてあげるために存在するのです。

さらに今日においては,⁠コンピュータ」自体物理的な存在とは限りません。仮想マシンの利用が進んだ結果,物理的なコンピュータのことをわざわざベアメタルと呼ぶようになったぐらいです。Macもこの例外ではなく,仮想MacがあるおかげでTravis CIでSwiftコードもテストできるのです。

その仮想マシンにおけるAPFS Bootサポートですが,本原稿執筆現在,VMware Fusion 8.5.8以降がOK,VirtualBox 5.1.XがNGという状態でした。前者の場合も,Sierraの仮想マシンをAPFSにアップグレードしようとした場合はPreboot Volumeの作成に失敗するため,アップグレード経由ではHFS+のままです。インストール用DVDイメージを作成したうえで新規インストールする必要があります。おかげで本記事が執筆できたのですが,そこに至るまでずいぶん手間暇がかかりました。同じ苦労を読者に味あわせるのは忍びないので,DVDイメージ作成スクリプトをGistに置いておきます。App StoreからHigh Sierraのインストーラを(再)ダウンロードした状態でお使いください。"use at your own risk"で念のため。

次回予告

どんなにすばらしい建築物も,土台が沈めば建物ごと沈んでしまいます。よって今回はXcode の土台であるmacOSの新しい土台であるAPFSを検証しました。実際に体験してみて,強引に将来を見据えた,Appleという名を冠にするにふさわしい一品でした。次回はふたたび物を作るための建物であるXcodeとSwiftに焦点をあてます。

Software Design

本誌最新号をチェック!
Software Design 2021年5月号

2021年4月16日発売
B5判/192ページ
定価1,342円
(本体1,220円+税10%)

  • 第1特集
    ハンズオンTCP/IP
    コードで納得 ネットワークのしくみ
  • 第2特集
    PHP 8移行のタイミングとコツ
    コーディング,JITコンパイラ,フレームワークの3点で考える

著者プロフィール

小飼弾(こがいだん)

1969年生まれ,東京都出身。元ライブドア取締役の肩書きよりも,最近はPokemon GOのガチトレーナーのほうが有名になりつつある……かもしれない永遠のエンジニアオヤジ。

活躍の場はIT業界だけでなく,サブカルからアカデミックまで多方面にわたり,ネットからの情報発信は気の向くまま毎日毎秒! https://twitter.com/dankogai,ニコニコチャンネルは,http://ch.nicovideo.jp/dankogai,blogはhttp://blog.livedoor.jp/dankogai/

当社刊行書籍は『小飼弾のアルファギークに逢ってきた』『小飼弾のコードなエッセイ』など。他にも著書多数。