1eefe831eSRobert Wing#!/bin/sh 2eefe831eSRobert Wing# Created by: Miroslav Lachman <000.fbsd@quip.cz> 3eefe831eSRobert Wing 4eefe831eSRobert Wing# Backup of zpool list, zfs list, zpool properties and zfs properties 5eefe831eSRobert Wing# for each filesystem. The backup will be stored in /var/backups. 6eefe831eSRobert Wing 7eefe831eSRobert Wing# If there is a global system configuration file, suck it in. 8eefe831eSRobert Wing# 9eefe831eSRobert Wingif [ -r /etc/defaults/periodic.conf ] 10eefe831eSRobert Wingthen 11eefe831eSRobert Wing . /etc/defaults/periodic.conf 12eefe831eSRobert Wing source_periodic_confs 13eefe831eSRobert Wingfi 14eefe831eSRobert Wing 15eefe831eSRobert Wingbak_dir=/var/backups 16*4b1d3a30SLexi Winterrc=0 17eefe831eSRobert Wing 18eefe831eSRobert Wingrotate() { 19eefe831eSRobert Wing base_name=$1 20eefe831eSRobert Wing show_diff=$2 21eefe831eSRobert Wing file="$bak_dir/$base_name" 22eefe831eSRobert Wing 23eefe831eSRobert Wing if [ -f "${file}.bak" ] ; then 24eefe831eSRobert Wing if cmp -s "${file}.bak" "${file}.tmp"; then 25eefe831eSRobert Wing rm "${file}.tmp" 26eefe831eSRobert Wing else 27*4b1d3a30SLexi Winter if [ -n "$show_diff" ]; then 28eefe831eSRobert Wing rc=1 29*4b1d3a30SLexi Winter diff ${daily_diff_flags} "${file}.bak" "${file}.tmp" 30*4b1d3a30SLexi Winter fi 31eefe831eSRobert Wing mv "${file}.bak" "${file}.bak2" || rc=3 32eefe831eSRobert Wing mv "${file}.tmp" "${file}.bak" || rc=3 33eefe831eSRobert Wing fi 34eefe831eSRobert Wing else 35eefe831eSRobert Wing rc=1 36eefe831eSRobert Wing mv "${file}.tmp" "${file}.bak" || rc=3 37eefe831eSRobert Wing [ -n "$show_diff" ] && cat "${file}.bak" 38eefe831eSRobert Wing fi 39eefe831eSRobert Wing} 40eefe831eSRobert Wing 41*4b1d3a30SLexi Wintershow="" 42eefe831eSRobert Wingcase "$daily_backup_zfs_verbose" in 43eefe831eSRobert Wing [Yy][Ee][Ss]) show="YES" 44eefe831eSRobert Wingesac 45eefe831eSRobert Wing 46eefe831eSRobert Wingcase "$daily_backup_zfs_enable" in 47eefe831eSRobert Wing [Yy][Ee][Ss]) 48eefe831eSRobert Wing 49eefe831eSRobert Wing zpools=$(zpool list $daily_backup_zpool_list_flags) 50eefe831eSRobert Wing 51eefe831eSRobert Wing if [ -z "$zpools" ]; then 52eefe831eSRobert Wing echo 'daily_backup_zfs_enable is set to YES but no zpools found.' 53eefe831eSRobert Wing rc=2 54eefe831eSRobert Wing else 55eefe831eSRobert Wing echo "" 56eefe831eSRobert Wing echo "Backup of ZFS information for all imported pools"; 57eefe831eSRobert Wing 58eefe831eSRobert Wing echo "$zpools" > "$bak_dir/zpool_list.tmp" 59eefe831eSRobert Wing rotate "zpool_list" $show 60eefe831eSRobert Wing 61eefe831eSRobert Wing zfs list $daily_backup_zfs_list_flags > "$bak_dir/zfs_list.tmp" 62eefe831eSRobert Wing rotate "zfs_list" $show 63eefe831eSRobert Wing fi 64eefe831eSRobert Wing ;; 65eefe831eSRobert Wingesac 66eefe831eSRobert Wing 67eefe831eSRobert Wingcase "$daily_backup_zfs_props_enable" in 68eefe831eSRobert Wing [Yy][Ee][Ss]) 69eefe831eSRobert Wing 70eefe831eSRobert Wing zfs get $daily_backup_zfs_get_flags > "$bak_dir/zfs_props.tmp" 71*4b1d3a30SLexi Winter rotate "zfs_props" $show 72eefe831eSRobert Wing 73eefe831eSRobert Wing zpool get $daily_backup_zpool_get_flags > "$bak_dir/zpool_props.tmp" 74*4b1d3a30SLexi Winter rotate "zpool_props" $show 75eefe831eSRobert Wing ;; 76eefe831eSRobert Wingesac 77eefe831eSRobert Wing 78eefe831eSRobert Wingexit $rc 79