[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:16411] Plamo-3.0 on Software-RAID



笠井@実験室です。

「Plamo-3.0をRAID1をルート・パーティションとして、/dev/hda、/dev/hdbどちらからでも起動する環
境」

を構築してみました。
以下は、自分でやってみたときのメモ書きです。
かなり乱暴な書き方ですが、参考になるでしょうか?

1.作業ディレクトリを /isoimage とし、この下に Plamo-3.0 のインストールCDから isolinux 以下
だけをもらってくる。このディレクトリが新しいCDイメージの元となります。

2.initrd イメージを作業用に展開する
/isoimage/isolinux 以下にある initrd ファイルに対して、

losetup /dev/loop0 initrd
mount /dev/loop0 /mnt
mkdir /initrdroot
cd /mnt
cp -a . /initrdroot
losetup -d /dev/loop0

これで /initrdroot 以下に展開された。

3.initrd イメージに raidtools を加える
PLD Linux Distribution から
ftp://ftp.pld.org.pl/dists/1.0/PLD/i386/PLD/BOOT/raidtools-0.90.19990824-7.i386.rpm
を拾ってきて、initrd に展開する。
rpm -i --root=/initrdroot raidtools-0.90.19990824-7.i386.rpm
を実行することで展開される。

本当は自分で構築したかったんだが、uClibc 環境でのコンパイルがどうしてもうまくいかなくて……。
(raidtools は Slackware 8.1 の initrd にも含まれています。uClibc 環境なので、使えるんじゃな
いだろうか?)

4.kernelをRAIDを有効にして作り直して vmlinuz として /isoimage/isolinux 以下に置く。
この際、ついでに最新の 2.4.19 を使用。
/isoimage/isolinux/config を /usr/src/linux/.config として使い、RAID を有効にする。
modules は、/initrdroot/lib/modules 以下に置く。(古いモジュールは削除する)

5./initrdroot/sbin/probe を修正し、RAID パーティションを認識するようにする。
いちばん下に patch を書いておきますが、「動けばいいや!」っていういい加減なパッチです。

6.initrd.gz を作り、/isoimage/isolinux 以下に置く。
initrd.gz を作る手順はこんな感じ。(オリジナルよりかなり大きいですが、ブートできました)

dd if=/dev/zero of=initrd bs=8388608 count=1
losetup /dev/loop0 initrd
mke2fs /dev/loop0 -N 2048
mount /dev/loop0 /mnt
cd /initrdroot
cp -a * /mnt
umount /mnt
gzip initrd

7.ここは別マシンで作業。
既にインストールされたイメージをtar+gzipで固めて、ftp などで /isoimage 以下にコピーする。
これで RAID対応のリカバリーCDとして使えるわけです。
ブートローダは grub でなければなりません。

私はPlamo-3.0 のおすすめインストール(約1GB)を丸ごと固めてみました。(圧縮後は350MB)
RAIDの作成が多少面倒ですが、tar+gzipで固める前に以下の作業をしておくと楽です。

・/etc/raidtab を作っておき、
・/etc/fstab の / を /dev/md0 にマウントするようにし、
・/etc/grub.conf では root=/dev/md0 としておく。
・/boot/grub/menu.lst -> /etc/grub.conf のリンクを張っておく

ついでに /root あたりに、grub のインストールスクリプトを置いておく。
ファイル名は raid1.grub とでもしておく。(下記)

#!/bin/sh
/usr/sbin/grub --batch <<EOF
device (hd0) /dev/hda
root (hd0,0)
install /boot/grub/stage1 (hd0,0) /boot/grub/stage2 0x8000 (hd0,0)/boot/grub/menu.lst
install /boot/grub/stage1 d (hd0) /boot/grub/stage2 0x8000 (hd0,0)/boot/grub/menu.lst

device (hd0) /dev/hdb
root (hd0,0)
install /boot/grub/stage1 (hd0,0) /boot/grub/stage2 0x8000 (hd0,0)/boot/grub/menu.lst
install /boot/grub/stage1 d (hd0) /boot/grub/stage2 0x8000 (hd0,0)/boot/grub/menu.lst

quit
EOF

8.CD-Rに焼きます。
/ にて

/opt/schily/bin/mkisofs -R -v -J -o isoimage.iso -b isolinux/isolinux.bin -c 
isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table isoimage

を実行し、できた isoimage.iso を焼けば良いわけです。

これで /dev/hda1 と /dev/hdb1 を RAID1 で /dev/md0 とした「限定された」環境にインストールする
準備ができます。

Plamo-3.0 インストールCDを作るには、パッケージ中の kernel を RAID 対応にしなければならないが、
やってみたらどうなるだろう?(一応、今のところ成功していません)

9.インストールする
 CD-Rブートして、HDD のパーティションを切る
 RAID1 の設定をしてマウントしておく。
 /mnt を対象のルート・パーティションになるようにする。

mount /cdrom
cd /cdrom
tar pzxf image.tgz -C /mnt

 これで元のイメージが展開されます。
 pオプションは重要です。パーミッション情報を元通りにしてくれます。

10.grub をインストールする
/root 以下に置いた raid1.grub を実行する。

11.マウントをすべて解除して再起動
というわけで、Plamo-3.0 を RAID1 をルート・パーティションとして、
/dev/hda、/dev/hdb どちらからでも起動する環境ができあがりました。
今、手元で元気に動いてます。



以下、probe へのいいかげんなパッチ
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
--- probe	2001-06-03 04:50:47.000000000 +0900
+++ probe	2002-11-06 12:53:24.000000000 +0900
@@ -5,6 +5,11 @@
 TMP=/var/log/setup/tmp
 rm -f $TMP/SeTfdisk
 
+# list raid major=9 minor=0..15 by H.Kasai
+list_raid() {
+	echo "/dev/md$1              0         0 $2   83  Linux RAID (Dummy)"
+}
+
 # listide major minor hd1 hd2 (2 base devs for major)
 list_ide() {
   if [ "$2" = "0" ]; then
@@ -56,15 +61,18 @@
   fi
 }
 
-if cat /proc/partitions | grep / 1> /dev/null 2> /dev/null ; then # new
-  cat /proc/partitions | grep / | while read line ; do
+if cat /proc/partitions 1> /dev/null 2> /dev/null ; then # new
+  cat /proc/partitions | while read line ; do
     SMASHED_LINE=$line
     MAJOR=`echo $SMASHED_LINE | cut -f 1 -d ' '`
     MINOR=`echo $SMASHED_LINE | cut -f 2 -d ' '`
+    MDBLOCKS=`echo $SMASHED_LINE | cut -f 3 -d ' '`
     if [ "$MAJOR" = "3" ]; then
       list_ide $MAJOR $MINOR hda hdb
     elif [ "$MAJOR" = "8" ]; then
       list_scsi $MINOR
+    elif [ "$MAJOR" = "9" ]; then
+	  list_raid $MINOR $MDBLOCKS
     elif [ "$MAJOR" = "22" ]; then
       list_ide $MAJOR $MINOR hdc hdd
     elif [ "$MAJOR" = "33" ]; then
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

===========================
笠井 宗
http://www.heart-pot.co.jp/


[検索ページ] [メール一覧]
Plamo ML 公開システム