
私は、ZFS を使用して Ubuntu 12.04 LTS サーバー システムの混乱を解消しようとしています。zpool status に表示される内容は次のとおりです。
pool: TB2
state: UNAVAIL
status: One or more devices could not be used because the label is missing
or invalid. There are insufficient replicas for the pool to continue
functioning.
action: Destroy and re-create the pool from
a backup source.
see: http://zfsonlinux.org/msg/ZFS-8000-5E
scan: none requested
config:
NAME STATE READ WRITE CKSUM
TB2 UNAVAIL 0 0 0 insufficient replicas
sdd ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0
sdg ONLINE 0 0 0
sdh ONLINE 0 0 0
sdi ONLINE 0 0 0
sdj ONLINE 0 0 0
sds ONLINE 0 0 0
sdt UNAVAIL 0 0 0
pool: TB4
state: DEGRADED
status: One or more devices could not be used because the label is missing or
invalid. Sufficient replicas exist for the pool to continue
functioning in a degraded state.
action: Replace the device using 'zpool replace'.
see: http://zfsonlinux.org/msg/ZFS-8000-4J
scan: resilvered 2.52T in 16h41m with 0 errors on Tue Feb 6 09:27:46 2018
config:
NAME STATE READ WRITE CKSUM
TB4 DEGRADED 0 0 0
raidz2-0 DEGRADED 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAG9MBVS ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK2311PAG8G71M ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAGH0LHV ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK2331PAG8MV3T ONLINE 0 0 0
spare-4 DEGRADED 0 0 0
ata-Hitachi_HDS724040ALE640_PK2311PAG614MM UNAVAIL 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAGH0EAV ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK2331PAGH2XRW ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAG7TGDS ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK1331PAGG3K0V ONLINE 0 0 0
ata-Hitachi_HDS724040ALE640_PK2311PAG59PYM ONLINE 0 0 0
spares
ata-Hitachi_HDS724040ALE640_PK1331PAGH0EAV INUSE currently in use
errors: No known data errors
やりたいことは 2 つあります。1. プール TB4 内の障害のあるドライブを交換します。この方法はわかっています。2. プール TB2 を完全に破壊して再作成します。
通常、zpool destroy TB2 を実行して最初からやり直します。しかし、以前の管理者は TB2 に sd* 名を使用し、TB4 にディスク ID を使用していました。/dev/disk/by-id を確認すると、TB4 ドライブの 2 つ (...71M と ...EAV) がそれぞれ /dev/sdj と /dev/sds にシンボリックリンクされていることがわかりました。しかし、これらの sdj と sds は両方とも TB2 プールの一部としてリストされています。zpool destroy TB2 を実行すると、TB4 プールのドライブが破損するのではないかと心配です。ドキュメントには、destroy はメンバー ディスクに書き込むと記載されているからです。ZFS に実際に書き込まずに TB2 を忘れさせる方法はありますか?
以前の管理者に、なぜ 2 つの異なる方法 (/dev/sd* と by-id) を使用したのか尋ねました。彼は、特定のハード ドライブへのドライブ文字の割り当ては、ブートごとに繰り返すことができないようだったので、TB4 を作成するときに by-id を使用したと言いました。TB2 と TB4 のこの絡み合いは、その結果だと思います。
私の現在の考えは、次のとおりです。
- マシンをシャットダウンする
- すべてのドライブを引き抜きます。
- リブート。
- zpool を破棄 -f TB2
- TB4ドライブをシャットダウンして再インストールする
- 別のマシンでTB2ドライブを再フォーマットする
- TB2 ドライブを再インストールし、ディスク ID (sd* ではない) を使用して新しいプールを作成します。
これは合理的だと思いますか? もっと簡単な方法はありますか?
この混乱から私を救ってくれる人がいれば感謝します。
マイケル
答え1
提案された方法はうまくいくように思えます。しかし、それは不必要に複雑でもあります。代わりに、次の方法を提案します。
zpool export TB2
これにより、プールに関連付けられているすべてのリソースがアンマウントされ、最初にを実行しない限り、システムはそれらの再マウント (およびそれらへの書き込み) を試行しませんzpool import
。- TB4 を修復します。(または、後で実行することもできます。)
zpool create <new pool> ...
(再度重複しないように、ディスクを ID で参照します)。これらのディスクがインポートされていないプールによって使用中であることが検出される可能性があるため、強制的に作成する必要がある場合があります。
手順のドライランを実行する場合は、TB4 ( zfs create -V 5gb TB4/volume1
) にいくつかのボリュームを作成し、それらからzpool create testpool1 ...
重複するボリュームを持つ 2 つの「ネストされたプール」 ( ) を作成できると思います。その他はすべて上記と同じように動作するはずです。