ZFSで既存プールにミラーディスクを追加する

NAS

FreeBSD 9.1をサーバにして使っています。

ディスクは1.5TBのHDDを2台ミラーリングした状態で終わっていました。

他に、1.5TBのHDDを2台用意してあったのですが、データの一時バックアップ用に使っていて、なかなか中身を消せない状態でした。

やっと、HDDの中身をバックアップした事、先日のデータ消失未遂事件が発生して恐怖を覚えた事から、残りの2台もサーバ用に使う決意をしました。

最終的には次の形とします。今回は、破線枠内のHDDの追加をしました。

ZFS構成

次の手順となります。

  1. GPT作成
  2. ZFS化とラベル付け
  3. ミラーリングディスクとして既存プールに追加

それでは、順を追って、説明して行きます。

なお、次のウェブサイトを参考にしています。ありがとうございます。

1. GPT作成

まずは、現状を確認します。

# gpart show
=>        34  2930277101  ada0  GPT  (1.4T)
          34           6        - free -  (3.0k)
          40      409600     1  efi  (200M)
      409640   585937504     2  apple-hfs  (279G)
   586347144      263544        - free -  (128M)
   586610688    87889920     3  linux-data  (41G)
   674500608    39062504     4  linux-data  (18G)
   713563112      262144     5  apple-boot  (128M)
   713825256        1048        - free -  (524k)
   713826304  2206767104     6  apple-hfs  (1.0T)
  2920593408      262144        - free -  (128M)
  2920855552     9420800     7  linux-data  (4.5G)
  2930276352         783        - free -  (391k)

=>        34  2930277101  ada1  GPT  (1.4T)
          34           6        - free -  (3.0k)
          40      409600     1  efi  (200M)
      409640  1953125000     2  apple-hfs  (931G)
  1953534640      262144        - free -  (128M)
  1953796784   976218200     3  apple-hfs  (465G)
  2930014984      262151        - free -  (128M)

=>      34  62533229  ada2  GPT  (29G)
        34       128     1  freebsd-boot  (64k)
       162  16777216     2  freebsd-zfs  (8.0G)
  16777378  33554432     3  freebsd-zfs  (16G)
  50331810  12201453     4  freebsd-zfs  (5.8G)

=>        34  2930277101  ada3  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

=>        34  2930277101  ada4  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

ada0とada1が、今回再利用するHDDです。

まずは、ada0のパーティションを消して、新規に作成します。再利用なので、"-F"オプションで、強制消去しています。

# gpart destroy ada0
gpart: Device busy
# gpart destroy -F ada0
ada0 destroyed
# gpart create -s gpt ada0
ada0 created
# gpart show
=>        34  2930277101  ada1  GPT  (1.4T)
          34           6        - free -  (3.0k)
          40      409600     1  efi  (200M)
      409640  1953125000     2  apple-hfs  (931G)
  1953534640      262144        - free -  (128M)
  1953796784   976218200     3  apple-hfs  (465G)
  2930014984      262151        - free -  (128M)

=>      34  62533229  ada2  GPT  (29G)
        34       128     1  freebsd-boot  (64k)
       162  16777216     2  freebsd-zfs  (8.0G)
  16777378  33554432     3  freebsd-zfs  (16G)
  50331810  12201453     4  freebsd-zfs  (5.8G)

=>        34  2930277101  ada3  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

=>        34  2930277101  ada4  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

=>        34  2930277101  ada0  GPT  (1.4T)
          34  2930277101        - free -  (1.4T)

残りのディスク(ada1)も消去して、GPTパーティションを作成します。

# gpart destroy ada1
gpart: Device busy
# gpart destroy -F ada1
ada1 destroyed
# gpart create -s gpt ada1
ada1 created
# gpart show
=>      34  62533229  ada2  GPT  (29G)
        34       128     1  freebsd-boot  (64k)
       162  16777216     2  freebsd-zfs  (8.0G)
  16777378  33554432     3  freebsd-zfs  (16G)
  50331810  12201453     4  freebsd-zfs  (5.8G)

=>        34  2930277101  ada3  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

=>        34  2930277101  ada4  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

=>        34  2930277101  ada0  GPT  (1.4T)
          34  2930277101        - free -  (1.4T)

=>        34  2930277101  ada1  GPT  (1.4T)
          34  2930277101        - free -  (1.4T)

2. ZFS化とラベル付け

先ほど作ったGPTパーティションを二つともZFS化して、それぞれラベルをつけます。

# gpart add -t freebsd-zfs -l disk2 ada0
ada0p1 added
# gpart add -t freebsd-zfs -l disk3 ada1
ada1p1 added
# gpart show
=>      34  62533229  ada2  GPT  (29G)
        34       128     1  freebsd-boot  (64k)
       162  16777216     2  freebsd-zfs  (8.0G)
  16777378  33554432     3  freebsd-zfs  (16G)
  50331810  12201453     4  freebsd-zfs  (5.8G)

=>        34  2930277101  ada3  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

=>        34  2930277101  ada4  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

=>        34  2930277101  ada0  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

=>        34  2930277101  ada1  GPT  (1.4T)
          34  2930277101     1  freebsd-zfs  (1.4T)

ラベル名を見るには、"-l"オプションを使います。

# gpart show -l
=>      34  62533229  ada2  GPT  (29G)
        34       128     1  (null)  (64k)
       162  16777216     2  zil  (8.0G)
  16777378  33554432     3  l2arc  (16G)
  50331810  12201453     4  zroot  (5.8G)

=>        34  2930277101  ada3  GPT  (1.4T)
          34  2930277101     1  disk0  (1.4T)

=>        34  2930277101  ada4  GPT  (1.4T)
          34  2930277101     1  disk1  (1.4T)

=>        34  2930277101  ada0  GPT  (1.4T)
          34  2930277101     1  disk2  (1.4T)

=>        34  2930277101  ada1  GPT  (1.4T)
          34  2930277101     1  disk3  (1.4T)

3. ミラーリングディスクとして既存プールに追加

現在の、zpoolの状況を確認します。

# zpool status
  pool: rpool
 state: ONLINE
  scan: none requested
config:

	NAME         STATE     READ WRITE CKSUM
	rpool        ONLINE       0     0     0
	  gpt/zroot  ONLINE       0     0     0

errors: No known data errors

  pool: upool
 state: ONLINE
  scan: resilvered 206K in 0h0m with 0 errors on Sat Jan  1 00:21:15 2011
config:

	NAME           STATE     READ WRITE CKSUM
	upool          ONLINE       0     0     0
	  mirror-0     ONLINE       0     0     0
	    gpt/disk1  ONLINE       0     0     0
	    gpt/disk0  ONLINE       0     0     0
	logs
	  gpt/zil      ONLINE       0     0     0
	cache
	  gpt/l2arc    ONLINE       0     0     0

実際にディスクを追加する前に、まずはドライランをして、状況を確認します。「ドライラン」とは、実際の変更はせずに、コマンドの動きを確かめます。"-n"オプションを使います。

# zpool add -n upool mirror gpt/disk2 gpt/disk3
would update 'upool' to the following configuration:
	upool
	  mirror
	    gpt/disk1
	    gpt/disk0
	  mirror
	    gpt/disk2
	    gpt/disk3
	logs
	  gpt/zil

大丈夫そうですので、正式実行します。

# zpool add upool mirror gpt/disk2 gpt/disk3
# zpool status
  pool: rpool
 state: ONLINE
  scan: none requested
config:

	NAME         STATE     READ WRITE CKSUM
	rpool        ONLINE       0     0     0
	  gpt/zroot  ONLINE       0     0     0

errors: No known data errors

  pool: upool
 state: ONLINE
  scan: resilvered 206K in 0h0m with 0 errors on Sat Jan  1 00:21:15 2011
config:

	NAME           STATE     READ WRITE CKSUM
	upool          ONLINE       0     0     0
	  mirror-0     ONLINE       0     0     0
	    gpt/disk1  ONLINE       0     0     0
	    gpt/disk0  ONLINE       0     0     0
	  mirror-2     ONLINE       0     0     0
	    gpt/disk2  ONLINE       0     0     0
	    gpt/disk3  ONLINE       0     0     0
	logs
	  gpt/zil      ONLINE       0     0     0
	cache
	  gpt/l2arc    ONLINE       0     0     0

errors: No known data errors

予定していた通りに、ディスクが追加されました。

Posted by お市のかた