debian 化(33)標準ファームによる RAID 化

LS-WSGL/R1

残っている課題を一つづつ潰していく。
最後の標準ファームによる RAID 化
標準ファームだと sdb を交換したら自動的に md0, md1, md10 を リビルドしてくれるが、 ハックキットだと sdb を交換してもリビルドしてくれない。

このあたり、標準ファームをそのまま使っているんだがなぁ。。。

スクリプトを読む

/initrd/linuxrc やら /initrd/usr/local/lib/libmd やらを 読んでみたが、、、、よくわからない。
どこでリビルドされてるんだ?

再現

sdb に新品の HDD を接続、 標準ファームでどのようにリビルドされるのかを 再度確認する。

接続するのは、先日エラーが出た ST3250 。
故障を確認しようと別のマシンにつないだが、普通に動いている。
なんだったの?

パーティションのない HDD を接続して起動

この時点では、RAID1 の片側だけで動作している。
root@LS-WSGL678:~# cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 sda2[0]
      5004160 blocks [2/1] [U_]

md10 : active raid1 sda5[0]
      1003904 blocks [2/1] [U_]

md0 : active raid1 sda1[0]
      1003904 blocks [2/1] [U_]

unused devices: 
root@LS-WSGL678:~# 1

パーティションを切る

sdb の ST3250 にパーティションを切る。
まずは sda をカンニング
root@LS-WSGL678:~# fdisk -l /dev/sda

Disk /dev/sda: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1         125     1004031   83  Linux
/dev/sda2             126         748     5004247+  83  Linux
/dev/sda4             749       30401   238187722+   5  Extended
/dev/sda5             749         873     1004031   82  Linux swap
/dev/sda6             874       30295   236332183+  83  Linux
root@LS-WSGL678:~#
sdb に同様のパーティションを切る。
oot@LS-WSGL678:~# fdisk /dev/sdb

The number of cylinders for this disk is set to 30401.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-30401, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-30401, default 30401): 125

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (126-30401, default 126):
Using default value 126
Last cylinder or +size or +sizeM or +sizeK (126-30401, default 30401): 748

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Partition number (1-4): 4
First cylinder (749-30401, default 749):
Using default value 749
Last cylinder or +size or +sizeM or +sizeK (749-30401, default 30401):
Using default value 30401

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (749-30401, default 749):
Using default value 749
Last cylinder or +size or +sizeM or +sizeK (749-30401, default 30401): 873

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (874-30401, default 874):
Using default value 874
Last cylinder or +size or +sizeM or +sizeK (874-30401, default 30401):
Using default value 30401

Command (m for help): t
Partition number (1-6): 5
Hex code (type L to list codes): 82
Changed system type of partition 5 to 82 (Linux swap)

Command (m for help): p

Disk /dev/sdb: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         125     1004031   83  Linux
/dev/sdb2             126         748     5004247+  83  Linux
/dev/sdb4             749       30401   238187722+   5  Extended
/dev/sdb5             749         873     1004031   82  Linux swap
/dev/sdb6             874       30401   237183628+  83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
SCSI device sdb: 488397168 512-byte hdwr sectors (250059 MB)
sdb: Write Protect is off
SCSI device sdb: drive cache: write back
/sbin/hotplug [block]
/sbin/hotplug [block]
/sbin/hotplug [block]
/sbin/hotplug [block]
/sbin/hotplug [block]
/sbin/hotplug [block]
/sbin/hotplug [block]
/sbin/hotplug [block]
/sbin/hotplug [block]
/sbin/hotplug [block]
SCSI device sdb: 488397168 512-byte hdwr sectors (250059 MB)
sdb: Write Protect is off
SCSI device sdb: drive cache: write back
/sbin/hotplug [block]
/sbin/hotplug [block]
/sbin/hotplug [block]
/sbin/hotplug [block]
/sbin/hotplug [block]
Syncing disks.
root@LS-WSGL678:~#

フォーマットする

sdb1 を ext3 に、
root@LS-WSGL678:~# mkfs.ext3 -j /dev/sdb1
mke2fs 1.27 (8-Mar-2002)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
125696 inodes, 251007 blocks
12550 blocks (5.00%) reserved for the super user
First data block=0
8 block groups
32768 blocks per group, 32768 fragments per group
15712 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

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

This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
root@LS-WSGL678:~#
sdb2 と sdb6 とを ext3 にフォーマットした後に xfs に、
root@LS-WSGL678:~# mkfs.ext3 -j /dev/sdb2
mke2fs 1.27 (8-Mar-2002)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
626496 inodes, 1251061 blocks
62553 blocks (5.00%) reserved for the super user
First data block=0
39 block groups
32768 blocks per group, 32768 fragments per group
16064 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

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.
root@LS-WSGL678:~# mkfs.ext3 -j /dev/sdb6
mke2fs 1.27 (8-Mar-2002)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
29655040 inodes, 59295907 blocks
2964795 blocks (5.00%) reserved for the super user
First data block=0
1810 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Writing inode tables: done
Creating journal (8192 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@LS-WSGL678:~# mkfs.xfs /dev/sdb2
mkfs.xfs: /dev/sdb2 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
root@LS-WSGL678:~# mkfs.xfs -f /dev/sdb2
meta-data=/dev/sdb2              isize=256    agcount=8, agsize=156383 blks
         =                       sectsz=512
data     =                       bsize=4096   blocks=1251061, imaxpct=25
         =                       sunit=0      swidth=0 blks, unwritten=1
naming   =version 2              bsize=4096
log      =internal log           bsize=4096   blocks=2560, version=1
         =                       sectsz=512   sunit=0 blks
realtime =none                   extsz=65536  blocks=0, rtextents=0
root@LS-WSGL678:~# mkfs.xfs -f /dev/sdb6
meta-data=/dev/sdb6              isize=256    agcount=57, agsize=1048576 blks
         =                       sectsz=512
data     =                       bsize=4096   blocks=59295907, imaxpct=25
         =                       sunit=0      swidth=0 blks, unwritten=1
naming   =version 2              bsize=4096
log      =internal log           bsize=4096   blocks=28953, version=1
         =                       sectsz=512   sunit=0 blks
realtime =none                   extsz=65536  blocks=0, rtextents=0
root@LS-WSGL678:~#
sdb5 を swap にフォーマットする。
root@LS-WSGL678:~# mkswap /dev/sdb5
Setting up swapspace version 1, size = 1028120576 bytes
root@LS-WSGL678:~#

リブート

準備ができたので、リブートする。
	:
	:
BUFFALO INC. LinkStation series
LS-WSGL678 login: root
BuffaloSwPollingCheck> SW_POWER_ON
root@LS-WSGL678:~# cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 sdb2[2] sda2[0]
      5004160 blocks [2/1] [U_]
        resync=DELAYED

md10 : active raid1 sda5[2] sdb5[0]
      1003904 blocks [2/1] [U_]
      [============>........]  recovery = 63.9% (642816/1003904) finish=0.1min speed=37858K/sec

md0 : active raid1 sdb1[1] sda1[0]
      1003904 blocks [2/2] [UU]

unused devices: <none>
root@LS-WSGL678:~# KERNELMOn (raidrecovery 10 1 1 1 8 5)
RAID1 conf printout:
 --- wd:2 rd:2
 disk 0, wo:0, o:1, dev:sdb5
 disk 1, wo:0, o:1, dev:sda5
1 USB_DEVICE=none
KERNELMOn (PSW_on)
KERNELMOn (raidrecovery 10 0 0 1 8 5)
2 USB_DEVICE=none
3 USB_DEVICE=none
KERNELMOn (raidrecovery 1 1 1 1 8 18)
4 USB_DEVICE=none
5 USB_DEVICE=none

root@LS-WSGL678:~# cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 sdb2[2] sda2[0]
      5004160 blocks [2/1] [U_]
      [===================>.]  recovery = 99.3% (4973440/5004160) finish=0.0min speed=48776K/sec

md10 : active raid1 sda5[1] sdb5[0]
      1003904 blocks [2/2] [UU]

md0 : active raid1 sdb1[1] sda1[0]
      1003904 blocks [2/2] [UU]

unused devices: <none>
root@LS-WSGL678:~# RAID1 conf printout:
 --- wd:2 rd:2
 disk 0, wo:0, o:1, dev:sda2
 disk 1, wo:0, o:1, dev:sdb2
KERNELMOn (raidrecovery 1 0 0 1 8 18)

root@LS-WSGL678:~# cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 sdb2[1] sda2[0]
      5004160 blocks [2/2] [UU]

md10 : active raid1 sda5[1] sdb5[0]
      1003904 blocks [2/2] [UU]

md0 : active raid1 sdb1[1] sda1[0]
      1003904 blocks [2/2] [UU]

unused devices: <none>
root@LS-WSGL678:~#
やっぱりリビルドされている。

ブートメッセージをさかのぼってみていくと、、、

	:
	:
Starting kernelmon:=== miconmon.sh ===
=== checkSysMd.sh ===
KERNELMOn (lanact 0 half)
/dev/md0
KERNELMOn (lanact 1000 full)
     Raid Level : raid1
** mdadm -a /dev/md0 /dev/sdb1
RAID1 conf printout:
 --- wd:1 rd:2
 disk 0, wo:0, o:1, dev:sda1
 disk 1, wo:1, o:1, dev:sdb1
mdadm: added /dev/sdb1
/dev/md1
     Raid Level : raid1
** mdadm -a /dev/md1 /dev/sdb2
KERNELMOn (raidrecovery 0 1 1 1 8 17)
RAID1 conf printout:
 --- wd:1 rd:2
 disk 0, wo:0, o:1, dev:sda2
 disk 1, wo:1, o:1, dev:sdb2
mdadm: added /dev/sdb2
/dev/md10
     Raid Level : raid1
GetDisknoFromMinor(17)
** mdadm -a /dev/md10 /dev/sda5
RAID1 conf printout:
 --- wd:1 rd:2
 disk 0, wo:0, o:1, dev:sdb5
 disk 1, wo:1, o:1, dev:sda5
mdadm: added /dev/sda5
	:
	:
checkSysMd.sh がリビルドしている。
つまり、initrd の /linuxrc でリビルドしているわけではない。

パスだな。


LS-WSGL debian 化の残課題まとめ

1.debian がまともに動くようにする

1)起動時のエラーつぶし
(1)md0 の起動時マウント
・ネットワークの設定
・パッケージリストのアップデート
・mdadm のインストール
(2)Starting :fsck_disks(boot) ... [Failed. ]:謎
2)標準ファームによる RAID 化(md0, md1, md10)
3)電源スイッチによる電源OFF実現
4)LED の点滅解除
5)パッケージのアップデート
6)swap の有効化
7)標準ファームのジェイル化
7)HDD の標準ファームでジェイル化
8)カーネルモジュールのロード
9)シャットダウン時のエラーつぶし
md: md1 still in use.:謎
10)USB 機器の認識

2.手順化、ハックキット化

要る?

1)シリアルコンソールを使わないインストール方法の検討
2)インストーラ作成



LinkStation Mini
LS-WSGL
楽天市場
Amazon
Yahoo!ショッピング
Livedoor デパート
Sofmap
TSUKUMO ネットショップ
ムラウチドットコム
ヤマダ電機WEB
パソQ


関西オープンソース2008 / 関西コミュニティ大決戦
ハックの記録
LinkStation/玄箱 をハックしよう

ハックキット構想

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