« 2007年11月 | トップページ | 2008年8月 »

2008年6月の2件の記事

2008年6月22日 (日)

ZFS (raidz2)でのデグレード→リビルド確認

さて、RAIDアレイを組んだらとりあえずやっておかないといけないこと、それは障害時にちゃんとリビルドできるかという確認。これをやっておかないと、いざというときに泣きを見ます。

とりあえず、現状は、

# zpool status
  pool: zpool0
state: ONLINE
scrub: none requested
config:


        NAME        STATE     READ WRITE CKSUM
        zpool0      ONLINE       0     0     0
          raidz2    ONLINE       0     0     0
            ad4     ONLINE       0     0     0
            ad6     ONLINE       0     0     0
            ad8     ONLINE       0     0     0
            ad10    ONLINE       0     0     0
            ad12    ONLINE       0     0     0
            ad14    ONLINE       0     0     0


errors: No known data errors

と、6台のHDDでRAID6(raidz2)を組んでいます。

ここで、ad14に障害が起きたと仮定して、えいやっとad14を引っこ抜きます(ちょっと乱暴だけど…)。すると、

# zpool status
  pool: zpool0
state: DEGRADED
status: One or more devices could not be opened.  Sufficient replicas exist for
        the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
   see: http://www.sun.com/msg/ZFS-8000-D3
scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        zpool0      DEGRADED     0     0     0
          raidz2    DEGRADED     0     0     0
            ad4     ONLINE       0     0     0
            ad6     ONLINE       0     0     0
            ad8     ONLINE       0     0     0
            ad10    ONLINE       0     0     0
            ad12    ONLINE       0     0     0
            ad14    UNAVAIL      0     0     0  cannot open

errors: No known data errors

となり、見事にad14が壊れたっぽくなりました。

ここで一旦電源を落として(電源を入れたままでもよかったんだろうけど)、ad14を差し直して、再度立ち上げます。で、状態を確認すると、

# zpool status
  pool: zpool0
state: ONLINE
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://www.sun.com/msg/ZFS-8000-4J
scrub: resilver completed with 0 errors on Mon Jun 23 22:31:55 2008
config:

        NAME        STATE     READ WRITE CKSUM
        zpool0      ONLINE       0     0     0
          raidz2    ONLINE       0     0     0
            ad4     ONLINE       0     0     0
            ad6     ONLINE       0     0     0
            ad8     ONLINE       0     0     0
            ad10    ONLINE       0     0     0
            ad12    ONLINE       0     0     0
            ad14    UNAVAIL      0     0     0  corrupted data

errors: No known data errors

ちょっと状態が変わりました。メッセージにもあるとおり、zpool replaceコマンドを実行して、HDDを交換したよということをZFSに教えてあげる必要があるので、

# zpool replace zpool0 ad14

とコマンドを打ってあげます。そうしたら、HDDが頑張って働き始めて、なんかやってるっぽい感じがします。

# zpool status
  pool: zpool0
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.
scrub: resilver in progress, 0.00% done, 510h5m to go
config:

        NAME            STATE     READ WRITE CKSUM
        zpool0          DEGRADED     0     0     0
          raidz2        DEGRADED     0     0     0
            ad4         ONLINE       0     0     0
            ad6         ONLINE       0     0     0
            ad8         ONLINE       0     0     0
            ad10        ONLINE       0     0     0
            ad12        ONLINE       0     0     0
            replacing   DEGRADED     0     0     0
              ad14/old  UNAVAIL      0     0     0  cannot open
              ad14      ONLINE       0     0     0

errors: No known data errors

実際、ad14をリビルドしていることが分かります(ZFSでは、rebuildではなくresilverというらしい)。で、しばらく放置すると元通り。

# zpool status
  pool: zpool0
state: ONLINE
scrub: none requested
config:


        NAME        STATE     READ WRITE CKSUM
        zpool0      ONLINE       0     0     0
          raidz2    ONLINE       0     0     0
            ad4     ONLINE       0     0     0
            ad6     ONLINE       0     0     0
            ad8     ONLINE       0     0     0
            ad10    ONLINE       0     0     0
            ad12    ONLINE       0     0     0
            ad14    ONLINE       0     0     0


errors: No known data errors

以上、無事リビルド完了です。本当にZFSは簡単です。

参考資料:

続きを読む "ZFS (raidz2)でのデグレード→リビルド確認"

| | コメント (0) | トラックバック (0)

FreeBSDでZFSを導入してみる

今まで、Dell CERC/SATA 1.5/6ch RAIDカードを使ってRAID5のディスクアレイを組んでいました。特に不満もなく今まで使ってきたのですが、最近どうもこのコントローラが不安定。壊れかけのようです。

こういうときはとっととRAIDカードを交換するのが定石なのですが、困ったことに今使っているRAIDカード、もともとDELLのサーバのオプション(しかもオークションで入手)なので、同じ物は簡単に手に入りません。

こうなるとハードウェアRAIDの困ったところ、もうそのまま復旧はあきらめるしかありません(実際はこのRAIDカード、AdaptecのOEMなので、AdaptecのRAIDカード買ってくればたぶん大丈夫なんだけれどもね)。本当はこういうときに備えて、同一カードを交換用として準備すべきなんだけれども、いかんせん個人では難しいですよね。

まぁ、ちょうど今のアレイも容量がいっぱいいっぱいだったので、いい機会と思い、新しくディスクアレイを構築することにしました。今回の件でハードウェアRAIDはやめて完全ソフトウェアRAIDとすることで方針は決定(どーせお家サーバなので、性能はソフトウェアで十分)。

また、現状はRAID5ですが、今ならRAID6だろう、ということで、冗長化はRAID6に決定。

さて、方針が決まればどうやってそれを実現するかですが、

  • ZFS (Solaris, FreeBSD)
  • raid456.ko (Linux) ?

のどちらかしか選択肢はないようです。さすがRAID6。

で、ぐぐってみると、raid456はあんまりいい評判がないのです。というか、情報自体が少ない。対してZFSの方は、さすが商用だけあって、なかなかのものらしい。となれば、ZFSしか残らないわけですよ。

あとは、OpenSolarisかFreeBSDか、どっちかで組む、ということになるのですが、今使っているのがFreeBSDなので、FreeBSDでやってみる事に決定。バージョンを7.0に上げないといけないけど…

というわけで、ここからが本題。ZFS on FreeBSD 7.0-RELEASEの構築。

7.0-RELEASEに上げるのは本稿の目的から外れるので、さくっと省略。

で、今あるRAID5アレイのファイルをバックアップ。これは1TBのHDDを用意してコピーしただけ。

そしたら、今使っているRAIDカードと、それにつながっているHDDを全交換。もうRAIDコントローラの載ったカードじゃなくてもいいので、単なるSATA拡張カードAOC-SAT2-MV8と、500GB HDD×6台を搭載。

atacontrolで見てみると、こんな感じ。

# atacontrol list
ATA channel 0:
    Master:      no device present
    Slave:       no device present
ATA channel 1:
    Master:      no device present
    Slave:       no device present
ATA channel 2:
    Master:  ad4 <ST3500630AS/3.AAK> Serial ATA II
    Slave:       no device present
ATA channel 3:
    Master:  ad6 <ST3500320AS/SD15> Serial ATA II
    Slave:       no device present
ATA channel 4:
    Master:  ad8 <ST3500320AS/SD15> Serial ATA II
    Slave:       no device present
ATA channel 5:
    Master: ad10 <ST3500320AS/SD15> Serial ATA II
    Slave:       no device present
ATA channel 6:
    Master: ad12 <ST3500320AS/SD15> Serial ATA II
    Slave:       no device present
ATA channel 7:
    Master: ad14 <ST3500320AS/SD15> Serial ATA II
    Slave:       no device present
ATA channel 8:
    Master:      no device present
    Slave:       no device present
ATA channel 9:
    Master:      no device present
    Slave:       no device present
ATA channel 10:
    Master: ad20 <ST3250820AS/3.AAE> Serial ATA II
    Slave:       no device present
ATA channel 11:
    Master: ad22 <ST3250820AS/3.AAE> Serial ATA II
    Slave:       no device present
ATA channel 12:
    Master: ad24 <ST3320620AS/3.AAK> Serial ATA II
    Slave:       no device present
ATA channel 13:
    Master: ad26 <ST3320620AS/3.AAE> Serial ATA II
    Slave:       no device present

なんかすごいことになっています。ad20~ad26は今まで使っていた(これからも使うけど)/や/homeなどが入っているディスク。ad4~ad14までが新しくつないだディスク。ad4~ad14の6台を使ってZFSでRAID6のアレイを組みます。

まずは、ZFSのカーネルモジュールzfs.koのロード…と思ったけれども、何もしなくても、必要なときに勝手に読み込まれるみたい。なので、ちゃっちゃと進んじゃいます。

ZFSについての詳しい説明は他に譲る(参考資料参照)として、結果的には次の順で作業します。

  1. ストレージプールの作成
  2. ファイルシステムの作成

以上です。とってもシンプルです。実際の作業もシンプルです。実際の作業は次のようになります。

ストレージプールの作成は、今回RAID6とするのでraidz2を明示して

# zpool create zpool0 raidz2 /dev/ad4 /dev/ad6 /dev/ad8 /dev/ad10 /dev/ad12 /dev/ad14

これだけでおしまい。zpool statusコマンドで見てみると、

# zpool status
  pool: zpool0
state: ONLINE
scrub: none requested
config:


        NAME        STATE     READ WRITE CKSUM
        zpool0      ONLINE       0     0     0
          raidz2    ONLINE       0     0     0
            ad4     ONLINE       0     0     0
            ad6     ONLINE       0     0     0
            ad8     ONLINE       0     0     0
            ad10    ONLINE       0     0     0
            ad12    ONLINE       0     0     0
            ad14    ONLINE       0     0     0


errors: No known data errors

このように、zpool0というストレージプールができていることが分かります。この時点で、/zpool0にすでにマウントされてしまうのでそのまま使えるっぽいのだけど…

# mount
/dev/mirror/gm0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/mirror/gm0s1e on /tmp (ufs, local, soft-updates)
/dev/mirror/gm0s1f on /usr (ufs, NFS exported, local, soft-updates)
/dev/mirror/gm0s1d on /var (ufs, local, soft-updates)
/dev/mirror/gm1s1d on /home (ufs, local, soft-updates, acls)
procfs on /proc (procfs, local)
zpool0 on /zpool0 (zfs, local)
devfs on /var/named/dev (devfs, local)

次に、ファイルシステムの作成(?)をおこないます。今回は、zpool0から/backupと/recを切り出します。zfsコマンドで、マウントポイントを明示して、

# zfs create -o mountpoint=/backup zpool0/backup
# zfs create -o mountpoint=/rec zpool0/rec

これもこれだけでおしまい。手応え無し。(^^;)

# mount
/dev/mirror/gm0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/mirror/gm0s1e on /tmp (ufs, local, soft-updates)
/dev/mirror/gm0s1f on /usr (ufs, NFS exported, local, soft-updates)
/dev/mirror/gm0s1d on /var (ufs, local, soft-updates)
/dev/mirror/gm1s1d on /home (ufs, local, soft-updates, acls)
procfs on /proc (procfs, local)
zpool0/backup on /backup (zfs, local)
zpool0/rec on /rec (zfs, NFS exported, local)
zpool0 on /zpool0 (zfs, local)
devfs on /var/named/dev (devfs, local)

以上、完了。ちなみに、dfしてみると、

# df  -H
Filesystem            Size    Used   Avail Capacity  Mounted on
/dev/mirror/gm0s1a    520M    315M    164M    66%    /
devfs                 1.0k    1.0k      0B   100%    /dev
/dev/mirror/gm0s1e    260M     27M    212M    11%    /tmp
/dev/mirror/gm0s1f    154G    5.7G    136G     4%    /usr
/dev/mirror/gm0s1d    4.2G    1.4G    2.4G    38%    /var
/dev/mirror/gm1s1d    242G    177G     46G    79%    /home
procfs                4.1k    4.1k      0B   100%    /proc
zpool0/backup         769G     56G    713G     7%    /backup
zpool0/rec            1.9T    1.2T    713G    63%    /rec
zpool0                713G    131k    713G     0%    /zpool0
devfs                 1.0k    1.0k      0B   100%    /var/named/dev

てな感じ。ちょっとわかりにくい…

あとは、起動時にZFSのファイルシステムを自動でマウントするように、/etc/rc.confへzfs_enable="YES"を入れておく。これでおしまい。

まぁ、とりあえずZFSは拍子抜けするぐらい簡単に使えちゃうって事で。

参考資料:

| | コメント (0) | トラックバック (0)

« 2007年11月 | トップページ | 2008年8月 »