川俣吉広
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 が実行されます。

/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メモリにインストール*3し、起動試験を行ってみました。

ネット上の情報を調べたところ、USB bootをサポートするBIOSであっても、ストレージデバイスをHDDとして認識するものと、 Removable Diskとして認識するものがあり、後者の場合はUSBデバイスに通常のインストールを行った OpenBSDは起動できないようであることが判明しました。
とりあえず、河豚板のUSB boot対応は、前者のBIOSを対象として実施することとしました;

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

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

2007年5月以降の河豚板の主な変更点


*1 http://kaw.ath.cx/dl/pub/OpenBSD/LiveCD/ , http://livecd-mirror.ebug.jp/LiveCD/
*2 神保氏はFreeBSDでも追試
*3 OpenBSDからは、SCSIディスクとして見える

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