Tweet

CardBus 上の HDD から Linux を起動

EeePC を買って,VAIO U3 がお役ご免になってしまってかなり経つ. このまま放置しておくのももったいないので「Linux サーバにでもしようか」と思い立つ. Linux のディストリビューションは debian squeeze を使うことにする.

ストレージの接続

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 に置くことにする.

問題

予想していたのだけれど

root fs が mount できずに Linux が起動しない

という事態になる.

x86 PC 上での Linux の起動シーケンスは

  1. 電源投入
  2. BIOS
    1. grub をロード
  3. grub
    1. Linux カーネルと initramfs をロード
    2. initramfs 上で Linux を起動
  4. initramfs
    1. root fs に必要なドライバをロード
    2. root fs に pivot root
  5. 本起動

となっているが,initramfs の段階で「root fs が mount できない」ということで,起動処理が中断している.

VAIO U3 本体の USB 1.1 ポートに HDD を接続すれば(すごく遅いけど)起動はするので,

initramfs 上で CardBus カードを認識させればいい

というところまで対処は絞り込める.

initramfs-tools

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 まわりの処理もやってくれるようで. 追加で何かスクリプトを仕込まないといかんのか,と思ってたので,拍子抜けである.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-03-03 (土) 20:16:27 (2814d)