Add a periodic script to backup output generated from gmirror list.

Disabled by default.

PR:             86388
Submitted by:   Miroslav Lachman <000.fbsd@quip.cz>
Reviewed by:    allanjude, gbe
Approved by:    allanjude (mentor)
MFC after:      4 weeks
Event:          July 2020 Bugathon
Differential Revision:  https://reviews.freebsd.org/D25631
This commit is contained in:
Robert Wing
2020-11-07 04:15:24 +00:00
parent 7d3ed9777a
commit 3701068b5d
4 changed files with 93 additions and 2 deletions
+15 -1
View File
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd November 6, 2020
.Dd November 7, 2020
.Dt PERIODIC.CONF 5
.Os
.Sh NAME
@@ -257,6 +257,20 @@ as configured in
Set to
.Dq Li YES
to create backup of EFI System Partition (ESP).
.It Va daily_backup_gmirror_enable
.Pq Vt bool
Set to
.Dq Li YES
to create backup of gmirror information (i.e., output of
.Nm gmirror Cm list ) ,
see
.Xr gmirror 8 .
.It Va daily_backup_gmirror_verbose
.Pq Vt bool
Set to
.Dq Li YES
to report a diff between the new backup and the existing backup
in the daily output.
.It Va daily_backup_gpart_enable
.Pq Vt bool
Set to
+72
View File
@@ -0,0 +1,72 @@
#!/bin/sh
# $FreeBSD$
# Created by: Miroslav Lachman <000.fbsd@quip.cz>
# Backup output from `gmirror list`, which provides detailed information
# of all gmirrors. The backup will be stored in /var/backups/.
# If there is a global system configuration file, suck it in.
#
if [ -r /etc/defaults/periodic.conf ]
then
. /etc/defaults/periodic.conf
source_periodic_confs
fi
bak_dir=/var/backups
rotate() {
base_name=$1
show_diff=$2
file="$bak_dir/$base_name"
if [ -f "${file}.bak" ]; then
rc=0
if cmp -s "${file}.bak" "${file}.tmp"; then
rm "${file}.tmp"
else
rc=1
[ -n "$show_diff" ] && diff "${file}.bak" "${file}.tmp"
mv "${file}.bak" "${file}.bak2" || rc=3
mv "${file}.tmp" "${file}.bak" || rc=3
fi
else
rc=1
mv "${file}.tmp" "${file}.bak" || rc=3
[ -n "$show_diff" ] && cat "${file}.bak"
fi
}
case "$daily_backup_gmirror_verbose" in
[Yy][Ee][Ss]) show="YES"
esac
case "$daily_backup_gmirror_enable" in
[Yy][Ee][Ss])
gmirrors=$(gmirror status 2> /dev/null | \
awk '$1 ~ /^mirror\// { sub(/mirror\//, ""); print $1 }')
if [ -z "$gmirrors" ]; then
echo ""
echo "daily_backup_gmirror_enable is set to YES but no gmirrors found."
rc=2
else
echo ""
echo "Backup of gmirror information for:";
for m in ${gmirrors}; do
echo "$m"
safe_name=$(echo "gmirror.${m}" | tr -cs ".[:alnum:]\n" "_")
if ! gmirror status -s "${m}" | grep -F -v "COMPLETE"; then
gmirror list "${m}" > "$bak_dir/$safe_name.tmp"
rotate "$safe_name" $show
fi
done
fi
;;
*) rc=0;;
esac
exit $rc
+1
View File
@@ -11,6 +11,7 @@ CONFS= 100.clean-disks \
200.backup-passwd \
210.backup-aliases \
221.backup-gpart \
222.backup-gmirror \
330.news \
400.status-disks \
401.status-graid \
+5 -1
View File
@@ -79,9 +79,13 @@ daily_backup_aliases_enable="YES" # Backup mail aliases
# 221.backup-gpart
daily_backup_gpart_enable="YES" # Backup partition table/boot partition/MBR
daily_backup_gpart_verbose="NO" # Be verbose if new backup differs from the new one
daily_backup_gpart_verbose="NO" # Be verbose if new backup differs from the old one
daily_backup_efi_enable="NO" # Backup EFI system partition (ESP)
# 222.backup-gmirror
daily_backup_gmirror_enable="NO" # Backup of gmirror info (i.e., output of `gmirror list`)
daily_backup_gmirror_verbose="NO" # Log diff if new backup differs from the old one
# 223.backup-zfs
daily_backup_zfs_enable="NO" # Backup output from zpool/zfs list
daily_backup_zfs_props_enable="NO" # Backup zpool/zfs filesystem properties