zfs の send/recv で旧サーバから新サーバにスナップショット転送しようとしたら 、何度やっても以下のようなエラーを吐いて失敗するファイルシステムがあるので困ってしまいました。
warning: cannot send 'tank/foo@snap-daily-1-2019-02-10-030100': I/O errorcannot receive new filesystem stream: checksum mismatch or incomplete stream
イヤな予感がしてふと zpool の状態を確認してみてびっくり。
Permanent error とか言われていました。。。。
root@fileserver:~# zpool status -v tank pool: tank state: ONLINEstatus: One or more devices has experienced an error resulting in data corruption. Applications may be affected.action: Restore the file in question if possible. Otherwise restore the entire pool from backup. see: http://illumos.org/msg/ZFS-8000-8A scan: scrub in progress since Mon Feb 11 20:14:01 2019 66.7M scanned out of 3.85T at 1.45M/s, (scan is slow, no estimated time) 0 repaired, 0.00% doneconfig: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 17 c1t0d0 ONLINE 0 0 34 logs c1t2d0 ONLINE 0 0 0 cache c1t3d0 ONLINE 0 0 0errors: Permanent errors have been detected in the following files: tank/share@snap-daily-1-2019-02-10-030100:/path/to/file tank/foo@snap-daily-1-2019-02-10-030100:/some/file tank/foo:<0x1ea362> tank/foo:<0x1ea363> /tank/foo/some/file /tank/bar/other/file
どうもこれが問題の原因のようです。
そもそも zfs って checksum を勝手に照合しているからファイルの不整合って起きないんじゃ・・・と思っていましたが、破損が検出できるだけで壊れるときは壊れるんですね。
最近、電源の事故があってブッチリ切れたりしましたから、そのときかなぁとは思います。
こうなってしまうと破損したファイルは諦めるしかなく、当該のファイルやスナップショットを削除することで send/recv ができるようになります。
† 参考