パスワードを忘れた? アカウント作成
63097 journal

Ab.の日記: RAIDZ のデバイスを大きいものに順次 replace してみるテスト

日記 by Ab.
というわけで Solaris ZFS 管理ガイド「ストレージプール内のデバイスを置き換える」

置き換えたあとのデバイスの方が大きい場合は、置き換えが完了すると、プールの容量が大きくなります。

と書かれていたのがどのレベルで有効なのか気になって試してみました。

とりあえず 1G x4 の stripe set を作成して1Gのファイルを作ってみます。

# zpool create tank ad0s2d ad0s2e ad0s2f ad0s3d
# zpool list ; zpool status -v
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
tank                   3.97G    114K   3.97G     0%  ONLINE     -
  pool: tank
state: ONLINE
scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          ad0s2d    ONLINE       0     0     0
          ad0s2e    ONLINE       0     0     0
          ad0s2f    ONLINE       0     0     0
          ad0s3d    ONLINE       0     0     0

errors: No known data errors
# dd if=/dev/zero bs=1M count=1024 of=/tank/x
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 9.590792 secs (111955491 bytes/sec)
# ll /tank/
total 1048764
-rw-r--r--  1 root  wheel  1073741824 Feb 20 01:15 x
# zpool list ; zpool status -v
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
tank                   3.97G   1.00G   2.97G    25%  ONLINE     -
  pool: tank
state: ONLINE
scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          ad0s2d    ONLINE       0     0     0
          ad0s2e    ONLINE       0     0     0
          ad0s2f    ONLINE       0     0     0
          ad0s3d    ONLINE       0     0     0

errors: No known data errors
# zpool destroy tank

トータルサイズは約4G、ディスク消費は 1.00G。

次は 1G x4 で raidz を作ってみます。

# zpool create tank raidz ad0s2d ad0s2e ad0s2f ad0s3d
# dd if=/dev/zero bs=1M count=1024 of=/tank/x
1024+0 records in
1024+0 records out
1073741824 bytes transferred in 20.177276 secs (53215401 bytes/sec)
# zpool list ; zpool status -v
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
tank                   3.97G   1.34G   2.63G    33%  ONLINE     -
  pool: tank
state: ONLINE
scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz1    ONLINE       0     0     0
            ad0s2d  ONLINE       0     0     0
            ad0s2e  ONLINE       0     0     0
            ad0s2f  ONLINE       0     0     0
            ad0s3d  ONLINE       0     0     0

errors: No known data errors

転送速度は半分になってしまいました。あと、1Gのファイルを作ったのにpoolの消費は1.34Gです。
これはパリティデータの分まで含めたサイズになってる訳ですね。

で、上から順に2Gのパーティションに置き換えていってみます。

# zpool replace tank ad0s2d ad0s2g
# zpool replace tank ad0s2e ad0s2h
# zpool replace tank ad0s2f ad0s3e
# zpool list ; zpool status -v
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
tank                   3.97G   1.34G   2.63G    33%  ONLINE     -
  pool: tank
state: ONLINE
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, 35.37% done, 0h0m to go
config:

        NAME           STATE     READ WRITE CKSUM
        tank           ONLINE       0     0     0
          raidz1       ONLINE       0     0     0
            ad0s2g     ONLINE       0     0     0
            ad0s2h     ONLINE       0     0     0
            replacing  ONLINE       0     0     0
              ad0s2f   ONLINE       0     0     0
              ad0s3e   ONLINE       0     0     0
            ad0s3d     ONLINE       0     0     0

errors: No known data errors
# zpool export tank ; zpool import tank
# zpool list ; zpool status -v
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
tank                   3.97G   1.34G   2.63G    33%  ONLINE     -
  pool: tank
state: ONLINE
scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz1    ONLINE       0     0     0
            ad0s2g  ONLINE       0     0     0
            ad0s2h  ONLINE       0     0     0
            ad0s3e  ONLINE       0     0     0
            ad0s3d  ONLINE       0     0     0

errors: No known data errors

3つまで置き換えてもpoolのsizeは同じままです。

最後の1Gパーティションを置き換えます。

# zpool replace tank ad0s3d ad0s2a
# zpool list ; zpool status -v
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
tank                   3.97G   1.34G   2.63G    33%  ONLINE     -
  pool: tank
state: ONLINE
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, 23.28% done, 0h0m to go
config:

        NAME           STATE     READ WRITE CKSUM
        tank           ONLINE       0     0     0
          raidz1       ONLINE       0     0     0
            ad0s2g     ONLINE       0     0     0
            ad0s2h     ONLINE       0     0     0
            ad0s3e     ONLINE       0     0     0
            replacing  ONLINE       0     0     0
              ad0s3d   ONLINE       0     0     0
              ad0s2a   ONLINE       0     0     0

errors: No known data errors
# zpool export tank ; zpool import tank
# zpool list ; zpool status -v
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
tank                   3.97G   1.34G   2.63G    33%  ONLINE     -
  pool: tank
state: ONLINE
scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz1    ONLINE       0     0     0
            ad0s2g  ONLINE       0     0     0
            ad0s2h  ONLINE       0     0     0
            ad0s3e  ONLINE       0     0     0
            ad0s2a  ONLINE       0     0     0

errors: No known data errors

あれ? export して import してもサイズが変わりません。
慌てず騒がずもう一回。

# zpool export tank ; zpool import tank
# zpool list ; zpool status -v
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
tank                   7.97G   1.34G   6.63G    16%  ONLINE     -
  pool: tank
state: ONLINE
scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz1    ONLINE       0     0     0
            ad0s2g  ONLINE       0     0     0
            ad0s2h  ONLINE       0     0     0
            ad0s3e  ONLINE       0     0     0
            ad0s2a  ONLINE       0     0     0

errors: No known data errors

めでたく容量が倍になりました。
やはり最小容量デバイスの単位で構成される模様です。
おそらく 500G と 750G の混在の場合に 750G の方を500G+250Gのパーティションに切って別々にpoolを作れば有効活用出来るでしょうけど、それはそれで管理が面倒そうなので止めておいた方がよさそうかな。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

Stableって古いって意味だっけ? -- Debian初級

読み込み中...