Mac業界の最新動向はもちろん、読者の皆様にいち早くお伝えしたい重要な情報、
日々の取材活動や編集作業を通して感じた雑感などを読みやすいスタイルで提供します。

Mac Fan メールマガジン

掲載日:

新ファイルシステム「APFS」って何?(前編)

著者: 千種菊理

新ファイルシステム「APFS」って何?(前編)

ファイルシステムはどう変化した?

9月20日にMacの最新OSである「macOSシエラ(Sierra)」がリリースされ、10月にはそのシエラがプリインストールされた新しいMacBookプロも登場しました。

タッチバー(Touch Bar)を搭載した今回のMacBookプロをはじめとして、ほとんどの現行MacはSSDを搭載しており、もはやHDD搭載の機種はデスクトップ型のiMacくらいです。他メーカーのコンピュータを見ても、今はSSD搭載機種のほうが主流となってます。では、そのディスクを扱う「ファイルシステム」はシエラではどう変わったのでしょうか?

ファイルシステムがOSの特徴

ファイルシステムというのはOSの一部で、ストレージを管理し、データを「ファイル」という形で格納する仕組みです。コンピュータの創世記には、データを保存したければ、コンピュータにつながっている「どのストレージ」の「どこからどこまでの領域を使うか」を、ユーザが自分で決める必要がありました。1つのストレージに1つのデータを収めるなら、それでもいいでしょう。しかし、10個、100個、1000個と扱うデータが増えてくると、さてどこにデータを収めたか、どこが使われている部分なのかがわからなくなってきます。

しかも、格納したファイルは最初の状態のままとは限りません。テキストファイルなどは編集することでサイズが増えたり、減ったりします。減ったらその空いたストレージ領域をどうするか、増えたらそのデータをどこに入れておくかなど、もはや人の手では管理しきれなくなっていったのです。

そこで、ストレージの管理をコンピュータ自身にさせる仕組み「ファイルシステム」が生まれました。ファイルシステムが搭載されたOSでは、利用者は「ファイル」という形でデータを格納すればいいだけです。データをストレージのどこに格納するか、ファイルサイズが伸び縮みしたときの対応をどうするか、アクセス権を用いたセキュリティをどう適用するか、なんてことは全部OSとファイルシステムが処理してくれます。1990年代以前は、OSはそれぞれ独自のファイルシステムを用意して、OSの必要な機能を活かしており、むしろファイルシステムの特徴こそがOSの特徴といえるくらい重要でした。

ファイルシステムがない時代のディスク管理

ファイルシステムがない時代のディスク管理を表した図です。このような問題を考えつつ、人間が手作業でディスクの領域を分配していました。もちろんこれは「職人技」で簡単には使えません。どのデータが使いたいデータなのか、誰が読み書きしていいのか、セキュリティはどうなのか、などわかりにくいことが多くありました。

ファイルシステムがある時代のディスク管理

ファイルシステムを使ったディスク管理を表した図です。ファイルとフォルダによるわかりやすい階層構造ですね。実際にどこのデータと紐付くかは、ファイルシステムで管理します。また名前やアクセス権、ファイルの形式など付随する情報も併せて管理されるので、非常に楽になります。

HFS+は優れもの

「HFS+(Hierarchical File System Plus)」は1990年代後半に開発されたファイルシステムで、当時アップルが開発していた「コープランド(Copland)」という新OSに実装される予定でした。しかし、コープランドの開発が失敗し、一方で、当時のHFSファイルシステムではもはや時代にそぐわなくなってしまい、とりあえずファイルシステムだけでも更新するためにと「Mac OS 8.1」から実装されました。

HFS+はUNIXの特徴も取り入れた非常に柔軟なファイルシステムで、うまく使えばストレージを効率よく利用でき、性能も引き出せる優れものでした。HFS+ではファイルシステムそのものの管理情報も「ファイル」の形で格納されます。たとえばファイルの名前や日時、アクセス権などの属性、どこに格納されているかなどを記録した「エクステント」は、カタログ「ファイル」という場所に納されます。

一方、ファイルに付随する細かい情報を追加できるよう、「アトリビュートファイル」という管理情報を格納するファイルも最初から用意されていました。コープランド開発時には想定もしていなかった「拡張属性(EA)」や、より細かなアクセス権を設定できる「ACL」などの機能は、アトリビュートファイルがあったからこそ実現できたものです。先述のようにコープランドは失敗しましたが、もはやそれより先を見据えていたHFS+は、現代のmacOSで見事花開いたのです。

時代に合ったファイルシステム

HFS+はOS Xの時代になっても使われ続けましたが、すでに30年前の仕組みとなりました。当時は想定していなかった変化が起きつつあるのが現在になります。一番の変化は、ストレージに使われるメディアが回転するディスクを用いたHDDから、半導体を用いたSSDに変化してきたということです。

HDDの場合、回転するディスクのどの円周にアクセスするかを決めて、「シーク」という操作でヘッドを動かし、目的のエリアまで移動して読み出します。この仕組みでは、できるだけシークさせない、一度ヘッドを下ろしたらそこから連続して読めるようにデータを並べることが重要でした。

HFS+のエクステントは、そのために非常に役に立ったのです。さらにエクステントを活かすために、「遅延再配置」という機能も実装されたほか、内周より外周のほうが読み取りが速いことを利用した「ホット・ファイル・アダプティブ・クラスタリング(Hot File Adaptive Clustering:HFCA)」という仕組みで、よく使うデータを移動させ、アクセス性能を向上させていました。

一方、SSDは半導体でアドレス(どのフラッシュメモリのどの部分か)を指定してアクセスするのみです。原理的にはデータがどこにあろうと同じ速さでアクセスできます。そのため、連続領域することのメリットがないのです。

また、SSDは書き換え可能な回数がHDDに比べ少なく、あまり頻繁に書き換えないほうが長持ちします。遅延再配置やホット・ファイル・アダプティブ・クラスタリングは性能向上にならないどころか、書き込みを増やして SSDの寿命を短くしてしまいます。HDDではメリットのある機能でしたが、どちらもSSDでは無効にされるようになりました。

ソフトウェアの作りも変わってきています。昔は、ファイルを編集して書き出す際には、既存のディスク上のファイルをできるだけそのままに、追記したり削ったりといった操作をしていました。できる限り最小の操作でディスクに書くことが、性能上重要だったのです。現在のソフトの多くは、既存のファイルを書き換えません。同じフォルダに一旦一時ファイルを作成し、編集後の内容を一気に書き出します。書き出しがうまくいったところで、本来のファイルと一時ファイルのファイル名を「ひっくり返し」ます。最後に、一時ファイルの名前となった古いファイルを削除する、という手順を取るのです。

なぜこんなことをするかというと、このほうがより安全だからなのです。たとえば、ストレージの容量が少ないときには全部を書き込めない可能性があります。ファイルの編集中に電源が落ちてしまいすべてを書き込めないことだってあり得ます。そのため、編集後の内容を別に書き出すことで全部書けることを確認し、それからファイル名を変更するという短時間ですむ手法を使います。

また、ある瞬間のファイルの状態を保存する「スナップショット」といった機能は、エンタープライズ向けのOSでは古くからありますが、昨今ではコンシューマ向けのOSでも一般的になりつつあります。しかし、こうした仕組みをHFS+に新たに実装するには大変な手間がかかります。HFS+は良いファイルシステムでしたが、時代を考えると、そろそろ次を考える必要が出てきたというわけです。そうして生まれたのが、20年ぶりに刷新したアップルの独自ファイルシステム「APFS」なのです(次号に続く)。

【 遅延再配置とHFAC 】

「遅延再配置」は、20MB以下のファイルで、多数のエクステントを使っている場合、より少数のエクステントで格納できるようにまとめ上げる仕組みです。Mac OS X 10.2ジャガーで実装されました。少ないエクステントで格納されるということは、ディスクの連続した領域に格納していくことを意味しているので、一種のデフラグとしての効果が期待されました。一方、ホット・ファイル・アダプティブ・クラスタリングは、よくアクセスされる10MBまでのファイルをHDDの最初のエリア(外周側)に配置し直すという仕組みで、Mac OS X 10.3パンサーで実装されました。これも再配置時に連続領域になるうえ、HDDではより速い外周側に置かれるので、性能向上が見込めました。格納されるのは小さいファイルだけかと思われるでしょうが、OSの重要なファイルにはこの程度のサイズのものが多く、かなりの改善になっていました。

【 ウェアレベリング 】

SSDやフラッシュメモリの半導体は、同じ部分に何度も繰り返し書き込むと、いつかは壊れてしまいます。とはいえ、OSもソフトもディスクをまんべんなく使うわけではなく、よく書かれるエリアとそうでないエリアが生じます。そこで、フラッシュメモリのコントローラでは、よく書かれるエリアについては毎回同じ半導体に書き込むのではなく、別の半導体にずらして書き込み、読むときもずらして読んでいくことで、少しでもまんべんないエリアで書き込みが行われるようにして、寿命を延ばしているのです。これを「ウェアレベリング」といいます。すでにデータの書き込まれている領域は、ずらして書き込む先としては使えないので、ウェアレベリングはSSDの空き領域が多いほどうまく働き、空き領域が減ってくると難しくなってきます。

【エクステント】

HFS+のエクステントは、ファイルの格納場所を開始位置とそこからの長さのセットで表現したものを指します。ディスク上でファイルが分断されれば、複数のエクステントでファイルが構成されます。詳細は、2015年の6月号の本連載で解説しています。

【無効化】

ホット・ファイル・アダプティブ・クラスタリングはMac OS X 10.6.5スノーレパードで、遅延再配置はOS X 10.7ライオンで、それぞれSSDの場合は無効化されるようになっています。ちょうどMacBookエアが爆発的に売れていた時期と重なります。

文●千種菊理

本職はエンタープライズ系技術職だが、一応アップル系開発者でもあり、二足の草鞋。もっとも、近年は若手の育成や技術支援、調整ごとに追い回されコードを書く暇もなく、一体何が本業やら…。