玄箱+ハックキットでミラーリング(RAID 1)


前からやってみたかった、ミラーリング(RAID 1)を試す。

手元には、IDE の分岐ケーブルがあるし、
FUJITSU M1636TAU という 1.2GB の HDD が2つあるので、 これを用いて /mnt をミラーリングすることにする。

以下の作業では、 JF の The Software-RAID HOWTOを参考にした

1つ目のディスクの準備

まずは、
hda にハックキットの入った HDD を、
hdb にミラーリングする1台目の HDD を
接続する。

hdb のパーティションを切り、フォーマット、 動いている(汗)hda のハックキットをコピーする

パーティションを切る

[root@hackkit /root]# fdisk /dev/hdb

このディスクのシリンダ数は 2491 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
   (例. DOS FDISK, OS/2 FDISK)

コマンド (m でヘルプ): p

ディスク /dev/hdb: ヘッド 16, セクタ 63, シリンダ 2491
ユニット = シリンダ数 of 1008 * 512 バイト

 デバイス ブート   始点      終点  ブロック   ID  システム

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-2491, 初期値 1):
初期値 1 を使います
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-2491, 初期値 2491): +600M

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 2
最初 シリンダ (1221-2491, 初期値 1221):
初期値 1221 を使います
終点 シリンダ または +サイズ または +サイズM または +サイズK (1221-2491, 初期値 2491): +128M

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 3
最初 シリンダ (1482-2491, 初期値 1482):
初期値 1482 を使います
終点 シリンダ または +サイズ または +サイズM または +サイズK (1482-2491, 初期値 2491):
初期値 2491 を使います

コマンド (m でヘルプ): p

ディスク /dev/hdb: ヘッド 16, セクタ 63, シリンダ 2491
ユニット = シリンダ数 of 1008 * 512 バイト

 デバイス ブート   始点      終点  ブロック   ID  システム
/dev/hdb1             1      1220    614848+  83  Linux
/dev/hdb2          1221      1481    131544   83  Linux
/dev/hdb3          1482      2491    509040   83  Linux

コマンド (m でヘルプ): t
領域番号 (1-4): 2
16進数コード (L コマンドでコードリスト表示): 82
領域のシステムタイプを 2 から 82 (Linux スワップ) に変更しました

コマンド (m でヘルプ): p

ディスク /dev/hdb: ヘッド 16, セクタ 63, シリンダ 2491
ユニット = シリンダ数 of 1008 * 512 バイト

 デバイス ブート   始点      終点  ブロック   ID  システム
/dev/hdb1             1      1220    614848+  83  Linux
/dev/hdb2          1221      1481    131544   82  Linux スワップ
/dev/hdb3          1482      2491    509040   83  Linux

コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。
[root@hackkit /root]#

フォーマット

[root@hackkit /root]# mkfs -j /dev/hdb1
mke2fs 1.29 (24-Sep-2002)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
76960 inodes, 153712 blocks
7685 blocks (5.00%) reserved for the super user
First data block=0
5 block groups
32768 blocks per group, 32768 fragments per group
15392 inodes per group
Superblock backups stored on blocks:
        32768, 98304

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@hackkit /root]# mkfs -j /dev/hdb3
mke2fs 1.29 (24-Sep-2002)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
127512 inodes, 509040 blocks
25452 blocks (5.00%) reserved for the super user
First data block=1
63 block groups
8192 blocks per group, 8192 fragments per group
2024 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@hackkit /root]# mkswap /dev/hdb2
Setting up swapspace version 1, size = 131540K
[root@hackkit /root]#

マウント

[root@hackkit /root]# mkdir /tmp/root
[root@hackkit /root]# mount /dev/hdb1 /tmp/root
[root@hackkit /root]# mkdir /tmp/root/mnt
[root@hackkit /root]# mount /dev/hdb3 /tmp/root/mnt

コピー

[root@hackkit /root]# cd /
[root@hackkit /]# ls
bin  boot  dev  etc  home  initrd  lib  lost+found  mnt  opt  proc  root  sbin  tmp  usr  var  www
[root@hackkit /]# tar cf - bin boot dev etc home initrd lib nt opt root sbin usr var www |(cd /tmp/root; tar xvf -)
[root@hackkit /]# mkdir /tmp/root/proc
[root@hackkit /]# mkdir /tmp/root/tmp
[root@hackkit /]# chmod 1777 /tmp/root/tmp

1つ目のディスクからの起動確認

ミラーリングする1台目の HDD を hda にして、玄箱を再起動。
問題ないことを確認した。

2つ目のディスクの準備

hda にミラーリングする1台目の HDD を
hdb にミラーリングする2台目の HDD を
接続する。

1つ目のディスクとまったく同じようにパーティションを切り、 フォーマットする。

(略)

モジュールの作成

玄箱のソースコードを展開し、 make config で
*
* Multi-device support (RAID and LVM)
*
Multiple devices driver support (RAID and LVM) (CONFIG_MD) [N/y/?] y
 RAID support (CONFIG_BLK_DEV_MD) [N/y/m/?] m
  Linear (append) mode (CONFIG_MD_LINEAR) [N/m/?] n
  RAID-0 (striping) mode (CONFIG_MD_RAID0) [N/m/?] n
  RAID-1 (mirroring) mode (CONFIG_MD_RAID1) [N/m/?] m
  RAID-4/RAID-5 mode (CONFIG_MD_RAID5) [N/m/?] n
  Multipath I/O support (CONFIG_MD_MULTIPATH) [N/m/?] n
 Logical volume manager (LVM) support (CONFIG_BLK_DEV_LVM) [N/y/m/?] 
とする。

make dep
make modules
make modules_install
実行

モジュールの読み込み

[root@hackkit /root]# depmod -a
[root@hackkit /root]# insmod md
Using /lib/modules/2.4.17_kuro-box/kernel/drivers/md/md.o
[root@hackkit /root]# insmod raid1
Using /lib/modules/2.4.17_kuro-box/kernel/drivers/md/raid1.o
[root@hackkit /root]# lsmod
Module                  Size  Used by    Not tainted
raid1                  16372   0  (unused)
md                     53740   0  [raid1]

RAID TOOL のインストール

[root@hackkit /root]# apt-get install raidtools
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
  raidtools
0 個のアップグレードパッケージ, 1 個の新規パッケージ, 0 個の削除/リプレースパッケージ, 1 個の保留パッケージがあります。
取得パッケージ: 230kB のアーカイブを取得します。インストール後は 495kB が使用されます。
取得:1 http://www.t.ring.gr.jp 2.6/ppc/plus raidtools 1.00.2-1.3vl3 [230kB]
取得完了: 230kB を 0s (235kB/秒)
RPM コマンドを実行しています (-U)...
raidtools                   ##################################################
[root@hackkit /root]#

raidtab の作成

[root@hackkit /root]# cat /etc/raidtab
raiddev /dev/md0
        raid-level      1
        nr-raid-disks   2
        nr-spare-disks  0
        chunk-size      4
        persistent-superblock   1
        device  /dev/sda3
        raid-disk       0
        device  /dev/sdb3
        raid-disk       1
[root@hackkit /root]#

/mnt の umount

[root@hackkit /root]# umount /mnt

RAID の作成

mkraid を実行する
[root@hackkit /root]# mkraid /dev/md0
handling MD device /dev/md0
analyzing super-block
disk 0: /dev/hda3, 509040kB, raid superblock at 508928kB
/dev/hda3 appears to contain an ext2 filesystem -- use -f to override
mkraid: aborted.
(In addition to the above messages, see the syslog and /proc/mdstat as well
 for potential clues.)

[root@hackkit /root]# 
といわれたので、-R オプションを付加して再実行
[root@hackkit /root]# mkraid -R /dev/md0
DESTROYING the contents of /dev/md0 in 5 seconds, Ctrl-C if unsure!
handling MD device /dev/md0
analyzing super-blomd: md0: raid array is not clean -- starting background reconstruction
ck
disk 0: /dev/hda3, 509040kB, raid superblock at 508928kB
disk 1: /dev/hdb3, 506016kB, raid superblock at 505920kB
raid1: raid set md0 not clean; reconstructing mirrors
[root@hackkit /root]#
あれ?何で、サイズが違うの?まあいいか。
[root@hackkit /root]# cat /proc/mdstat
Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 hdb3[1] hda3[0]
      505920 blocks [2/2] [UU]
      [======>..............]  resync = 34.7% (176824/505920) finish=2.2min speed=2462K/sec
unused devices: 
[root@hackkit /root]#
同期している様子が見える。
[root@hackkit /root]# cat /proc/mdstat
Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 hdb3[1] hda3[0]
      505920 blocks [2/2] [UU]
      [================>....]  resync = 82.0% (415936/505920) finish=0.6min speed=2299K/sec
unused devices: 
[root@hackkit /root]#
やってる、やってる
[root@hackkit /root]# cat /proc/mdstat
Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 hdb3[1] hda3[0]
      505920 blocks [2/2] [UU]

unused devices: 
完了

フォーマット

[root@hackkit /root]# mkfs -j /dev/md0
mke2fs 1.29 (24-Sep-2002)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
126480 inodes, 505920 blocks
25296 blocks (5.00%) reserved for the super user
First data block=1
62 block groups
8192 blocks per group, 8192 fragments per group
2040 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

/mnt にマウント

/etc/fstab の
/dev/hda3      /mnt            ext3    defaults,noatime                0 0
/dev/md0        /mnt            ext3    defaults,noatime                0 0
に書き換え、
[root@hackkit /root]# mount /mnt
[root@hackkit /root]# df
ファイルシステム    1k-ブロック   使用中      空き 使用% マウント場所
/dev/hda1               605164    399532    174892  70% /
/dev/md0                492947      8239    459256   2% /mnt
OK

reboot

念のため reboot してみる。特に問題なし。

RAID に書いてみる

特に問題なし。
ハックの記録 → ramdisk.image のシュリンク(2)

Copyright (C) 2004 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp
山下康成京都府向日市