zfs send -R を受け取るのは zfs receive -d が良さそうだ2017年08月14日 12時23分46秒

ZFS に保存している写真のファイルシステムをバックアップすることにした。
zfs list -t all
...
zfs/pict                 304G  92.4G   301G  /mnt/zfs/pict
zfs/pict@2017_02_26     1.15G      -   283G  -
zfs/pict@2017_07_05     1.36G      -   299G  -
zfs/pict@2017_08_13     11.6K      -   301G  -
ファイルに間違って重複があり、差分のみをファイルから取り除いた。そのため、スナップショットに元の巨大な重複ファイルが野持ってしまったので、昨年までのスナップショットを消した。そのため、スナップショットの数は少ない。差分で複製するとなると、スナップショットが少ないと、不便だ。

スナップショット名を指定した形で試したら失敗した。

$ zfs send -R zfs/pict@2017_08_13 | zfs receive bkup/camera@2017_08_13

 cannot receive: cannot specify snapshot name for multi-snapshot stream
 warning: cannot send 'zfs/pict@2017_02_26': Broken pipe
 warning: cannot send 'zfs/pict@2017_07_05': Broken pipe
 warning: cannot send 'zfs/pict@2017_08_13': Broken pipe
そこで、receive の -d オプションを利用。
$ zfs send -R zfs/pict@2017_08_13 | zfs receive -d -v bkup/camera
これで、無事に複製できたようだ。send と receive を同時に行う場合は、receive 側に -v を付けた方が見やすくエラーも分かりやすい。