I・O DATA LANDISK HDL-GX300 内蔵HDD交換の後にRAID設定

内蔵HDDと同じく外付けHDDにもWDのWD20EADSを使用。外付けHDDには

センチュリー 冷やし系HDD検温番 マットブラック CLS35EU2BF

センチュリー 冷やし系HDD検温番 マットブラック CLS35EU2BF

を利用。
なお、この外付けケースはHDD換装前にeSATA接続でRAID設定し、ちゃんと使えています。

さて、何も考えずに外付けさせてみると

との表示。同一サイズで何故だめなんだろう…。
そういえばhttp://d.hatena.ne.jp/tissi/20081227に「パーティションに空きを作っておくべき」という記載があったな、と思って確認してみると、さらに重要情報が。

にゃは 2009/10/04 23:03
こんばんは。にゃは と申します。

明快な作業手順書のお陰で300GBから1TB換装、さらにRAID構築に成功しました。
この場を借りてお礼申し上げます。ありがとうございました。


RAID構築の条件として、/usr/www/gate/mirror.cgi(引用者註:/usr/local/www/gate/mirror.cgi)に面白い記述があります。

「内蔵HDDとeSATAHDDの容量を...」
「内蔵HDDのhda6パーティション...総セクタ数が小さいときはエラーとする。」

ということで、パーティション拡張の際には全領域を確保せず、ディスク後方に
数十MB程度の空き領域を残して拡張すると良いようです。

わざと空き領域を設けることにより、メーカ&個体によるセクタ数の微妙な違い
を吸収するようになっているようです。

うぇいく 2009/12/17 22:18
 当方でも、GX500Rを1.5Tに換装時、ミラーができなくなりました。結局、mirror.cgiの該当箇所のエラーチェックをすっとばして構築しました。
どうも、うまくゆかない原因は、総論理レコード数が、符号付32bit整数の範囲から外れるためのようです。そのため、Diskの情報を収集するモジュールが、総容量などに負数を返しているようです。
# 通常は、符号付32bit整数の範囲を外れると自動的に浮動少数に型がアップグレードされるはずなんですが・・・16進を直接参照したり、ビット演算子を使うとだめだった気が。

結局、内部のモジュールが正しく情報を取得できてないっぽいので、うまく動いているように見えて、どこかでうまくゆかない・・・という可能性はのこっちゃいますね。安全を期するなら、「容量は、拡大しても1Tまで」と考えたほうがよさそうです。
# わたしはこのまま突き進みます。1.5Tのドライブ2つ買っちゃったし。

うぇいく 2009/12/18 00:15
 連投失礼します。
 ざっと見たところ、以下の2つを直すと、一応は動くっぽいです。原因はやはり、符号付32bit整数の制限でした。速度アップのために、use integer;をしているモジュールがあり、これにより、型の昇格がなくなり、数値は常に符号付intして扱われるようになります。

2ファイルあります。どちらも、/usr/local/bin に入っています。

HDLdrive.pm
return $size += 0;(引用者註:103行目)
という部分を、
return $size;
に修正(文字列のまま返す)

HDLraid.pm
$ret{size} = 2*$1;(引用者註:276行目)
を、
$ret{size} = sprintf('%lu',2*$1);
に修正(符号なしintとして文字列にする)

もしかすると、ほかにもあるかもしれません。

この通りだとすると、HDL-GXシリーズに換装できるHDDは2TBまでですね。
うぇいく氏の記載に従って/usr/local/bin/HDLdrive.pmと/usr/local/bin/HDLraid.pmを修正
すると

と利用可能の表示に変わりました!なのでミラーリング開始!

…ただ、心配なのが一点。

eSATA HDDが再構築されず「不明」のままなのですよね…。なんだかおかしい。
分からないまま対策作業。

landisk:~# cat /proc/mdstat 
Personalities : [linear] [raid0] [raid1] [raid5] [raid6] [raid10] 
md6 : active raid1 sdb6[1] sda6[0]
      1952146368 blocks [1/1] [U]
      
md5 : active raid1 sdb5[1] sda5[0]
      208704 blocks [1/1] [U]
      
md2 : active raid1 sdb2[1] sda2[0]
      409536 blocks [2/2] [UU]
      
md1 : active raid1 sdb1[1] sda1[0]
      208768 blocks [2/2] [UU]
      
unused devices: <none>
landisk:~# fdisk -l

Disk /dev/sda: 2000.3 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               2          27      208845   83  Linux
/dev/sda2              28          78      409657+  83  Linux
/dev/sda3              79         144      530145   82  Linux swap / Solaris
/dev/sda4             145      243201  1952355352+   5  Extended
/dev/sda5             145         170      208813+  83  Linux
/dev/sda6             171      243201  1952146476   83  Linux

Disk /dev/md1: 213 MB, 213778432 bytes
2 heads, 4 sectors/track, 52192 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

Disk /dev/md1 doesn't contain a valid partition table

Disk /dev/md2: 419 MB, 419364864 bytes
2 heads, 4 sectors/track, 102384 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

Disk /dev/md2 doesn't contain a valid partition table

Disk /dev/md5: 213 MB, 213712896 bytes
2 heads, 4 sectors/track, 52176 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

Disk /dev/md5 doesn't contain a valid partition table

Disk /dev/md6: 1998.9 GB, 1998997880832 bytes
2 heads, 4 sectors/track, 488036592 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

Disk /dev/md6 doesn't contain a valid partition table

Disk /dev/sdb: 2000.3 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               2          27      208845   83  Linux
/dev/sdb2              28          78      409657+  83  Linux
/dev/sdb3              79         144      530145   82  Linux swap / Solaris
/dev/sdb4             145      243201  1952355352+   5  Extended
/dev/sdb5             145         170      208844+  83  Linux
/dev/sdb6             171      243201  1952146507   83  Linux

まずはWebメニューでRAID切り。
その次にRAIDの設定をやり直し。

landisk:~# mdadm -v -C -f /dev/md5 -l 1 -n 1 /dev/sda5
mdadm: /dev/sda5 appears to contain an ext2fs file system
    size=208812K  mtime=Thu Jan  7 17:11:41 2010
mdadm: /dev/sda5 appears to be part of a raid array:
    level=1 devices=1 ctime=Mon Jan  4 19:29:03 2010
mdadm: size set to 208704K
Continue creating array? y
mdadm: SET_ARRAY_INFO failed for /dev/md5: Invalid argument

これは先日と同じメッセージで同じ失敗だ。
ではRAIDの準備は出来ているのだろう。
じゃ、続いてhttp://d.hatena.ne.jp/tissi/20081227のにゃは氏のコメント

md5とmd6が単体動作になっているので、RAIDドライブ数を増やす>
mdadm --grow /dev/md5 -n2
mdadm --grow /dev/md6 -n2

に従ってみよう。

landisk:~# mdadm --grow /dev/md5 -n2
landisk:~# mdadm --grow /dev/md6 -n2
landisk:~# cat /proc/mdstat 
Personalities : [linear] [raid0] [raid1] [raid5] [raid6] [raid10] 
md6 : active raid1 sda6[0]
      1952146368 blocks [2/1] [U_]
      
md5 : active raid1 sda5[0]
      208704 blocks [2/1] [U_]
      
md2 : active raid1 sda2[0]
      409536 blocks [2/1] [U_]
      
md1 : active raid1 sda1[0]
      208768 blocks [2/1] [U_]
      
unused devices: <none>

ではミラーリング設定の画面に。

あ、表示が違う。状態が前は「共有フォルダ管理で使用中」だったのに今回は「未使用」。さっきはミラーリングの前にフォーマットしたよな。そのせいかな。
ではミラーリング開始!
…よし、今回は再構築できてる!

topで見てるとmd6_raid1とmd6_resyncが動いている。これが動いているから大丈夫ですね。
それから/proc/mdstatを見ると

landisk:~# cat /proc/mdstat 
Personalities : [linear] [raid0] [raid1] [raid5] [raid6] [raid10] 
md6 : active raid1 sdb6[2] sda6[0]
      1952146368 blocks [2/1] [U_]
      [=>...................]  recovery =  5.5% (109201408/1952146368) finish=337.2min speed=91066K/sec
md5 : active raid1 sdb5[1] sda5[0]
      208704 blocks [2/2] [UU]
      
md2 : active raid1 sdb2[1] sda2[0]
      409536 blocks [2/2] [UU]
      
md1 : active raid1 sdb1[1] sda1[0]
      208768 blocks [2/2] [UU]
      
unused devices: <none>

なんとかいけそうだ。よかったよかった。
mdadm --growコマンドが効いたのだろうな。フォーマットが不味かったのかもしれないけど…。まぁ動けばヨシ。
(n時間後)
途中経過。

landisk:~# cat /proc/mdstat 
Personalities : [linear] [raid0] [raid1] [raid5] [raid6] [raid10] 
md6 : active raid1 sdb6[2] sda6[0]
      1952146368 blocks [2/1] [U_]
      [===============>.....]  recovery = 75.0% (1464140160/1952146368) finish=117.3min speed=69286K/sec
md5 : active raid1 sdb5[1] sda5[0]
      208704 blocks [2/2] [UU]
      
md2 : active raid1 sdb2[1] sda2[0]
      409536 blocks [2/2] [UU]
      
md1 : active raid1 sdb1[1] sda1[0]
      208768 blocks [2/2] [UU]
      
unused devices: <none>

のこり1/4。
(さらに数時間)
完了。

landisk:~# cat /proc/mdstat 
Personalities : [linear] [raid0] [raid1] [raid5] [raid6] [raid10] 
md6 : active raid1 sdb6[1] sda6[0]
      1952146368 blocks [2/2] [UU]
      
md5 : active raid1 sdb5[1] sda5[0]
      208704 blocks [2/2] [UU]
      
md2 : active raid1 sdb2[1] sda2[0]
      409536 blocks [2/2] [UU]
      
md1 : active raid1 sdb1[1] sda1[0]
      208768 blocks [2/2] [UU]
      
unused devices: <none>

再構築中も使える、という話だったが、afpではマウントできないし、smbでは内容を見れない状況。telnetでLANDISKにログインしていてもcatしたら

cat: ***.txt: 入力/出力エラーです

などと言われてしまう始末。
しかし再起動したら問題なくアクセスできるようになりました。良かった。