DebianでSATA RAIDを組むの巻(12)

なんということだろう。dmraidの静的リンクがコンパイルできなくて途方に暮れていたところ、ふと本家を見てみると、なんとrpmなら静的リンク版のパッケージがあるではないか。ということで、早速拝借。パッケージを展開してバイナリだけ抜き取る。

# rpm2cpio dmraid-1.0.0-rc5f_static.i386.rpm | cpio -d

そしてinitrdに組み込む。Debianのinitrdは、デフォルトではcramfsという読み取り専用のファイルシステムで作成されるのでそのままではマウントしてもinitrdに書き込めない。そのため、これをext2に変えて作成する。修正するのは/etc/mkinitrd/mkinitrd.confの以下の部分。

MKIMAGE='mkcramfs %s %s > /dev/null'
  ↓
MKIMAGE='mkext2fs %s %s > /dev/null'

mkext2fsっていうのはコマンドではなくてスクリプトcramfs以外のファイルシステムで作成する方法を探していてここを発見。cramfsの変わりにext2で作成できる。一応全文引用。

#!/bin/bash
# similar to mkcramfs (for use with debian mkinitrd)
# mkext2fs dirname outfile
# 
# no options are parsed
#
# 	Written by: Fabian Franz <mkext2fs@fabian-franz.de>
#
# GPL v.2 - See: `locate gpl.txt`

if [ $# -lt 2 ]
then
  echo "Usage: $(basename $0) dirname outfile"
  exit 1
fi

TMPDIR=/tmp/$(basename $0).$$
mkdir $TMPDIR
function clean_exit
{
  umount $TMPDIR 2>/dev/null
  rm -rf $TMPDIR
}

trap clean_exit EXIT

COUNT=$[$(du -s $1 | awk '{ print $1 }' )*2+1000]
dd if=/dev/zero of=$TMPDIR/image count=$COUNT
mke2fs -F $TMPDIR/image
mount -o loop $TMPDIR/image $TMPDIR
cp -a $1/* $TMPDIR
umount $TMPDIR
cat $TMPDIR/image | gzip - > $2

これでmkinitrdを実行。出来上がったinitrdはgzipされているので、解凍してからマウントして確認する。ここで若干ハマった。

# mkinitrd -o /boot/initrd.img-2.6.11-rc3 2.6.11-rc3

よし。これでdmraidをinitrdに組み込める。という面白いところで、さすがに眠いのでおやすみなさい。

追記:
できない〜。。。この方法で作ったinitrdだとkernel panicってしまう。エラーはよくある、

VFS: Cannot open root device "hda2" ...

というやつ。特にgrubのrootが間違っているわけでもなく、そもそも同じカーネルでinitrdだけ違うものを使うと起動しなくなるから、initrdの何かが違うんだろうけど。
はぁ、、、疲れた...

追記2:
あぁ、典型的なミスでした。。。orz
ATA-IDE系がモジュールとしてコンパイルされていたからダメだったみたい。これに気がつくのにいったい何時間費やしたのか、もったいない。とか言いながら、kernelコンパイルに時間かかり過ぎてちょっと寝てしまったのだが...