Background fsck

Background fsckとは、Soft updatesで以前マウントしていて、意図しない停止をしたファイルシステムにmountされた状態のままfsckしてファイルシステムを修復することである。

概要 
ファイルシステムをアンマウント(unmount, 使用を止めてマウントしていない状態にすること)しないままシステムが停止してしまった場合、通常はファイルシステムの一貫性が壊れてしまい、ファイルシステムをfsckによって修復しなければ再びマウントして使用することはできなくなる。

しかし、Soft updatesを使うとシステムがいつ停止してもファイルシステムの一貫性は基本的に壊れない。
再起動後にfsckを実行しなくてもファイルシステムをそのままマウント(mount)して使用できる。
唯一起きる矛盾は、使用されていないはずの領域が使用されているとマークされて、その領域が無駄になることである。

Background fsckとは、この状態になったファイルシステムを使用しながら無駄な領域を解放することである。
従って、fsckといっても実際の役割は一種のガベージコレクションである。

手順 
Background fsckではまず、ファイルシステムのスナップショットを作成する。
そして、このスナップショットに対してfsckを実行し、ファイルシステムを修復する。
長時間停止することなくスナップショットを作成するためにコピーオンライトを用いているが、この際ファイルシステムの変更を行う可能性のあるシステムコールはすべてブロックされ、その間だけ計算機が応答しなくなり「フリーズした」と認識されることがある。スナップショットの作成が完了した時点でブロックは解除されるので、電源を切るなど早計な手段に出るべきではない。

スナップショット（副産物） 
Background fsckの副産物としてスナップショット機能がある。
スナップショットはmksnap_ffsコマンドで簡単に作成できる。
これは一つのファイルシステムに対していくつも作成することが出来るので、UFSの簡易バックアップ機構として用いることが出来る。
実際、この手法でバックアップを行うportが存在する。

参考文献 
 McKusick, M. (2002). Running "fsck" in the Background." Proceedings of the BSDCon 2002. 55-64.

外部リンク 
 Information about Soft Updates, Snapshots, and Back-ground Fsck
 FreeBSD UFS Snapshots Management Environment

OSのファイルシステム