私は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はプールからのVDEV削除をサポートしません。最近この問題が発生した読者の場合、この記事を書いた時点でzpool remove
1つ以上のVDEVを含むプールからVDEVを削除することはサポートされていませんraidz
。 zpool 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を使用できます。