ZFS

ZFSでsend/recvについてのメモ

概要

CentOS 6でZFS(zfs-fuse)でsend/recvを使ったときのメモ。

メモ

iSCSIのボリューム/dev/mapper/mpathaに既にZFSのプールが作成してあるが、このボリュームサイズを変更したい。暫定的に別のiSCSIボリューム/dev/mapper/mpathbにデータを移行してボリューム拡張後に再度データを戻す。その一部についてのメモ。

ZFSプールtankが既にあるときに別のZFSプールtank2を作成。

# zpool create tank2 /dev/mapper/mpathb

各ZFSプールの利用状況は以下のような感じ。プールサイズはtank > tank2だがデータ量はtank2に充分収まる。このような場合には問題なくスナップショットの転送が可能。

# zpool list
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
tank   3.41T  1.28T  2.13T    37%  1.86x  ONLINE  -
tank2  1.94T  95.5K  1.94T     0%  1.00x  ONLINE  -

今回はtank/data/以下のデータをtank2に移行させる。tank/pool以下にはゴミしかないので無視。

# zfs list
NAME                USED  AVAIL  REFER  MOUNTPOINT
tank               1.80T  2.07T    23K  /tank
tank/pool          1.13T  2.07T   705G  /zfs
tank/data           686G  2.07T   498G  /tank/data
tank2              73.5K  1.91T    21K  /tank2

ZFS sendするにはスナップショットが作成してある必要がある。スナップショットはスケジュールで毎日作成されているのでとりあえず最新版を利用することにする。

# zfs list -t snapshot -r
NAME                              USED  AVAIL  REFER  MOUNTPOINT
(snip)
tank/data@20180325               21.9M      -   498G  -
# zfs list -o space
NAME               AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD
tank               2.07T  1.80T         0     23K              0      1.80T
tank/pool          2.07T  1.13T      451G    705G              0          0
tank/data          2.07T   686G      188G    498G              0          0
tank2              1.91T  73.5K         0     21K              0      52.5K

zfs send/recvを利用してスナップショットを転送する。データ量が多いので相当時間がかかる。

# zfs send tank/data@20180325 | zfs recv tank2/data

スナップショット転送後は転送先にもスナップショットが存在している。

# zfs list -t snapshot -r
NAME                              USED  AVAIL  REFER  MOUNTPOINT
(snip)
tank/data@20180325               21.9M      -   498G  -
tank2/data@20180325                  0      -   498G  -

ZFSプールにアクセスしているアプリケーションを停止し、手動でスナップショットを作成して差分を転送する。差分があまりないので短時間で転送が完了する。

# zfs snapshot tank/data@20180325-2

# zfs send -i tank/data@20180325 tank/data@20180325-2 | zfs recv -F tank2/data

スナップショットの差分転送後は転送した差分も反映されている。

# zfs list -t snapshot -r
NAME                              USED  AVAIL  REFER  MOUNTPOINT
(snip)
tank/data@20180325               21.9M      -   498G  -
tank/data@20180325-2                 0      -   499G  -
tank2/data@20180325              22.1M      -   498G  -
tank2/data@20180325-2                0      -   498G  -