* CardBus 上の HDD から Linux を起動 [#j221f05b]
EeePC を買って,[http://www.vaio.sony.co.jp/Products/PCG-U3/ VAIO U3] がお役ご免になってしまってかなり経つ.
このまま放置しておくのももったいないので「Linux サーバにでもしようか」と思い立つ.
Linux のディストリビューションは debian squeeze を使うことにする.
** ストレージの接続 [#o348be00]
USB HDD --(USB 2.0)-- I/Fカード --(CardBus)-- VAIO U3
(swap, /) |
内蔵 HDD (/boot)
VAIO U3 本体の USB インターフェースは USB 1.1 なので,CardBus スロットに USB 2.0 インターフェースカードを刺し,そこに HDD を接続することにする.
また,BIOS が USB ストレージからの起動に対応していないので,起動ファイルだけは内蔵 HDD に置くことにする.
** 問題 [#yfe7dfcb]
予想していたのだけれど
> root fs が mount できずに Linux が起動しない
という事態になる.
x86 PC 上での Linux の起動シーケンスは
+ 電源投入
+ BIOS
++ grub をロード
+ grub
++ Linux カーネルと initramfs をロード
++ initramfs 上で Linux を起動
+ initramfs
++ root fs に必要なドライバをロード
++ root fs に pivot root
+ 本起動
となっているが,initramfs の段階で「root fs が mount できない」ということで,起動処理が中断している.
VAIO U3 本体の USB 1.1 ポートに HDD を接続すれば(すごく遅いけど)起動はするので,
> initramfs 上で CardBus カードを認識させればいい
というところまで対処は絞り込める.
** initramfs-tools [#l78bc608]
initramfs イメージを展開して手でいじってもいいのだけれど,パッケージアップデートが入る度に変更が元に戻されてしまうことになる.
そこで,initramfs イメージを生成している initramfs-tools を設定することにする.
man initramfs-tools を読むが,いまいちピンと来ない.
そこで,とりあえず,PC カードスロットのドライバ(pcmcia_core, pcmcia, yenta_socket)を組み込むことにする.
以下のような /etc/initramfs-tools/hooks/cardbus ファイルを作成する.
#!/bin/sh
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
# Begin real processing below this line
force_load pcmcia_core
force_load pcmcia
force_load yenta_socket
exit 0
で,initramfs イメージを作り直す.
# update-initramfs -u
そして,再起動をかけると… ありゃ,あっけなく認識してしまった.
最近では initramfs 上でも udev が動いていて,hotplug まわりの処理もやってくれるようで.
追加で何かスクリプトを仕込まないといかんのか,と思ってたので,拍子抜けである.