Скрипт удаления ненужных zfs снапшотов

Mar 07, 2014 23:46

ZFS снапшоты - прекрасная штука. Но если надо удалить через вебгуй десятки автоматически созданных снапшотов - это становится проблемой. А я как раз сейчас обрабатываю напильником скрипт для zfs send-recv бекапа и автоматических снапшотов у меня - завались. Так что, взяв за основу скрипт от Oleg Pyzhov, чутка его поправил. Потому как оригинальный скрипт, запущенный без параметров, молча побил мне все backup снапшоты. Что меня не обрадовало ни разу.

Архив лежит тут
Пример использования
./delsnap Pool/Test 2 auto
Переберёт все снапшоты вида Pool/Test@auto..., оставит из них два самых свежих, остальные удалит.
Полезно, например, при необходимости удалить автоматически созданные в nas4free снапшоты. Или удалении старых снапшотов, созданных при архивировании.
Если третий параметр опустить, по умолчанию берёт префикс backup, используемый в других скриптах от Oleg Pyzhov
Последний снапшот рекомендую оставлять, но если надо убить - второй параметр ставим 0.

на всякий случай текст скрипта  - под катом

#!/bin/bash
# initial version by Oleg Pyzhov, see http://forum.ixbt.com/topic.cgi?id=11:44629:3826#3826
# minor editing by MikeMac
# A script for delete all but last N snapshots with name @name
# usage: ./delsnap
# example: ./delsnap Pool/Test 2 backup

backpool=$1
MAXSNAPBACKPOOL=$2
PREFIX4DELETE=$3

#default for PREFIX4DELETE is backup for compatibility with initial version
if [[ $PREFIX4DELETE == "" ]]; then
PREFIX4DELETE="backup"
fi

if [ -n "$backpool" ]; then
if [ -n "$MAXSNAPBACKPOOL" ]; then

numsnap=`zfs list -H -o name -t snapshot|grep "${backpool}@$PREFIX4DELETE"|wc|awk '{ print $1 }'`
let MAXSNAPBACKPOOL=numsnap-MAXSNAPBACKPOOL >/dev/null
if [ $MAXSNAPBACKPOOL -gt 0 ] ; then
for d in `zfs list -H -o name -t snapshot|grep "${backpool}@$PREFIX4DELETE"|/usr/bin/head -n"$MAXSNAPBACKPOOL"`; do
zfs destroy ${d}
done
echo $MAXSNAPBACKPOOL" snapshot(s) deleted"
else
echo no snapshots to delete
fi
else
echo ERROR please provide number of snapshots to keep, i.e. 2
exit 1
fi
else
echo ERROR please provide dataset name, i.e. Pool/Dataset
exit 1
fi

Однако, советую скачать и разархивировать куда-то в папку NAS, напомню, командой
tar -xvf delsnap.tar

backup, nas, nas4free, zfs

Previous post Next post
Up