Last active
August 13, 2019 08:33
-
-
Save EvilGrinUK/7d2607038aa9e0f60bcc to your computer and use it in GitHub Desktop.
LVM Snapshot Backup - Takes a snapshot of each logical volume in a volume group and creates a compressed dd copy in a specific directory.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
VG_NAME="vg0" | |
SNAPSHOT_SIZE="+2G" | |
BACKUP_LOCATION="/backups" | |
DAYSTOKEEP=7 | |
for lv in $(lvs --noheadings --nosuffix --aligned --separator , -o lv_name,lv_attr | grep -v ,s | cut -d, -f1) | |
do | |
LV_SIZE="$(lvs --units m --noheadings --nosuffix --aligned --separator , -o lv_name,lv_size | grep "$lv" | cut -d',' -f2 | cut -d. -f 1)" # LV size in MB | |
LV_UUID="$(lvs --units m --noheadings --nosuffix --aligned --separator , -o lv_name,lv_uuid | grep "$lv" | cut -d',' -f2)" # LV UUID | |
LV_SNAPNAME="SNAP_$(basename "$lv")" # LV snapshot name | |
echo "LVM Logical Volume: $lv" | |
echo "Size: $LV_SIZE MB" | |
echo "UUID: $LV_UUID" | |
echo "Snapshot name: $LV_SNAPNAME" | |
echo "Removing old snapshot (if any)." | |
lvremove -f "/dev/$VG_NAME/$LV_SNAPNAME" | |
echo "Creating snapshot /dev/$VG_NAME/$LV_SNAPNAME" | |
lvcreate -L"$SNAPSHOT_SIZE" --snapshot -n"$LV_SNAPNAME" "/dev/$VG_NAME/$lv" | |
sleep 4 | |
echo "Backing up snapshot to $BACKUP_LOCATION/$LV_SNAPNAME-$(date "+%Y.%m.%d-%H.%M.%S").lv.gz" | |
dd if="/dev/$VG_NAME/$LV_SNAPNAME" bs=512k of=/dev/stdout | pv -pterbW -i 2 --buffer-size 512k --size "$LV_SIZE"m | /usr/bin/pigz -9 -b 256 > "$BACKUP_LOCATION/$LV_SNAPNAME-$(date "+%Y.%m.%d-%H.%M.%S").lv.gz" | |
echo "Removing snapshot /dev/$VG_NAME/$LV_SNAPNAME" | |
lvremove -f "/dev/$VG_NAME/$LV_SNAPNAME" | |
echo "Removing old backups" | |
find "$BACKUP_LOCATION/$LV_SNAPNAME-*.lv.gz" -mtime +$DAYSTOKEEP -print -delete | |
echo "--" | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment