web-dev-qa-db-ja.com

zpoolが再同期ループで動かなくなった

次のzpoolがあります。

    NAME                        STATE     READ WRITE CKSUM
    zfspool                     ONLINE       0     0     0
      mirror-0                  ONLINE       0     0     0
        wwn-0x5000cca266f3d8ee  ONLINE       0     0     0
        wwn-0x5000cca266f1ae00  ONLINE       0     0     0

今朝ホストはイベントを経験しました(まだそれを掘り下げています。負荷が非常に高く、多くのものが機能していませんでしたが、それでも私はそれに入ることができました)。

再起動時に、ホストは起動中に上記のプールのデータに依存するサービスを待機してハングしました。

プールに問題があると思われるので、ドライブの1つを取り外して再起動しました。今回、ホストがオンラインになりました。

スクラブにより、既存のディスク上のすべてのデータに問題がないことがわかりました。それが完了したら、取り外したドライブを再度挿入しました。ドライブは再同期化を開始しましたが、約4%を取得してから再起動します。

smartctlは、どちらのドライブでも問題を示しません(エラーは記録されず、WHEN_FAILEDは空です)。

ただし、どのディスクが再同期化されているかはわかりません。実際、プールは正常で、再同期化する必要がないように見えます。

errors: No known data errors
root@Host1:/var/log# zpool status
  pool: zfspool
 state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Sun Dec  8 12:20:53 2019
        46.7G scanned at 15.6G/s, 45.8G issued at 15.3G/s, 5.11T total
        0B resilvered, 0.87% done, 0 days 00:05:40 to go
config:

        NAME                        STATE     READ WRITE CKSUM
        zfspool                     ONLINE       0     0     0
          mirror-0                  ONLINE       0     0     0
            wwn-0x5000cca266f3d8ee  ONLINE       0     0     0
            wwn-0x5000cca266f1ae00  ONLINE       0     0     0

errors: No known data errors

この再同期ループから抜け出すための最良のコースは何ですか?他の回答は、回復中のドライブを切り離すことを提案していますが、私が言ったように、どちらもそうではありません。

編集:

zpoolイベントは、以下の繰り返しの約1000回です。

Dec  8 2019 13:22:12.493980068 sysevent.fs.zfs.resilver_start
        version = 0x0
        class = "sysevent.fs.zfs.resilver_start"
        pool = "zfspool"
        pool_guid = 0x990e3eff72d0c352
        pool_state = 0x0
        pool_context = 0x0
        time = 0x5ded4d64 0x1d7189a4
        eid = 0xf89

Dec  8 2019 13:22:12.493980068 sysevent.fs.zfs.history_event
        version = 0x0
        class = "sysevent.fs.zfs.history_event"
        pool = "zfspool"
        pool_guid = 0x990e3eff72d0c352
        pool_state = 0x0
        pool_context = 0x0
        history_hostname = "Host1"
        history_internal_str = "func=2 mintxg=7381953 maxtxg=9049388"
        history_internal_name = "scan setup"
        history_txg = 0x8a192e
        history_time = 0x5ded4d64
        time = 0x5ded4d64 0x1d7189a4
        eid = 0xf8a

Dec  8 2019 13:22:17.485979213 sysevent.fs.zfs.history_event
        version = 0x0
        class = "sysevent.fs.zfs.history_event"
        pool = "zfspool"
        pool_guid = 0x990e3eff72d0c352
        pool_state = 0x0
        pool_context = 0x0
        history_hostname = "Host1"
        history_internal_str = "errors=0"
        history_internal_name = "scan aborted, restarting"
        history_txg = 0x8a192f
        history_time = 0x5ded4d69
        time = 0x5ded4d69 0x1cf7744d
        eid = 0xf8b

Dec  8 2019 13:22:17.733979170 sysevent.fs.zfs.history_event
        version = 0x0
        class = "sysevent.fs.zfs.history_event"
        pool = "zfspool"
        pool_guid = 0x990e3eff72d0c352
        pool_state = 0x0
        pool_context = 0x0
        history_hostname = "Host1"
        history_internal_str = "errors=0"
        history_internal_name = "starting deferred resilver"
        history_txg = 0x8a192f
        history_time = 0x5ded4d69
        time = 0x5ded4d69 0x2bbfa222
        eid = 0xf8c

Dec  8 2019 13:22:17.733979170 sysevent.fs.zfs.resilver_start
        version = 0x0
        class = "sysevent.fs.zfs.resilver_start"
        pool = "zfspool"
        pool_guid = 0x990e3eff72d0c352
        pool_state = 0x0
        pool_context = 0x0
        time = 0x5ded4d69 0x2bbfa222
        eid = 0xf8d

...
1
John Moffitt

これは解決されました。

Githubの次の問題が答えを提供しました:

https://github.com/zfsonlinux/zfs/issues/9551

この場合の赤旗は、おそらく"starting deferred resilver"に見られるように、急速にループしているzpool events -vイベントです。

リンクの最初の提案は、zfs-zedサービスを無効にすることでした。私の場合、そもそも有効化されていません。

2番目の提案は、zpoolでdefer_resilver機能がアクティブ化されていることを確認することでした。そのアップグレードに対応する機能を有効にせずにプールをアップグレードすると、潜在的な問題があるようです。このプールは過去2年ほどで複数のマシン/オペレーティングシステムから移動されたため、古いバージョンのZFSで作成され、最新のホストの新しいバージョンのZFS上にある可能性があります。

root@Host1:/# zpool get all | grep feature
...
zfspool  feature@resilver_defer         disabled                       local
...

これを見た後、機能を有効にしました。 githubリンクはこれが危険だと示唆しているようですので、バックアップがあることを確認してください。

root@Host1:/# zpool set feature@resilver_defer=enabled zfspool

その後、zpool statusは、以前よりもresilverがさらに進んでいることを示しています。

root@Host1:/# zpool status
  pool: zfspool
 state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
  scan: resilver in progress since Sun Dec  8 13:53:43 2019
        847G scanned at 2.03G/s, 396G issued at 969M/s, 5.11T total
        0B resilvered, 7.56% done, 0 days 01:25:14 to go
config:

        NAME                        STATE     READ WRITE CKSUM
        zfspool                     ONLINE       0     0     0
          mirror-0                  ONLINE       0     0     0
            wwn-0x5000cca266f3d8ee  ONLINE       0     0     0
            wwn-0x5000cca266f1ae00  ONLINE       0     0     0

errors: No known data errors
1
John Moffitt