スーパーブロック (ファイルシステム)
From Wikipedia, the free encyclopedia
例としてLinuxを挙げる。Linuxのファイルシステムは、スーパーブロック、inodeブロック、「ディレクトリ管理ブロック」など階層的なブロック構造を持っている[3][4]。これらはファイルシステム全体が持つinodeの総数やinodeの残数やファイルシステムのサイズなどファイルシステムの基本的情報が格納されている。また仮想ファイルシステム(VFS)はユーザが使用するファイルシステムとは別個に先述のブロック情報を保持している[5]。Linuxシステム起動時のファイルシステムマウント(mountコマンド)やファイルシステムからのファイル読み出しのためには、まずルートディレクトリ("/")の inode情報が必要となるが、その情報はスーパーブロックに書かれている。ルートディレクトリ以下のディレクトリはその一つ上のディレクトリにinodeブロックが存在するので、順次それを呼び出してゆけば、最後には目的のファイルのinodeが発見できアクセス可能となる[6]。ソフトウェアRAIDをストレージに持つシステムの場合、上記と同様ファイルシステムのマウントのためマルチデバイスに関する情報が必要となる。その情報はRAIDに使用するブロックデバイスのスーパーブロックに書き込まれる[7]。とりわけこのようなスーパーブロックをパーシステント・スーパーブロック(英: Persistent superblock、永続的スーパーブロック)という[7][8][9]。RAIDアレイを初期化した場合はこの情報は全てのアレイ構成ディスクのスーパーブロックから消去される。
ファイルシステムが破損した場合は通常fsckコマンドを使い、スーパーブロックの(inodeやディレクトリの)情報とファイルシステム自体の情報とが比較され、整合性が保たれるように自動修復もしくは手動で修復できる[10]。しかしこの修復処理はディスク容量が大きくなった場合にかかる時間が大きくなる。このため近年ではファイルシステムの修復にはジャーナルが使用される。ジャーナリングファイルシステムはファイルシステムの修復処理を高速化する仕組みであり、簡単に述べるとスーパーブロック等のメタデータの更新の際に事前にジャーナルのログを更新する。これによりファイルシステム破損時に直接スーパーブロックと実データを比較する必要はなくなる[2]。しかし、ジャーナリングファイルシステムでもメタデータの破損を回避できるわけではない。万が一スーパーブロックが破壊されたまたは読み出し不能となった場合、予備のスーパブロックを保持している場合はmkfs[注釈 1]とfsck[注釈 2]コマンドを組み合わせて復旧させることが可能である。仮にスーパーブロックが存在しなかった場合でも即時作成することが可能である。
OSはファイルシステムのスーパーブロックを常時更新する(よってなんらかの障害が発生した場合、スーパーブロックが破損する可能性がある)。メモリ上に更新したスーパーブロックのデータバッファが存在する場合は、syncコマンドで即座に書き込める[11]。