serverapps:zfs:send_recv
目次
send/recvでデータ移行
注意点
- sendできるのはスナップショットだけ。
- recv側で増分受信時には前回以降変更があってはいけない。
手順
送信側でスナップショットを取る
# zfs snapshot srcTank/setA@snap01 # zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT srcTank/setA@snap01 0 - 1.93T -
zfs send でスナップショットを送信
■ スナップショットをファイル保存して、別のプールでreceive
# zfs send srcTank/setA@snap01 > /var/tmp/hoge.img # zfs receive bakup/hoge < /var/tmp/hoge.img # zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT srcTank/setA@snap01 0 - 1.93T - bakup/hoge@snap01 0 - 1.93T -
■ スナップショットを同じホストの、別のプールへ送信
# zfs send srcTank/setA@snap01 | zfs receive rcvTank/setA
■ スナップショットを別のホストにsshで送信
# zfs send srcTank/setA@snap01 | ssh 192.168.xxx.xxx zfs receive rcvTank/setA
■ スナップショットの差分データを送信
# zfs snapshot srcTank/setA@snap02 # zfs send -i srcTank/setA@snap01 srcTank/setA@snap02 | ssh 192.168.xxx.xxx zfs receive rcvTank/setA
■ スナップショットの差分データを圧縮して送信
# zfs send -i srcTank/setA@snap01 srcTank/setA@snap02 | gzip -c | ssh 192.168.xxx.xxx "gzip -cd |zfs recv -vdF rcvTank"
■ netcatを利用して送信
受信側
# nc -l -p ポート番号 -w 120 | zfs recv -v rcvTank/setA
送信側
# zfs send srcTank/setA@snap01 | nc 192.168.xxx.xxx ポート番号
■ zfs receiveのオプション
- zfs receive は zfs recv と省略可能
- -F 既存ファイルシステムを上書き
- -d 送信側で使用していた名前でスナップショットを復元
このオプションを使うときはzpoolのみを指定 - -u 復元されたアーカイブを zfs receive 処理の完了時にマウントしない
- -v 転送後に受信時間と容量を表示
bufferを挟むことで速度アップを図る
zfs send pool/data@20121207 | dd obs=1m | dd obs=1m | gzip -9 | ssh somewhere "cat > file.gz"
# zfs send -R <スナップショット> | mbuffer -s 128k -m 1G | ssh <ユーザ>@<リモートホスト> 'mbuffer -s 128k -m 1G | zfs receive <展開先ディレクトリ>'
参考
send/receive streamの整合性チェック
【書きかけです】1)
zstreamdumpを使う
# zfs send zdiving@today > zdiving.zstream # zstreamdump < zdiving.zstream
圧縮して、あとでチェックする
zfs send mysnapshot | gzip -c -3 > /somestorage/mysnap.gz gzip -t mysnap.gz
参考
参考
1)
2024-12-01
serverapps/zfs/send_recv.txt · 最終更新: 2024/11/30 15:05 by hayashi