川俣吉広
EBUG 第29回会合 - 2009, 2/21

LiveCD河豚板のUSB boot対応

OpenBSD LiveCD「河豚板」は、 2008年末にUSBフラッシュメモリからの起動に対応しました。 現在、配布サイト*1では、 CD-ROM用、USBメモリ用の2つのイメージを公開しています。

今回は、このUSB boot対応の内容、および前回(2007年5月)の発表以降の状況などについて説明します。

発端

ebug members MLでの某氏の発言が発端

- 河豚板をCDドライブのないネットブックで動かしたいんだけど、USB boot対応できますかね?
- USBメモリがBIOSとOpenBSDカーネルの両方からHDDとして認識できてれば、OpenBSDを素でインストールしても動くんじゃないですかね?

で、やってみたところ、通常の方法でOpenBSDをインストール、起動できることを確認*2。 河豚板のUSB boot対応にとりかかりました。

河豚板のしくみ おさらい

今回のUSB boot対応の概要を理解するため、まず河豚板のブートの仕組みとファイルシステムの構成について概観してみます。

カーネル起動直後まで

BIOSによってブートローダ(CDの場合はEl Torito規格、HDDの場合はMBRから)が読み込まれ、続いて二次ローダ (/cdboot or /boot)が、最後に カーネル (/bsd)が起動します。
カーネル起動直後の河豚板のファイルシステム状態は以下のようになっています。

fuguita.gif
カーネル起動直後のファイルシステム(概要)

ルートファイルシステムとなっているrdデバイスはカーネル内にあらかじめ組込まれており、 カーネル起動と同時にルートにマウントされます。これはFDDインストーラなどで使われている技術です。

rdデバイスには、起動のために必須な必要最小限のコマンド、設定ファイルのみ収録されています。 また、容量低減のためこれらは単一のディレクトリ /boottmp に収められています。

このあと、通常のBSDの起動シーケンスにのっとり、/sbin/init が起動、つづいて /etc/rc が実行されます*3

/etc/rc (実際は、/boottmp/rc)は概ね、以下のような動作をします;

これらの初期化を終えたあと、/fuguita/etc/rc に制御を移します。これ以降はOpenBSDネイティブの処理が実行されます。
最終的に運用状態になった時点でのファイルシステムの状態は以下のようになります;

fuguita-op.gif
CENTER:運用状態でのファイルシステム(概要)

rdによるルートファイルシテムは引続き存在し、CD-ROMは、/fuguitaに、mfsは/mfsにマウントされます。 そして、これらのファイルツリーは通常のUnixのファイルツリーとしてアクセスできるようにするため、シンボリックリンクが張られ(まくり)ます。 特に、/usr以下はシンボリックリンクが2段階で張られています。例えば、/usr/bin/viにアクセスする場合は、

        /usr/bin/vi
         ↓
    /mfs/usr/bin/vi
                 ↓
/fuguita/usr/bin/vi

というようにリンクが辿られます。

なぜこのようなややこしいことをするのか? それは、「/usr以下をread onlyにせず、ファイルの置き換えを 可能にすることによって、securityアップデートやports/packagesの追加を可能にするため」です。
LiveCDの場合、通常このような機能は「スタッカブルファイルシステム」などを使うことによって実現しますが、 OpenBSDではスタッカブルファイルシステムは実装されていないため、河豚板では今述べたような方法を採用しています。

また、/mfs以下の大半をシンボリックリンクで置き換えることで、 /mfs以下の内容を保存する場合に必要なファイル容量も大幅に低減することができています。

変更作業

まず、冒頭の「発端」でも触れたように、OpenBSDを通常のインストーラを用いて USBメモリにインストール*4し、起動試験を行ってみました。

ネット上の情報を調べたところ、USB bootをサポートするBIOSであっても、ストレージデバイスをHDDとして認識するものと、 Removable Diskとして認識するものがあり、後者の場合はUSBデバイスに通常のインストールを行った OpenBSDは起動できないようであることが判明しました。
起動が不可能な場合、二次ローダが出力するプロンプト boot> も出力されません。 このことからも、やはりBIOSがMBRを読み込めていない(=HDDとして認識していない)可能性が高いと推測されます。

どうやらUSB boot機能は、CD-ROMでのEl Torito規格のような互換性の高い標準規格は採用されていない場合も時々あるようです。

とりあえず、河豚板のUSB boot対応は、前者のBIOSを対象として実施することとしました;

実際の変更箇所は、初期化の大部分を担当する /boottmp/rc に集中しました。

「発端」となったMLでのやり取りは 2008年11月30日、USB対応版のリリースは12月11日のFuguIta-4.4-200812111にて行われました。

2007年5月以降の河豚板の主な状況

リリース状況 (括弧内の数字は、security fix対応などのマイナーリリース回数)

最後に

河豚板はKnnopixやSlax、あるいはFreeSBIEのようなメジャーなLiveCDのような 判り易く綺麗な外観は持っておりませんが、OpenBSD自身が持つ機能はほぼ全て盛り込んでいます。 そのため、HDDへの通常インストールと同じ感覚で使用できます。

また、追加でインストールされている各種パッケージを組み合わせると、 色んな技を試せます。例えば、

などなど…。ぜひ一度お試しください。

ご質問、バグレポート、ご要望などございましたら、kaw@on.rim.or.jp までお知らせください。 また、mixiのOpenBSDコミュニティにも、河豚板トピックを開設しています。


*1 http://kaw.ath.cx/dl/pub/OpenBSD/LiveCD/ , http://livecd-mirror.ebug.jp/LiveCD/
*2 某氏はFreeBSDでも追試
*3 実際にはそれぞれ、/boottmp/init , /boottmp/rc
*4 OpenBSDからは、SCSIディスクとして見える

Front page   New Page list Search Recent changes   Help   RSS of recent changes