zpoolをdisk labelで組み直す

内蔵HDD構成では5本以上の構成ではケースの選択肢が限られるので、HDD本数を3TiB×5本から3TiB×7構成に変更するのに合わせて見直しを行った。

[変更前]

M/B: ASUSTek P8H77-I
HBA: HighPoint RocketRAID 2720SGL + SFF-8087 miniSAS->SATA(4分岐)ケーブル
HDD: Seagate ST3000DM001 3TiB × 5本 raidz2

[変更後]
M/B: Intel Desktop Board DQ77MK
HBA: LSI SAS 9200-8e + SFF-8088 miniSAS
HDD: Seagate ST3000DM001 3TiB × 7本 raidz2
HDD Enclosure: STARDOM ST8-U5

CPUやメモリ、電源はそのまま流用するためちょっとストックしていたM/Bを引っ張り出して再利用。
RR2720の時と違い、SAS9200-8eは特に何もしないでもFreeBSDで認識し使用できるのだけど、肝心のM/BがBIOS画面に行く前の段階で固まってしまい認識しない。
Intelのサポートサイトからファームウェアのバージョンをチェックしてみたら、搭載しているF/Wバージョンは一番最初の0034。最新は064で相当古い。
しかし、最新064には起動時にF7キーを押す方法では容量が足りないとエラーが表示されてアップデートが行われない。仕方ないのでマザーボード上のジャンパーピンを外して行うリカバリーアップデートを実行。問題なく認識するようになった。

リカバリーアップデートの詳しい手順はPDFに記載してありますが英語なので簡単に書いておくと。

  1. PDFの2ページ目に載ってる”Image 2: Jumper in place(BIOS Recovery Mode) (Normal Mode)”の様な目立つジャンパーピンを抜く。(電源コンセントを抜いた状態で!)
  2. あらかじめダウンロードしたファームウェアファイル(*.BIO)をコピーしておいたUSBメモリを挿す。
  3. 電源を入れて立ち上げる。
  4. F/Wのアップデートが始まるので、成功することを適切な神様に祈りながら待つ。
  5. アップデートが終了したら電源を切って電源プラグを抜きUSBメモリを外す。
  6. ジャンパーピンを元に戻す。
  7. 再起動がうまくいけば成功。

今度はあっさりとSAS9200-8eの認識成功。zpoolの作成は以前の手順と同じなので省略。
SAS9200-8e + ST8-U5の構成にして一つ困ったことはHDDに割り当てられるデバイス名が認識順のため、HDDが故障して交換等があると番号が変わってくる。
先日、da4に割り当てられていたHDDが故障したので又々(何回目だろう)RMAを使用して交換した。
Seagate ST3000DM001は耐久性が今一と言われており実際によく故障してる。しかし、RMAの返送先がSeagateは国内(千葉)にあるので手続きが非常に簡単で早いのと、WesternDigitalのコンシューマ向けHDDに搭載されているIntelliParkが嫌なので相変わらずSeagate。

交換用HDDが届いたので早速交換。その際のログがこちら。

Script started on Thu Mar  6 21:18:48 2014
# gpart create -s gpt da4
da4 created
# gpart add -a 4k -s 2780g -t freebsd-zfs da4
da4p1 added
# gpart show da4
=>        34  5860533101  da4  GPT  (2.7T)
          34           6       - free -  (3.0K)
          40  5830082560    1  freebsd-zfs  (2.7T)
  5830082600    30450535       - free -  (15G)

# zpool replace data da4p1
# zpool status data
  pool: data
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
	continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Thu Mar  6 21:20:55 2014
        812M scanned out of 8.80T at 54.1M/s, 47h19m to go
        110M resilvered, 0.01% done
config:

	NAME                       STATE     READ WRITE CKSUM
	data                       DEGRADED     0     0     0
	  raidz2-0                 DEGRADED     0     0     0
	    da0p1                  ONLINE       0     0     0
	    da1p1                  ONLINE       0     0     0
	    da2p1                  ONLINE       0     0     0
	    da3p1                  ONLINE       0     0     0
	    replacing-4            OFFLINE      0     0     0
	      7465146473037877488  OFFLINE      0     0     0  was /dev/da4p1/old
	      da4p1                ONLINE       0     0     0  (resilvering)
	    da5p1                  ONLINE       0     0     0
	    da6p1                  ONLINE       0     0     0

errors: No known data errors
# zpool status data
  pool: data
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
	continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Thu Mar  6 21:20:55 2014
        598G scanned out of 8.80T at 304M/s, 7h52m to go
        81.9G resilvered, 6.64% done
config:

	NAME                       STATE     READ WRITE CKSUM
	data                       DEGRADED     0     0     0
	  raidz2-0                 DEGRADED     0     0     0
	    da0p1                  ONLINE       0     0     0
	    da1p1                  ONLINE       0     0     0
	    da2p1                  ONLINE       0     0     0
	    da3p1                  ONLINE       0     0     0
	    replacing-4            OFFLINE      0     0     0
	      7465146473037877488  OFFLINE      0     0     0  was /dev/da4p1/old
	      da4p1                ONLINE       0     0     0  (resilvering)
	    da5p1                  ONLINE       0     0     0
	    da6p1                  ONLINE       0     0     0

errors: No known data errors
# zpool status data
  pool: data
 state: DEGRADED
status: One or more devices is currently being resilvered.  The pool will
	continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Thu Mar  6 21:20:55 2014
        1.81T scanned out of 8.80T at 314M/s, 6h29m to go
        253G resilvered, 20.55% done
config:

	NAME                       STATE     READ WRITE CKSUM
	data                       DEGRADED     0     0     0
	  raidz2-0                 DEGRADED     0     0     0
	    da0p1                  ONLINE       0     0     0
	    da1p1                  ONLINE       0     0     0
	    da2p1                  ONLINE       0     0     0
	    da3p1                  ONLINE       0     0     0
	    replacing-4            OFFLINE      0     0     0
	      7465146473037877488  OFFLINE      0     0     0  was /dev/da4p1/old
	      da4p1                ONLINE       0     0     0  (resilvering)
	    da5p1                  ONLINE       0     0     0
	    da6p1                  ONLINE       0     0     0

errors: No known data errors
# zpool status data
  pool: data
 state: ONLINE
  scan: resilvered 1.20T in 9h0m with 0 errors on Fri Mar  7 06:21:16 2014
config:

	NAME        STATE     READ WRITE CKSUM
	data        ONLINE       0     0     0
	  raidz2-0  ONLINE       0     0     0
	    da0p1   ONLINE       0     0     0
	    da1p1   ONLINE       0     0     0
	    da2p1   ONLINE       0     0     0
	    da3p1   ONLINE       0     0     0
	    da4p1   ONLINE       0     0     0
	    da5p1   ONLINE       0     0     0
	    da6p1   ONLINE       0     0     0

errors: No known data errors
# exit

Script done on Fri Mar  7 07:24:12 2014

しかし、交換後再起動したら問題発生。
実はda4に割り当てられていたHDDが故障したのでHDDを抜き取り、送付、交換用HDDが届くまで1週間位かかっているのだが、その間、故障してからずっとPCは動作させっぱなしだったので新しくHDDを挿した時にも空いていたda4が再度割り当てられていた。ここで再起動すると認識の順番が変わりda4->da6, da5->da4, da6->da5にずれてしまった。

# zpool status
  pool: data
 state: ONLINE
  scan: resilvered 1.20T in 9h0m with 0 errors on Fri Mar  7 06:21:16 2014
config:

        NAME            STATE     READ WRITE CKSUM
        data            ONLINE       0     0     0
          raidz2-0      ONLINE       0     0     0
            da0p1       ONLINE       0     0     0
            da1p1       ONLINE       0     0     0
            da2p1       ONLINE       0     0     0
            da3p1       ONLINE       0     0     0
            da6p1       ONLINE       0     0     0
            da4p1       ONLINE       0     0     0
            da5p1       ONLINE       0     0     0

errors: No known data errors

何かある度にデバイスがずれてしまうと作業ミスが発生しやすくなるし、なにより見た目が宜しくない(本音)なので、これを機会にGPTラベルでの管理に変更する事とした。

まずzfsに割り当てるパーティションにGPTラベルを設定する。単純にdata poolのメンバーだから先頭からdata01~data07を割り当てる。

# gpart show da4
=>        34  5860533101  da4  GPT  (2.7T)
          34           6       - free -  (3.0K)
          40  5830082560    1  freebsd-zfs  (2.7T)
  5830082600    30450535       - free -  (15G)

da4のパーティションインデックス”1″にラベル”data04″を割り当てるのは以下。

# gpart modify -i 1 -l data04 da4

同様にしてdata poolの全てのメンバーにラベルを設定する。
次に、GPTラベルを使える様にkern.geom.label.gpt.enableの値をFreeBSDデフォルトの”1″となる様、以前に”0″と設定していた/boot/loader.confの以下の記述を修正(コメントアウト)する。

## Disable gpt/gptid labels
#kern.geom.label.gptid.enable=0

ここまで準備が出来たら設定を活かすために再起動する。
しかし、これだけではzpoolの表示は変わらない。有効とするためには以下の操作が必要。

# zpool export data
# zpool import -d /dev/gpt data
# zpool status data
  pool: data
 state: ONLINE
  scan: resilvered 1.20T in 9h0m with 0 errors on Fri Mar  7 06:21:16 2014
config:

        NAME            STATE     READ WRITE CKSUM
        data            ONLINE       0     0     0
          raidz2-0      ONLINE       0     0     0
            gpt/data01  ONLINE       0     0     0
            gpt/data02  ONLINE       0     0     0
            gpt/data03  ONLINE       0     0     0
            gpt/data04  ONLINE       0     0     0
            gpt/data05  ONLINE       0     0     0
            gpt/data06  ONLINE       0     0     0
            gpt/data07  ONLINE       0     0     0

errors: No known data errors

シリアルNo.はSeagateではHDD表面のS/Nの箇所で確認できる。
また、diskinfoコマンドでも確認できるのでHDDが故障したときのために、GPTラベルに対応するHDD毎のシリアルNo.を記録しておく。

# diskinfo -v /dev/gpt/data04
/dev/gpt/data04
        512             # sectorsize
        2985002270720   # mediasize in bytes (2.7T)
        5830082560      # mediasize in sectors
        4096            # stripesize
        0               # stripeoffset
        362905          # Cylinders according to firmware.
        255             # Heads according to firmware.
        63              # Sectors according to firmware.
                    Z1******s0  # Disk ident.

いざというときに慌てないためにも、一覧にして印刷した紙をST8-U5の側に貼っております。

コメントを残す

メールアドレスが公開されることはありません。