zpool statusを見ていたら1本逝っている。
早速交換しましたが、途中でチョンボがあって変な構成になってしまったから replace は諦めてSNAPから戻すことになりました。
最終的には元の状態に戻ったのですが、zpool import を実行すると
pool: bootdir
id: 17408712702622179860
state: UNAVAIL
status: The pool was last accessed by another system.
action: The pool cannot be imported due to damaged devices or data.
see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-EY
config:
bootdir UNAVAIL insufficient replicas
mirror-0 UNAVAIL insufficient replicas
gpt/udisk0 FAULTED corrupted data
gpt/udisk1 FAULTED corrupted data
gpt/udisk2 FAULTED corrupted data
ada3 UNAVAIL cannot open
これが表示される。 zpool statusをやると、 ada3にアクセスできないとかでる。
正常にアクセスできるデータセットであれば、zpool import 17408712702622179860 とかやればIDで importできるけど、破棄されたデータセットにはアクセスできないと表示される。
このような状況においては、zfs destroy や clearなんかも効かない。WEBを徘徊していると wipefsを使えばできたと言う情報もあった。FreeBSDのポートには無かったから更に探すと wipefs はZFSに考慮されているわけではないから使うべきじゃないと書かれていた。 zpool labelclear -f を使えと書いてある。
zpool importしてこの表示がでたときは、 デバイスがアクティブと認識されて zpool labelclearは機能されない。この場合は、 kldunload zfs とかやってから、zpool labelclearを -f をつけないでやってみる。
use '-f' to override the following error:
/dev/ada3 is a member of potentially active pool "bootdir"
と表示されて、目的のメタ情報だと確認取れた。続いて -f を付けて実行すると綺麗に消えた。
# zpool lableclear -f ada3
# zpool import
no pools available to import
zfs sendを使ったことが原因なのかもしれないが、
pool: bootd
state: ONLINE
status: Mismatch between pool hostid and system hostid on imported pool.
This pool was previously imported into a system with a different hostid,
and then was verbatim imported into this system.
action: Export this pool on all systems on which it is imported.
Then import it to correct the mismatch.
see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-EY
config:
zpool import -f bootd とかやっても読み込めるだけで、書き換わるわけではないようだ。
今回は1本で助かったが、2本逝ったらアウトなのでパリティを増やした。
pool: zroot
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
gpt/disk0 ONLINE 0 0 0
gpt/disk1 ONLINE 0 0 0
gpt/disk2 ONLINE 0 0 0
gpt/disk3 ONLINE 0 0 0
zpool create -f zroot raidz2 /dev/gpt/disk0 /dev/gpt/disk1 \
/dev/gpt/disk2 /dev/gpt/disk3
pool: zroot
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
gpt/disk0 ONLINE 0 0 0
gpt/disk1 ONLINE 0 0 0
gpt/disk2 ONLINE 0 0 0
gpt/disk3 ONLINE 0 0 0
少しは安全性が上がったかな。
SNAPを取ってから、 zfs sendを使って バイトストリームを sshをつかって他のZFSに送ると簡単にバックアップ取れます。普段は、 zroot:system と言うデータセットを使っているから、zoot を作ってから zroot:systemを作りました。zfs send の送り先にはデータセットが存在すると送れないので、この下にsendbackします。あっさりと、 raidzから raidz2に入れ替えできました。
コメント