スーパーブロック (ファイルシステム)
スーパーブロック(英: Superblock, Super block)とはファイルシステムの論理パーティションを管理するためのメタデータである[1][2]。主にUnix系OSなどで利用される[1]。以下の通り、スーパーブロックはシステム起動時にブロックデバイスのファイルシステムを認識するための重要な手がかりとなる。
Linux
編集例として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]。
その他
編集その他Unix系OSでも実装は異なるが、同様の方針でファイルシステムにスーパーブロックを構成しているものがある[12][13]。
脚注
編集注釈
編集- ^ ext3やext4の場合、"-n"オプションとファイルシステムを引数に実行するとスーパーブロックのバックアップが存在するブロックアドレスとブロックサイズが分かる。 北浦訓行 (2005年4月21日). “壊れたパーティションを修復するには”. アットマーク・アイティ. www.atmarkit.co.jp. 2011年8月10日閲覧。
- ^ ext3やext4では"-b"オプションでスーパーブロックのブロックアドレスを指定するとそのスーパブロックを読んでからファイルシステムのチェックが可能となる。 北浦訓行 (2005年4月21日). “壊れたパーティションを修復するには”. アットマーク・アイティ. www.atmarkit.co.jp. 2011年8月10日閲覧。
出典
編集- ^ a b “ファイルシステムの構造”. stwww.eng.kagawa-u.ac.jp. 2011年8月10日閲覧。
- ^ a b 菅谷みどり (2003年7月29日). “Linuxファイルシステム技術解説 - 第3回 ジャーナリングファイルシステムが保護する「情報」”. アットマーク・アイティ. www.atmarkit.co.jp. 2011年8月11日閲覧。
- ^ M. Tim Jones (2007年10月30日). “Linux ファイルシステムの徹底調査”. IBM. www.ibm.com. 2011年8月10日閲覧。
- ^ 森崇 (2010年3月2日). “素晴らしきファイルシステムのデータ管理 (1/2)”. アットマーク・アイティ. monoist.atmarkit.co.jp. 2011年8月10日閲覧。
- ^ David A Rusling (1999年1月25日). “The Linux Kernel: ファイルシステム”. David A Rusling、Linux JF Project. linuxjf.sourceforge.jp. 2011年8月10日閲覧。
- ^ Greg O'Keefe (2000年). “From Power Up To Bash Prompt”. Greg O'Keefe、千旦裕司. linuxjf.sourceforge.jp. 2011年8月10日閲覧。
- ^ a b “Boot time assembly of RAID arrays”. git.kernel.org. 2011年8月10日閲覧。
- ^ “md: nonpersistent superblock ...”. OSS Message Pedia. ossmpedia.org. 2011年8月11日閲覧。
- ^ Jakob Østergaard. “4.7 The Persistent Superblock”. Jakob Østergaard、笠井宗. linuxjf.sourceforge.jp. 2011年8月11日閲覧。
- ^ 菅谷みどり (2003年6月24日). “Linuxファイルシステム技術解説 - 第2回 ブロックアルゴリズムとB-Treeアルゴリズム”. アットマーク・アイティ. www.atmarkit.co.jp. 2011年8月11日閲覧。
- ^ “Manpage of SYNC”. linuxjm.sourceforge.jp. 2011年8月10日閲覧。
- ^ Solaris, UFSの例。 “Solaris のシステム管理 (第 1 巻) - スーパーブロック”. Oracle. download.oracle.com. 2011年8月11日閲覧。
- ^ AIX, JFSの例。 “JFS ファイルシステムの配置”. IBM. publib.boulder.ibm.com. 2011年8月11日閲覧。