私は少し読んでいますが、それは ZFSはディスクが非冗長アレイから削除されることを好みません :
zpool detach
コマンドを使用して、ミラーリングされたストレージプールからデバイスを切り離します。例えば:# zpool detach zeepool c2t1d0
ただし、データの有効なレプリカが他にない場合、この操作は拒否されます。例えば:
# zpool detach newpool c1t2d0 cannot detach c1t2d0: only applicable to mirror and replacing vdevs
基本的な問題は理解できます。配列からデータの一部(メタデータまたはペイロードデータ)の唯一のコピーを削除すると、そのデータは使用できなくなります。
ZFSストレージプールのデバイスの交換 の例は、ストレージプールのデバイスを交換する方法の基本的な段階的な説明を提供します。ディスクをオフラインにし、ディスクを取り外し、交換用ディスクを挿入します。実行zpool replace
ZFSに変更を通知し、ディスクをオンラインにします。これには明らかに、アレイが交換されるディスクに依存しないことが必要であるため、アレイには冗長性が必要です。問題のドライブに依存している場合、このアプローチでは上記と同じ問題が発生します。
非冗長ZFSアレイのディスクを交換するの推奨される方法は何ですか?
既存のディスクが正常に動作していると想定し、交換用ディスクは少なくとも交換されるディスクと同じサイズであると想定します。 (既存のディスクに障害が発生した場合、明らかにできることは、新しいディスクを追加して、ディスク障害の影響を受けるすべてのファイルをバックアップから復元することだけです。)
`13では状況がそれほど異なっていたかどうかはわかりませんが、「zfs replace」は非冗長プールで機能します。最初にデタッチする代わりに、1コマンドを実行するだけです。
d1は1G、d2は2G、どちらも/ tmp内の空のファイルです。
/t/test #> zpool create test /tmp/test/d1
/t/test #> zpool set autoexpand=on test
/t/test #> zpool status
pool: test
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
test ONLINE 0 0 0
/tmp/test/d1 ONLINE 0 0 0
errors: No known data errors
/t/test #> zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
test 1008M 258K 1008M - 0% 0% 1.00x ONLINE -
/t/test #> zpool replace test /tmp/test/d1 /tmp/test/d2
/t/test #> zpool status
pool: test
state: ONLINE
scan: resilvered 61K in 0h0m with 0 errors on Sun Sep 18 18:55:32 2016
config:
NAME STATE READ WRITE CKSUM
test ONLINE 0 0 0
/tmp/test/d2 ONLINE 0 0 0
errors: No known data errors
/t/test #> zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
test 1.98G 408K 1.98G - 0% 0% 1.00x ONLINE -
zpool attach pool old-disk new-disk
これにより、old-diskがold-diskとnew-diskの両方を持つミラーに変換され、再同期が開始されます。その後、古いディスクを切り離すことができます。
zpool detach pool old-disk
ループデバイスでテスト済み:
# truncate -s 1G a b
# truncate -s 1200M c
# losetup /dev/loop0 a
# losetup /dev/loop1 b
# losetup /dev/loop2 c
# zpool create test loop{0,1}
# zpool attach test loop1 loop2
# zpool status
pool: test
state: ONLINE
scan: resilvered 62K in 0h0m with 0 errors on Wed Jul 31 13:43:19 2013
config:
NAME STATE READ WRITE CKSUM
test ONLINE 0 0 0
loop0 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
loop1 ONLINE 0 0 0
loop2 ONLINE 0 0 0
# zpool detach test loop1
# zpool status
pool: test
state: ONLINE
scan: resilvered 62K in 0h0m with 0 errors on Wed Jul 31 13:43:19 2013
config:
NAME STATE READ WRITE CKSUM
test ONLINE 0 0 0
loop0 ONLINE 0 0 0
loop2 ONLINE 0 0 0