計算機科学において、スパースファイル英語: sparse file)とはファイルの一種で、部分的に空のファイルを実際のファイルシステム上で少ない消費容量で効率的に保存する仕組みである。これは、空の領域を実際にディスク上に書き込む代わりに、メタデータと呼ばれる空の領域であることを示す小さな情報を書きこむことで実現される。

スパースファイル:空のバイトは保存する必要がないため、 メタデータで表すことができる。

概要 編集

スパースファイルに対応したファイルシステムでは、部分的に空のファイルを書き込む際に、ブロックを構成する実際の空データではなく、空のブロックを表すメタデータをディスクに書き込む。これによって使用するディスクスペースは少なくなる。 ブロックに空でないデータが含まれている場合にのみ、ブロック全体が実際にディスクに書き込まれる。またファイルシステムがホールパンチをサポートし、ゲストオペレーティングシステムがTRIMコマンドを発行する場合、ゲストのファイルを削除すると必要なスペースが削減される。

スパースファイルをファイルシステムから読み出す場合、ファイルシステムはメタデータで空と記録されているブロックを実際の空ブロック(NULLバイトで埋められたブロック)に復元しながら読み出すという変換を透過的に行うので、利用者はスパースファイルかどうかを意識することなく利用することができる。

現在では多くのファイルシステムがスパースファイルをサポートしており、代表的なものとしてNTFSUnixのファイルシステムがある。Apple社のHFS+はスパースファイルの機能を持たなかったが、OS Xでは仮想ファイルシステムによって、HFS+などのファイルシステム上でもスパースファイルを利用できるようになった。また、2016年のWWDCではApple File System(APFS)でもサポートされることが公表された。スパースファイルは、主にディスクイメージの保存やデータベースのスナップショット、ログファイルの保存、科学計算分野などで広く用いられるようになってきている。

良い点 編集

スパースファイルの良い点は、本当に必要な容量しか容量を消費しないことである。これにより、ディスク容量を節約できたり、空き容量が足りなくても巨大なファイルを作ることができたりする。また空き領域にNULLバイトを大量に書き込むこともないので、その領域の書き込みは事実上スキップされることから、書き込み時間の節約にもなる。更には容量確保の時点でNULLバイト書き込みが起きるようなシステムでは実際のファイル書き込みと併せると、2重のスキップ効果が得られる。

例えば最大100GBの仮想マシンのイメージファイルが実際には2GB分しかファイルを持たない場合、事前割り当て(Pre-Allocated)ディスクでは100GB必要だが、スパースファイルなら2GBで足りる。

悪い点 編集

スパースファイルの悪い点は、断片化を起こしやすいことである。ファイルシステム上の空き領域情報は誤解を招きやすいものとなり、ファイルシステム上にスパースファイルが多く存在すると、例えばスパースファイルの空き領域への上書きが発生したとたんにディスク溢れやクォータ超えエラーを起こしてしまうなど、予期しにくいエラーが発生しやすくなることが知られている。

Unixのスパースファイル 編集

通常、スパースファイルはユーザーに対して透過的に処理される。 ただし、通常のファイルとスパースファイルの違いは、状況によっては明らかになる。

外部リンク 編集