RAID Z2 のディスクを容量アップのために交換してみた

2012年8月に作成したRAID Z2 のディスク容量が流石に90%近くになってきたのと、7年近く動作しっぱなしなので、容量アップのためにディスクを交換してみた。

一般的にディスク交換というと故障時を想定され、検索しても殆どそういう事例ばっかり。

今回はRAID Z2プールの容量を増やすためにディスク交換をします。

3TB (WDC WD30EZRX-00MMMB0) x5 (利用容量 9TB)

6TB (WDC WD60EZRZ-00GZ5B1) x5 (利用容量 18TB)

以下の様に設定すると、自動的にプールを構成する最小のディスクまで容量を拡大します。

zpool set autoexpand=on プール名

 

交換前の状況

# zfs list z2
NAME   USED  AVAIL  REFER  MOUNTPOINT
z2    7.12T   712G   369K  /z2
# zpool list z2
NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
z2    13.6T  12.0T  1.60T        -         -    29%    88%  1.00x  ONLINE  -
# zpool status z2   
  pool: z2
 state: ONLINE
  scan: scrub repaired 0 in 0 days 21:21:01 with 0 errors on Tue Dec 31 13:08:15 2013
config:

        NAME         STATE     READ WRITE CKSUM
        z2           ONLINE       0     0     0
          raidz2-0   ONLINE       0     0     0
            ada2     ONLINE       0     0     0
            ada3     ONLINE       0     0     0
            ada4     ONLINE       0     0     0
            ada5     ONLINE       0     0     0
            ada6     ONLINE       0     0     0
        logs
          gpt/ZIL    ONLINE       0     0     0
        cache
          gpt/L2ARC  ONLINE       0     0     0

errors: No known data errors
# zfs get all z2                    
NAME  PROPERTY              VALUE                  SOURCE 
z2    type                  filesystem             -      
z2    creation              Sun Aug 12  5:31 2012  -
z2    used                  7.12T                  -
z2    available             712G                   -
z2    referenced            369K                   -
z2    compressratio         1.00x                  -      
z2    mounted               yes                    -      
z2    quota                 none                   default
z2    reservation           none                   default
z2    recordsize            128K                   default
z2    mountpoint            /z2                    default
z2    sharenfs              off                    default
z2    checksum              on                     default
z2    compression           off                    default
z2    atime                 off                    local
z2    devices               on                     default
z2    exec                  on                     default
z2    setuid                on                     default
z2    readonly              off                    default
z2    jailed                off                    default
z2    snapdir               hidden                 default
z2    aclmode               discard                default
z2    aclinherit            restricted             default
z2    createtxg             1                      -
z2    canmount              on                     default
z2    xattr                 off                    temporary
z2    copies                1                      default
z2    version               5                      -
z2    utf8only              off                    -
z2    normalization         none                   -
z2    casesensitivity       sensitive              -
z2    vscan                 off                    default
z2    nbmand                off                    default
z2    sharesmb              off                    default
z2    refquota              none                   default
z2    refreservation        none                   default
z2    guid                  1104726788245315386    -
z2    primarycache          all                    default
z2    secondarycache        all                    default
z2    usedbysnapshots       0                      -
z2    usedbydataset         369K                   -
z2    usedbychildren        7.12T                  -
z2    usedbyrefreservation  0                      -
z2    logbias               latency                default
z2    dedup                 off                    default
z2    mlslabel                                     -
z2    sync                  standard               default
z2    dnodesize             legacy                 default
z2    refcompressratio      1.00x                  -
z2    written               369K                   -
z2    logicalused           7.12T                  -
z2    logicalreferenced     42K                    -
z2    volmode               default                default
z2    filesystem_limit      none                   default
z2    snapshot_limit        none                   default
z2    filesystem_count      none                   default
z2    snapshot_count        none                   default
z2    redundant_metadata    all                    default
# zpool get all z2
NAME  PROPERTY                       VALUE                          SOURCE
z2    size                           13.6T                          -
z2    capacity                       88%                            -
z2    altroot                        -                              default
z2    health                         ONLINE                         -
z2    guid                           17706325187021212029           default
z2    version                        -                              default
z2    bootfs                         -                              default
z2    delegation                     on                             default
z2    autoreplace                    off                            default
z2    cachefile                      -                              default
z2    failmode                       wait                           default
z2    listsnapshots                  off                            default
z2    autoexpand                     on                             local
z2    dedupditto                     0                              default
z2    dedupratio                     1.00x                          -
z2    free                           1.60T                          -
z2    allocated                      12.0T                          -
z2    readonly                       off                            -
z2    comment                        -                              default
z2    expandsize                     -                              -
z2    freeing                        0                              default
z2    fragmentation                  29%                            -
z2    leaked                         0                              default
z2    bootsize                       -                              default
z2    checkpoint                     -                              -
z2    feature@async_destroy          enabled                        local
z2    feature@empty_bpobj            active                         local
z2    feature@lz4_compress           active                         local
z2    feature@multi_vdev_crash_dump  enabled                        local
z2    feature@spacemap_histogram     active                         local
z2    feature@enabled_txg            active                         local
z2    feature@hole_birth             active                         local
z2    feature@extensible_dataset     enabled                        local
z2    feature@embedded_data          active                         local
z2    feature@bookmarks              enabled                        local
z2    feature@filesystem_limits      enabled                        local
z2    feature@large_blocks           enabled                        local
z2    feature@large_dnode            enabled                        local
z2    feature@sha512                 enabled                        local
z2    feature@skein                  enabled                        local
z2    feature@device_removal         enabled                        local
z2    feature@obsolete_counts        enabled                        local
z2    feature@zpool_checkpoint       enabled                        local
z2    feature@spacemap_v2            active                         local
# zdb
z2:
    version: 5000
    name: 'z2'
    state: 0
    txg: 32269787
    pool_guid: 17706325187021212029
    hostid: 816742863
    hostname: ''
    com.delphix:has_per_vdev_zaps
    vdev_children: 2
    vdev_tree:
        type: 'root'
        id: 0
        guid: 17706325187021212029
        children[0]:
            type: 'raidz'
            id: 0
            guid: 480424028443515338
            nparity: 2
            metaslab_array: 30
            metaslab_shift: 37
            ashift: 12
            asize: 15002940211200
            is_log: 0
            create_txg: 4
            com.delphix:vdev_zap_top: 144
            children[0]:
                type: 'disk'
                id: 0
                guid: 17236174214164006938
                path: '/dev/ada2'
                phys_path: '/dev/ada2'
                whole_disk: 1
                create_txg: 4
                com.delphix:vdev_zap_leaf: 145
            children[1]:
                type: 'disk'
                id: 1
                guid: 18399679726301555998
                path: '/dev/ada3'
                phys_path: '/dev/ada3'
                whole_disk: 1
                create_txg: 4
                com.delphix:vdev_zap_leaf: 146
            children[2]:
                type: 'disk'
                id: 2
                guid: 3607248189321886847
                path: '/dev/ada4'
                phys_path: '/dev/ada4'
                whole_disk: 1
                create_txg: 4
                com.delphix:vdev_zap_leaf: 147
            children[3]:
                type: 'disk'
                id: 3
                guid: 17629066748135742555
                path: '/dev/ada5'
                phys_path: '/dev/ada5'
                whole_disk: 1
                create_txg: 4
                com.delphix:vdev_zap_leaf: 148
            children[4]:
                type: 'disk'
                id: 4
                guid: 15125946159616034421
                path: '/dev/ada6'
                phys_path: '/dev/ada6'
                whole_disk: 1
                create_txg: 4
                com.delphix:vdev_zap_leaf: 194
        children[1]:
            type: 'disk'
            id: 1
            guid: 16638564188068972173
            path: '/dev/gpt/ZIL'
            phys_path: '/dev/gpt/ZIL'
            whole_disk: 1
            metaslab_array: 104
            metaslab_shift: 27
            ashift: 12
            asize: 17175150592
            is_log: 1
            create_txg: 8785109
            com.delphix:vdev_zap_leaf: 195
            com.delphix:vdev_zap_top: 196
    features_for_read:
        com.delphix:hole_birth
        com.delphix:embedded_data

 

交換

事前にVirtualBox で検証した結果、以下の方法で行いました。

1. シャットダウン

2. HDDを1台交換

3.起動

通常に起動するが、Raid Z2は壊れている状態。
以下は、構成するHDDが利用できない状態。
ada2に新しいHDDが接続されている。

# zpool status z2
  pool: z2
 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://illumos.org/msg/ZFS-8000-2Q
  scan: scrub repaired 0 in 0 days 21:21:01 with 0 errors on Tue Dec 31 13:08:15 2013
config:

	NAME                      STATE     READ WRITE CKSUM
	z2                        DEGRADED     0     0     0
	  raidz2-0                DEGRADED     0     0     0
	    17236174214164006938  UNAVAIL      0     0     0  was /dev/ada2
	    ada3                  ONLINE       0     0     0
	    ada4                  ONLINE       0     0     0
	    ada5                  ONLINE       0     0     0
	    ada6                  ONLINE       0     0     0
	logs
	  gpt/ZIL                 ONLINE       0     0     0
	cache
	  gpt/L2ARC               ONLINE       0     0     0

errors: No known data errors

4. RAID Z2 プールを構成するHDDを交換

ここでは、同じポートに換装しているので、そのまま以前の guid と新しいHDDのデバイス名を指定します。

# zpool replace z2 17236174214164006938 ada2

5. RAID Z2内で交換作業が始まる

ここらへんは故障時の交換と何ら変わらないです。

# zpool status z2
  pool: z2
 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 14 21:10:45 2019
	2.94T scanned at 2.62G/s, 294G issued at 261M/s, 12.0T total
	58.6G resilvered, 2.39% done, 0 days 13:04:40 to go
config:

	NAME                        STATE     READ WRITE CKSUM
	z2                          DEGRADED     0     0     0
	  raidz2-0                  DEGRADED     0     0     0
	    replacing-0             UNAVAIL      0     0     0
	      17236174214164006938  UNAVAIL      0     0     0  was /dev/ada2/old
	      ada2                  ONLINE       0     0     0
	    ada3                    ONLINE       0     0     0
	    ada4                    ONLINE       0     0     0
	    ada5                    ONLINE       0     0     0
	    ada6                    ONLINE       0     0     0
	logs
	  gpt/ZIL                   ONLINE       0     0     0
	cache
	  gpt/L2ARC                 ONLINE       0     0     0

errors: No known data errors

6. HDD1台交換完了

大体12時間位かかった。
この時点では容量は増えないです。

# zpool status z2                 
  pool: z2
 state: ONLINE
  scan: resilvered 2.40T in 0 days 14:21:55 with 0 errors on Fri Mar 15 11:32:40 2019
config:

	NAME         STATE     READ WRITE CKSUM
	z2           ONLINE       0     0     0
	  raidz2-0   ONLINE       0     0     0
	    ada2     ONLINE       0     0     0
	    ada3     ONLINE       0     0     0
	    ada4     ONLINE       0     0     0
	    ada5     ONLINE       0     0     0
	    ada6     ONLINE       0     0     0
	logs
	  gpt/ZIL    ONLINE       0     0     0
	cache
	  gpt/L2ARC  ONLINE       0     0     0

errors: No known data errors

7.  1〜6の手順を残り4台分繰り返す

8. 完了

大体4日くらいで5台交換完了しました。
容量はそのまま倍増

# zfs list z2
NAME   USED  AVAIL  REFER  MOUNTPOINT
z2    7.12T  8.50T   369K  /z2
# zpool list z2
NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
z2    27.2T  12.0T  15.2T        -         -    14%    44%  1.00x  ONLINE  -

ベンチマーク

とりあえず、OSやsambaも最新だったりするので、完璧な比較ではないが、速度は当時よりは向上している。

交換後

交換前(作成当時2012年)

今まで使っていた3TBはWD Greenでありながら、6年半以上ほぼ無停止にかかかわらず、ノントラブルでした。しかもIntelliParkは有効でデフォの8秒のまま。

以下は交換前の主なS.M.A.R.T.値

  • Power_On_Hours 57650
  • Load_Cycle_Count は47万回以上
  • エラーは無し

今回は、WD Blueでほぼ同じスペックですが、故障率が上がるということなので、無効にしました。

だいたい、2012年当時と比べて、共有サービスとして動かしているのは動かしているのはSambaとNextCloudくらいですが、未だにデスクトップ兼サーバーとして動かしています。
(もちろんこのサイトもjail内に作成しています)

システムも当時からすぐ(2012年9月)にリプレースしたりして、現在は以下の通り

OS

FreeBSD 12-STABLE GENERIC  amd64

スペック

CPU i7 3770K
MB P8Z77-V PRO
MEM 32GB
電源 Corsair 600W
GPU Geforce GTX 960 2GB

ストレージ

SSD TOSHIBA THNSNH256GCST 256GB (システム用 ZFS root)
SSD INTEL SSDSA2CW120G3 (L2ARC ZIL用)
HDD WD60EZRZ-00GZ5B1 x 5台 (RAID Z2用)

 

RAID Z2 のディスクを容量アップのために交換してみた」への2件のフィードバック

  1. yasutaka

    初めてコメントいたします。
    少し疑問に感じたのですが、poolの容量を増やすときにautoexpandを使用されたのでしょうか?
    7TBもご使用されていたのでしたら、外付けUSB 3の8bayケース等にHDDを入れてraidz 2 で新しくプールを作って rsyncやcpコマンドでデータをコピーして後で旧いdiskを交換して、import時にpool名を変えたら1日で完了したのではと感じました。何か特別な良い理由があったのでしょうか。

    >>ディスク交換というと故障時を想定
    確かにそうですね。

    実は、kvm 内の使用しているのですが、zvol 容量を増やしてゲストOSのubuntuで使用しているrpool自体のautoexpandが有効かどうかを検索していてこちらを読ませていただきました。
    zvolはrootシステムで使用しているのですがsanpshotが自動で増加するので今後の事を考えて100G単位で増加させることを念頭にテストをしています。まだ解決できておりません。orz
    興味深いご投稿でしたのでコメントいたしました。

    また拝見させていただきます。

    返信
  2. anonymous 投稿作成者

    コメントありがとうございます!

    >>poolの容量を増やすときにautoexpandを使用されたのでしょうか?

    そうですね。冒頭にあるとおり、autoexpandを有効にしています。

    >>7TBもご使用されていたのでしたら、外付けUSB 3の8bayケース等にHDDを入れてraidz 2 で新しくプールを作って rsyncやcpコマンドでデータをコピーして後で旧いdiskを交換して、import時にpool名を変えたら1日で完了したのではと感じました。何か特別な良い理由があったのでしょうか。

    第一にそのまま利用しつつ、移行したかったからです。
    また、一時的なデータの移動のためだけに、無駄な出費をかけたくなかったからです。
    値段も3万くらいしますし、それを回避するためにこの方法を選びました。

    返信

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください