ZFS分離プールのミラー化ドライブ

ZFS分離プールのミラー化ドライブ

私はFreeNASを実行する古い(2〜3年)NASを持っています。これでハードドライブをアップグレードする時が来たようです。現在の状態は次のとおりです。

    NAME        STATE     READ WRITE CKSUM                                  
    Pool1       ONLINE       0     0     0                                  
      raidz1    ONLINE       0     0     0                                  
        ada3p2  ONLINE       0     0     0                                  
        ada4p2  ONLINE       0     0     0                                  
        ada5p2  ONLINE       0     0     0                                  
      mirror    ONLINE       0     0     0                                  
        ada1p2  ONLINE       0     0     0                                  
        ada2p2  ONLINE       0     0     0 

RaidZ1のドライブはすべて1GBで、そのまま残ります。

RaidZ1に2つまたは3つの1 GBハードドライブを追加し、次の操作を行わずにミラードライブ(500 GBのみ)を完全に取り外す最善の方法は何ですか?

  • 一時保存場所にデータをコピーする
  • プールの再作成
  • 再コピー

プールが50%ほど満たされているため、ミラーリングされたドライブにデータがあるかどうかはわかりません。

確認する方法や開始位置は何ですか?

答え1

唯一の方法は、提案どおりに行うことです。すべてのデータセットを新しいプールにコピーし、プールを再構築することです。 zfs はドライブの追加による raidz1 拡張をサポートせず、トップレベルの vdev("ミラー") の削除もサポートしません。

答え2

短い答え:

RaidZ1にドライブを追加し、ミラードライブを完全に取り外す最善の方法は何ですか?いいえ:

  • 一時保存場所にデータをコピーする
  • プールの再作成
  • 再コピー

あなたはできません。期間。構成によっては、新しいプールを作成してコピーしないと、ミラーリングされたドライブを削除できません。特に、投稿時間を考慮すると、ZFSはプールからのVD​​EV削除をサポートしません。最近この問題が発生した読者の場合、この記事を書いた時点でzpool remove1つ以上のVDEVを含むプールからVDEVを削除することはサポートされていませんraidzzpool remove接続ディスクまたは接続ミラーの削除はサポートされていません。

長い答え:

raidz1ミラー vdev への vdev 接続の設定は少し珍しいです。新しいプールを作成し、既存のプールのデータを新しいプールにコピーしてから既存のプールを削除しないと、プールからミラーリングされたvdevを削除できません。

ただし、vdev構造を変更しない限り、現在のプールの容量を確実に拡張できます。

だから追加する代わりにもっとドライブに切り替えることができます。大きいドライバー。プールを各新しいドライブに一度に 1 つずつ再同期するには、複数の反復が必要ですが、比較的困難ではありません。ただし、ZFSは再同期時に従来のRAIDよりも効率的であるため、プールがいっぱいになっているかによって状況が悪くない可能性があります。

コアはこれです〜しなければならない一度に1つのディスクを完了します。まず、プールの完全かつテストされたバックアップがあることを確認してください。

これは、3つの1Gドライブとデバイス/ dev / md0〜/ dev / md2が設定されたテストサンドボックスです。各ドライブにはGPTパーティションテーブルがあります。

# gpart show md{0..2}
=>     40  2097072  md0  GPT  (1.0G)
       40      200    1  linux-swap  (100K)
      240  2096872    2  freebsd-zfs  (1.0G)

=>     40  2097072  md1  GPT  (1.0G)
       40      200    1  linux-swap  (100K)
      240  2096872    2  freebsd-zfs  (1.0G)

=>     40  2097072  md2  GPT  (1.0G)
       40      200    1  linux-swap  (100K)
      240  2096872    2  freebsd-zfs  (1.0G)

次のドライブでプールを作成しましたraidz1

# zpool create tank raidz1 /dev/md{0..2}p2
# zpool status tank; echo; zpool list tank
  pool: tank
 state: ONLINE
config:

    NAME        STATE     READ WRITE CKSUM
    tank        ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        md0p2   ONLINE       0     0     0
        md1p2   ONLINE       0     0     0
        md2p2   ONLINE       0     0     0

errors: No known data errors

NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH
tank  2.75G   196K  2.75G        -         -     0%     0%  1.00x    ONLINE

魅力的。それでは、/dev/md3、md4、md5 という 3 つの新しいドライブがあるとしましょう。ただし、このドライブは単なる1Gドライブではなく10Gドライブです。また、GPTパーティションテーブルが設定され、準備されています。

# gpart show md{3..5}
=>      40  20971440  md3  GPT  (10G)
        40       200    1  linux-swap  (100K)
       240  20971240    2  freebsd-zfs  (10G)

=>      40  20971440  md4  GPT  (10G)
        40       200    1  linux-swap  (100K)
       240  20971240    2  freebsd-zfs  (10G)

=>      40  20971440  md5  GPT  (10G)
        40       200    1  linux-swap  (100K)
       240  20971240    2  freebsd-zfs  (10G)

プールが重複しているので注意深い変える一つraidz1アレイ駆動一つその後、大きなドライブ待つプールが再同期されるようにした後、次のドライブを一度に1つずつ交換し続けます。offlineドライブを-ingし、アレイがまだ稼働していることを確認し、小さなドライブを大きなドライブに交換して最初の作業を完了します。

# zpool offline tank md0p2
# zpool status tank
  pool: tank
 state: DEGRADED
status: One or more devices has been taken offline by the administrator.
    Sufficient replicas exist for the pool to continue functioning in a
    degraded state.
action: Online the device using 'zpool online' or replace the device with
    'zpool replace'.
config:

    NAME        STATE     READ WRITE CKSUM
    tank        DEGRADED     0     0     0
      raidz1-0  DEGRADED     0     0     0
        md0p2   OFFLINE      0     0     0
        md1p2   ONLINE       0     0     0
        md2p2   ONLINE       0     0     0

errors: No known data errors

/dev/md0p2これで、1Gパーティションを10Gパーティションに置き換えることができます/dev/md3p2。実際、zpool offline上記のステップは必ずしも必要ではありません。このコマンドを直接実行できますzpool replace

# zpool replace tank md0p2 md3p2
# zpool status tank; echo; zpool list tank
  pool: tank
 state: ONLINE
  scan: resilvered 128K in 00:00:02 with 0 errors on Wed Oct 13 13:46:23 2021
config:

    NAME        STATE     READ WRITE CKSUM
    tank        ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        md3p2   ONLINE       0     0     0
        md1p2   ONLINE       0     0     0
        md2p2   ONLINE       0     0     0

errors: No known data errors

NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH
tank  2.75G   265K  2.75G        -         -     0%     0%  1.00x    ONLINE

再同期が完了しました。これは非常に重要です。プールに保存されているデータ量が多い場合は、zpool status tank再同期が完了するまで待機して確認する必要があります。

再同期が完了したら、2番目のディスクの交換を続行できます。

# zpool replace tank md1p2 md4p2

zpool statusもう一度、再同期が完了するまで待つ必要があります。

# zpool status tank
  pool: tank
 state: ONLINE
  scan: resilvered 134K in 00:00:03 with 0 errors on Wed Oct 13 13:54:17 2021
config:

    NAME        STATE     READ WRITE CKSUM
    tank        ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        md3p2   ONLINE       0     0     0
        md4p2   ONLINE       0     0     0
        md2p2   ONLINE       0     0     0

errors: No known data errors

これで再同期が完了したので、3番目の小さなディスクをより大きな交換用ディスクに交換します。

# zpool replace tank md2p2 md5p2
# zpool status tank; echo; zpool list tank
  pool: tank
 state: ONLINE
  scan: resilvered 146K in 00:00:03 with 0 errors on Wed Oct 13 14:55:56 2021
config:

    NAME        STATE     READ WRITE CKSUM
    tank        ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        md3p2   ONLINE       0     0     0
        md4p2   ONLINE       0     0     0
        md5p2   ONLINE       0     0     0

errors: No known data errors

NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH
tank  2.75G   319K  2.75G        -         -     0%     0%  1.00x    ONLINE

これで、古いコンパクトディスク md0 md1 と md2 はプールにはありません。プールは、より大きなディスク md3、md4、および md5 で実行されます。ただし、アレイをzpool拡張するように指示がないため、余分なスペースはありません。raidz1これは簡単です:

# zpool online -e tank md5p2
# zpool status tank; echo; zpool list tank
  pool: tank
 state: ONLINE
  scan: resilvered 146K in 00:00:03 with 0 errors on Wed Oct 13 14:55:56 2021
config:

    NAME        STATE     READ WRITE CKSUM
    tank        ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        md3p2   ONLINE       0     0     0
        md4p2   ONLINE       0     0     0
        md5p2   ONLINE       0     0     0

errors: No known data errors

NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH
tank  29.8G   394K  29.7G        -         -     0%     0%  1.00x    ONLINE

これで、3Gプールを使用する代わりに30Gプールを使用するようになりました。これは、ディスクを一度に1つずつ慎重に交換してからアレイを拡張する方法で行われます。

答え3

zpool scrubまず、変更前にすべてが正しく機能していることを確認するためにブートを検討できます。

メモリから離れて(したがって確認が必要です)、必要なオプションはzpool add既存のraidzプールを拡張できると思います。

データを簡単に移動するには、zfs send | receiveとスナップショットを使用した増分send | receiveを使用できます。

関連情報