ZFSでやらかしたこと

FreeBSD

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に入れ替えできました。

コメント

タイトルとURLをコピーしました