[[PageNavi(internal24-navi)]]
{{{ comment
h2w-title:ファイルシステムのマウントとアンマウント
}}}
= ファイルシステムのマウントとアンマウント = #SECTION0310180000000000000000
ファイルシステムのマウント処理は、vfs do_mount関数が行う。この関数は、各個別ファイルシステムが用意しているread_superオペレーションを利用してスーパブロックを読み込む。それが成功すると、マウントテーブルに登録する(add_vfsmnt関数)
{{{
do_mount(デバイス名、マウントポイント, ファイルシステムタイプ, ...)
:
マウントするデバイスのスーパブロックを読み出す(read_super関数)
(ファイルシステムタイプ毎に用意されているread_superオペレーションを実行)
:
マウントテーブルに登録(add_vfsmnt関数)
get_sb_single
}}}
ext2ファイルシステムでは、read_superオペレーションは、下記ext2_read_super関数である。
{{{
ext2_read_super()
バッファにスーパブロックを読み出す(bread関数)
メモリ上のスーパブロックと上記バッファをリンク
ブロックディスクリプタテーブルを全て読み込む(bread関数)
読み込んだブロックディスクリプタテーブルをメモリ上のスーパブロックにリンク
iノードとブロックのビットマップ登録域の初期化
スーパブロックにオペレーション(ext2_sops)を登録
スーパブロックを使える状態にする(ext2_setup_super関数)
ext2_setup_super()
if (前回umountせずにシステムが落ちた ||
ファイルシステムにエラーが発生している ||
マウント回数が20回を超えた ||
最後にfsckしてから6ヶ月以上経っている)
"e2fsckコマンドを実行せよ" とメッセージ出力
スーパブロックのステータスフラグからVALIDビットを落す。
◇スーパブロックの遅延書き込み要求(mark_buffer_dirty)
}}}
ファイルシステムのマウント解除処理は、vfs do_umount関数が行う。この処理では、スーパブロックに登録されているオペレーションを続けて三つ呼び出す。マウントテーブルからの登録抹消は、do_umount関数呼び出し側で行う。
rootファイルシステムのアンマウントに限り、リードオンリーで再マウントする(do_remount_sb関数)ようになっている。
{{{
do_umount(vfsmount構造体、 ...)
if(rootファイルシステムなら) {
リードオンリーで再マウントする(do_remount_sb関数)
return;
}
スーパブロックのumount_beginオペレーション実行
このファイルシステム上のキャッシュをディスクに書き込む(fsync_dev関数)
マウントの解除(remove_vfsmnt関数)
スープブロック情報をディスクに書き戻す(kill_super関数)
(スーパブロックのwrite_superオペレーション,
スーパブロックのput_superオペレーション実行)
このファイルシステム用のiノードの無効化(invalidate_inodes関数)
}}}
ext2ファイルシステムでは、umount_beginオペレーションはNULL、write_superオペレーションは、ext2_write_super関数、put_superオペレーションは、ext2_put_super関数が登録されている。
{{{
ext2_write_super(スーパブロック)
スーパブロックの最終書き込み時間の更新
◇スーパブロックが読み込まれているバッファの遅延書き込み要求(ext2_commit_super関数)
スーパブロックのDirtyビットのクリア
ext2_put_super(スーパブロック)
スーパブロックのステータスフラグにVALIDを立てる
◇スーパブロックの遅延書き込み要求(mark_buffer_dirty関数)
ブロックディスクリプタテーブルを読み込んでいたバッファ域を解放
iノードとブロックのビットマップを読み込んでいた領域を解放
スーパブロックを読み込んでいたバッファ域を解放
}}}
'''問題点など'''
1. SYNCモードのマウントの時でも、マウント処理/アンマウント処理時の スーパブロックの更新が遅延書き込みになっている。 スーパブロックが書き込まれる前に、iノードやフリービットマップ の方が先に更新され、その直後にシステムクラッシュすると、 ディスク上のスーパブロックにはVALIDビットが立っているため、 fsck(e2fsck)は正常なファイルシステムと認識し、ファイルシステムの 修復を行わない。
1. 20回以上マウントしたり、fsckせずに6ヶ月以上運用を続けていると、 fsckを促すメッセージを出す作りになっている。
----
''(NIS)HirokazuTakahashi [[BR]]2000年12月09日 (土) 23時55分06秒 JST''1
[[PageNavi(internal24-navi)]]