2010年4月19日月曜日

TerastationPro(TS-TGL)の3disk raid5化&500GB制限回避

ひょんなことから、TS-TGLを入手した。だが、80GB*4のRAID5という前時代的なディスク容量。

仕方ないので、何も調べずにアキバにいって、価格と容量のバランスがよいWDの1.5TBを3本購入。
RAID5だから、3本でいいだろうと安易に考えたのが運のつきだった。。。。

家に帰り、TS-TGLにディスクを換装。

起動させメニューから確認。よしよし認識してるぞ。
既存のアレイを削除し、新しく作ろうとする、、、と、、、、

RAID5は4本必要です。

なんですと!おお、、なんということ。。。

では、仕方ないと、2本でミラーを組んでみることに。
そうすると、容量が、550GBのアレイになってしまう。。。なぜだ、、、

調べてみると、TS-TGLはそういう仕様らしい。なんという。

仕方ないので、ディスクを買うか、なんとかするとか思案。
しかしディスクかいにいくにしてもすでに夜中だったので、とりあえず朝までなんとかしてみようと。

そこで、とりあえず、ファームをroot奪取版に入れ替えてみる。

■ ファームの入替え
ntlworld.comからカスタムファームをDL
私は、1.12dを使用した。

DLしたら解凍し、japaneseの方をdclickしてinstall。
2,3回terastationが再起動したらtelnetがenableになっていると思う。

loginは、"myroot"でパスワードなしで入れます。

■ raidの構成
そもそも、今回は1.5TB*3でRAID5なので、本来は3TB使えるはず。
だが、TS-TGLは500GB*4=2TBという制限があり、2TB以上のアレイは認識できない。
# kernelのver上の制約という話もある?

仕方ないので、workaroundとして、2TB+1TBの2領域にわけることで、3TB使用可能にする。

以下の手順は、4 x 1TB = 2 Raid5 arrays => finally workingを参考。

1. 大前提。
データは吹っ飛びますので、どっかからもってきたディスクを流用する人は、退避させて下さい。かつ、最悪、terastation自身がただのbrickになる可能性もあります。
At your own risk で。

後、作業時にログをとらなかったのでコマンドの結果は適当です。
下の手順を見て何をしているか分からない人は、やらない方がいいと思います。

2. telnet で terastaion にアクセスし、mount 状況の確認。


  • bash# telnet -l myroot "TERASTAION IP"

  • root@CONTROLS1:~# df -h

  • Filesystem Size Used Avail Use% Mounted on

  • /dev/shm 15M 120k 14M 1% /mnt/ram

  • /dev/ram1 14M 211k 13M 2% /tmp

  • /dev/md1 1.4T 5.8M 1.4T 1% /mnt/array1



3. RAID Array1をアンマウント

  • root@CONTROLS1:~# umount /dev/md1



4. Diskのパーティションを切り直します。スロット1がsda、スロット2がsdb、スロット3がsdc、スロット4がsddと対応しています。
パーティション1はterastaionがsystem(firm)で使用している(多分)と思われます。2はswapで、3と4がデータ領域です。
今回は、 1.5TBのディスクを3本使い、パーティション3=約1TB パーティション4が約400GB(パーティション1と2の領域がある為)のディスクを3本でraid3=約2TB+約800GBのRAID5を組む為、3と4それぞれパーティションを切っていますが、ディスクの総容量が2TB以下ならパーティションを分割する必要はありません。

  • root@CONTROLS1:~# mfdisk -c /dev/sda (必要な本数分sdb-dも実施)

  • Command (m for help): d (パーティション3を削除)

  • Partition number (1-4): 3

  • Command (m for help): d (パーティション4を削除)

  • Partition number (1-4): 4

  • Command (m for help): n (パーティション3を作成)

  • Command action

  • e extended

  • p primary partition (1-4)

  • p

  • Partition number (1-4): 3

  • First cylinder (66-121601, default 66): 66

  • Last cylinder or +size or +sizeM or +sizeK (66-121601, default 121601): +1000000M

  • Command (m for help): n (パーティション4を作成)

  • Command action

  • e extended

  • p primary partition (1-4)

  • p

  • Partition number (1-4): 4

  • First cylinder (63808-121601, default 63808):

  • Using default value 63808

  • Last cylinder or +size or +sizeM or +sizeK (63808-121601, default 121601):

  • Using default value 121601

  • Command (m for help): t (swapパーティション2を作成)

  • Partition number (1-4): 2

  • Hex code (type L to list codes): 82

  • Command (m for help): p (パーティションの確認)

  • Command (m for help): w (write)

  • The partition table has been altered!

  • Re-read table failed with error 16: Device or resource busy.

  • Reboot your system to ensure the partition table is updated.

  • Syncing disks.



5. 手を3回叩き祈りながら再起動


  • root@CONTROLS1:/etc/rc.d/rc3.d# reboot

  • Broadcast message from root (pts/0) Mon Aug 10 15:49:05 2009...

  • The system is going down for reboot NOW !!




6. RAID Arrayの作成
mdadmというのはlinuxのソフトウェアraidの管理コマンドです。補則を。


  • mdadm --create /dev/md1 --level=5 --raid-devices=3 --force --run /dev/sd[a-d]3

  • -create : arrayの作成

  • /dev/md1 : 作成するarrayを指定

  • -level=5 : raid何かを指定。今回はraid5なので5。

  • -raid-devices=3 : 作成するarrayで使用するディスクの本数。今回は3本。



あと言うまでもないとは思いますが、 -run /dev/sd[a-d]3というのは、適宜書き換えて下さい。[a-d]の部分でdiskを指定し、その後の数字"3"はパーティションnoです。

例えば、raid5を4本で組む場合は、


  • mdadm --create /dev/md1 --level=5 --raid-devices=4 --force --run /dev/sd[a-d]3



となります。

では本番。


  • root@CONTROLS1:~# mdadm --create /dev/md1 --level=5 --raid-devices=3 --force --run /dev/sd[a-c]3

  • mdadm: array /dev/md1 started.

  • root@CONTROLS1:~# mdadm --create /dev/md2 --level=5 --raid-devices=3 --force --run /dev/sd[a-c]4

  • mdadm: array /dev/md2 started.



7. fstabの書き換え。


  • root@CONTROLS1:~# vi /etc/fstab

  • # /etc/fstab: static file system information.

  • #

  • #

  • /dev/md0 / auto defaults,noatime 0 0

  • proc /proc proc defaults 0 0

  • /.swapfile swap swap defaults 0 0

  • /dev/md1 /mnt/array1 xfs rw,noatime 0 0

  • /dev/md2 /mnt/array2 xfs rw,noatime 0 0




8. diskinfoの書き換え。これやらないとブラウザの管理画面がおかしくなります。


  • root@CONTROLS1:/# vi /etc/melco/diskinfo

  • array1=raid5

  • array2=raid5

  • disk1=array1

  • disk2=array1

  • disk3=array1

  • disk4=array1

  • usb_disk1=

  • usb_disk2=

  • usb_disk3=

  • usb_disk4=




9. 作成したarrayをフォーマットします。


  • root@CONTROLS1:/# mkfs.xfs -f /dev/md1

  • mkfs.xfs: warning - cannot get sector size from block device /dev/md1: Invalid argument

  • meta-data=/dev/md1 isize=256 agcount=367, agsize=1048576 blks

  • = sectsz=512

  • data = bsize=4096 blocks=384005616, imaxpct=25

  • = sunit=16 swidth=48 blks, unwritten=1

  • naming =version 2 bsize=4096

  • log =internal log bsize=4096 blocks=32768, version=1

  • = sectsz=512 sunit=0 blks

  • realtime =none extsz=196608 blocks=0, rtextents=0

  • root@CONTROLS1:/# mkfs.xfs -f /dev/md2

  • mkfs.xfs: warning - cannot get sector size from block device /dev/md2: Invalid argument

  • meta-data=/dev/md2 isize=256 agcount=333, agsize=1048576 blks

  • = sectsz=512

  • data = bsize=4096 blocks=348172656, imaxpct=25

  • = sunit=16 swidth=48 blks, unwritten=1

  • naming =version 2 bsize=4096

  • log =internal log bsize=4096 blocks=32768, version=1

  • = sectsz=512 sunit=0 blks

  • realtime =none extsz=196608 blocks=0, rtextents=0



10. arrayをマウントします。


  • root@CONTROLS1:/# mount /dev/md1

  • root@CONTROLS1:/# mount /dev/md2



11. terastation起動時に作成したマウントが読まれるようにスクリプトを仕込む


  • root@CONTROLS1:/# vi /etc/init.d/restart_my_array.sh

  • #!/bin/sh

  • echo "-- rebuild mdadm.conf for md1--"

  • echo 'DEVICE /dev/ts_disk?_3' > /etc/mdadm.conf

  • mdadm -Eb /dev/ts_disk?_3 >>/etc/mdadm.conf

  • echo "-- rebuild mdadm.conf for md2--"

  • echo 'DEVICE /dev/ts_disk?_4' >> /etc/mdadm.conf

  • mdadm -Eb /dev/ts_disk?_4 >>/etc/mdadm.conf

  • mdadm -As --force

  • mount /dev/md2



12. スクリプトに実行権限を付与

  • root@CONTROLS1:/etc/init.d# chmod +x restart_my_array.sh



13. rc3dへリンク

  • root@CONTROLS1:/# ln -s /etc/init.d/restart_my_array.sh /etc/rc.d/rc3.d/S99z_restart_my_array



14. 再起動します。ブラウザから管理画面を開きarray1と2が認識できている事を確認。

■ おまけ。シリアルコンソールの有効化
ファーム1.12で確認済みです。

  • http://{TeraStation の IP アドレス}/cgi-bin/task.cgi?task=console¶m=on


但し、コールドリブートした場合は、リセットされてしまうので注意。

0 件のコメント:

コメントを投稿

素材集

FreePhoto