zfs poolにオンラインでストレージの追加

前回から随分たっていますが、2Tx4 RAIDZで構成したpoolにディスクを追加します。内容的には問題なければコマンド一行です。

zpool add -f data raidz /dev/sdf /dev/sdg /dev/sdh /dev/sdi

HDDが初期化されずに、MBRが残ったりしていると怒られるので-fをつけるようにと促されます。

以下のように2TのRAIDZ+RAIDZ構成のpoolができました。

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

    NAME        STATE     READ WRITE CKSUM
    data        ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        sdb     ONLINE       0     0     0
        sdc     ONLINE       0     0     0
        sdd     ONLINE       0     0     0
        sde     ONLINE       0     0     0
      raidz1-1  ONLINE       0     0     0
        sdf     ONLINE       0     0     0
        sdg     ONLINE       0     0     0
        sdh     ONLINE       0     0     0
        sdi     ONLINE       0     0     0

errors: No known data errors

zpool list
NAME   SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
data  14.5T  6.60T  7.90T    45%  1.00x  ONLINE  -

HDDのRAID等のMETAデータを削除する場合

前身の用途が不明なディスクをディスクをzfsをpoolに追加しようとしたところ以下のようなエラーがでました。

root@hoehoge:~# zpool add -f data /dev/sda /dev/sdb /dev/sdc /dev/sdd/dev/sde /dev/sdf
cannot open '/dev/sdc': Device or resource busy

試しに適当にマウントもしてみます。

root@hogehoge:~# mount /dev/sde /mnt
mount: unknown filesystem type 'promise_fasttrack_raid_member'

PromiseのRAIDカードのアレイとして使われていたっぽい?

root@hogehoge:~# blkid
/dev/sdc: TYPE="promise_fasttrack_raid_member"
/dev/sde: TYPE="promise_fasttrack_raid_member"
/dev/sdg1: UUID="d6daab1b-ceb2-4750-bc38-64852a566b0f" TYPE="ext4"
/dev/sdg5: UUID="a5cb3913-0c4b-4de6-b729-3a5fb49f3df8" TYPE="swap"

調べたところディスクのメタデータを操作できるコマンドがあることがわかったので、それを使って削除しました。

root@hogehoge:~# dmraid -r -E /dev/sdc
root@hogehoge:~# dmraid -r -E /dev/sde

削除されたか確認。

/dev/sdg1: UUID="d6daab1b-ceb2-4750-bc38-64852a566b0f" TYPE="ext4"
/dev/sdg5: UUID="a5cb3913-0c4b-4de6-b729-3a5fb49f3df8" TYPE="swap"

この後zpool createでpoolにいれることができました。

root@hogehoge:~# zpool status
  pool: data
 state: ONLINE
 scan: none requested
config:

	NAME        STATE     READ WRITE CKSUM
	data        ONLINE       0     0     0
	  raidz1-0  ONLINE       0     0     0
	    sda     ONLINE       0     0     0
	    sdb     ONLINE       0     0     0
	    sdc     ONLINE       0     0     0
	    sdd     ONLINE       0     0     0
	    sde     ONLINE       0     0     0
	    sdf     ONLINE       0     0     0

zfs on linux その1

fuseを使って利用いたものが、ネイティブに使えるというシロモノ。詳しくはぐぐってください。

btrfs RAID10(6T)な自宅サーバのストレージをリプレースするにあたり、この子を使って実容量の向上をたくらんでみることにしました。

注意点はいくつかありますが、念頭においておかないといけないことは、オンラインでRAID自体の再構成はできないということでしょう。
たとえば、4台のRAID-Z(RAID5だとする)で構築したプールに、RAID-Zにディスクを追加するという形で追加することはできません。RAIDアレイ + RAIDアレイ=プール といった形にしかできません。
ですので、冗長性を考慮すると4台RAID-Z + 2台RAID-Z(ミラー)というプール構成になります。
この場合、はじめから7台でRAIDを構成する場合と比べると、1台分が実容量として使用できない無駄なディスクが増えてしまいます。もしやるとしても、すべてRAID-Zで構成した上で、ホットスペアをつけてあげたほうがお得な気がします。

以上のことを踏まえ、実データをコピー後、残りのHDDをかき集めてプールに追加する手順をとるとして、2T4台 + 2T4台構成で構築することにしました。実質使える容量はざっくり12Tになります。

とりあえず今あるデータをコピーするための箱作り。

zfs on linux インストール
Ubuntu12.04はとても簡単です。

sudo su -

#zfsインストール
apt-add-repository ppa:zfs-native/daily
aptitude clean
aptitude update
aptitude install debootstrap ubuntu-zfs
modprobe zfs

#確認する
dmesg | grep -i zfs

zfsのモジュールがロードされていればすぐ利用できる。

RAID-Zの構築(シングルパリティ)

zpool create data raidz /dev/sdb /dev/sdc /dev/sdd /dev/sde

zpool status で容量の確認ができる

続きは6Tのrsyncが終わってからです。