ZFS Clone Snapshots
The following script clones a zfs dataset with all available snapshots. The variable source=${1} defines the source dataset, dest=${2} defines the destination dataset. The destination dataset must be created in advanced manually.
1| #!/bin/bash
2|
3| source=${1}
4| source_mountpoint=$(/usr/sbin/zfs get mountpoint -o value -H ${source})
5| source_snappath=${source_mountpoint}/.zfs/snapshot
6| dest=${2}
7| dest_mountpoint=$(/usr/sbin/zfs get mountpoint -o value -H ${dest})
8|
9| snaps=(${source_snappath}/*)
10|
11| IFS=$'\n' snaps=($(sort <<<"${snaps[*]}"))
12| unset IFS
13|
14| for f in "${snaps[@]}"; do
15| echo "Copy $f"
16| snapname=$(basename "$f")
17| /usr/bin/rsync -a --progress --delete ${f}/ ${dest_mountpoint}
18| /usr/sbin/zfs snapshot ${dest}@${snapname}
19| echo "-------------------------------------------------"
20| done