katsuhiro -> katsu/hostfs
SBUML + SoftwarePot の仕事†
hostfs というファイルシステムを拡張することで、ファイル単位でのマウントを可能にする。またポリシーに従ってマウントの許可/拒否を行う。
現在の仕事†
- ファイル単位のマウントはファイルに変更が起こらなければ問題ない。
- ゲストから write したときの問題点。
- ゲスト側でファイルを書き換えても、正常に書き換わらない。「書き込む前≧書き込んだ後」というサイズ関係だと、前の内容まで見えてしまう。
- 例:abcde を ABC で上書きしても cat したとき ABCde に見える。
- read ahead キャッシュを無効にすることで解決した。
- しかし host 側で更新した場合(guest 側の inode が更新されない)場合は、おかしくなる。
ホストからの変更が反映されない問題†
ホスト側でファイルを更新すると、ゲスト側 iノードが持っている情報(特にファイルサイズ)がホスト側と食い違うため、追加部分が読めなかったり、削除された部分を読んでしまいゴミが見えてしまったりする。
- 問題点は以下の通り。
- ディレクトリ単位でマウントする場合、ディレクトリ内のファイルの iノードを作成、保持する役目は、hostfs が担う。hostfs はディレクトリ内のファイルの iノードを、ホストから読んで丸投げするため、ホストで変更があっても次回の読み込み時に反映される。よって情報の食い違いが起きない。
- ファイル単位でマウントする場合、ファイルの iノードは hostfs が生成するが、ゲスト側カーネルが保持する。ゲスト側カーネルには iノードが作成された時点(マウント時)の情報が残る。従ってキャッシュの期限が切れるまで、iノードは更新されず、情報の食い違いが起きる。
この問題に対する解決案。
- ファイル単位でマウントする以上、iノードの管理は hostfs には回ってこない。従って VFS の一部を書き換える方法が考えられる。
- ただ、ファイルシステムに依存しないことが売りの VFS にファイルシステム依存のコードを加えるのは、あまり良くない。
現在判明している問題点†
- ポリシーファイルの場所を指定する方法が確立されていない。
- 自動的にマウントする機構があるが、イマイチな感が否めない。
- ホストからの更新が、ゲスト側の i ノードに反映されない。
過去の仕事†
- ポリシーファイルのデモを作った。
- ミーティングの要求とは異なるが mount 時の拒否ができるようにした。
- ポリシーファイルの場所を指定する方法が確立されていない。
- ポリシーファイル(?)に従って自動的にマウントするデモを作成した。
- SBUML とのマージに向けて、SBUML に当てる diff パッチを作ろう。
- びしっと動くバージョンが出来たら、パッチを作ろう。