-
Notifications
You must be signed in to change notification settings - Fork 0
/
sts23.sh
92 lines (74 loc) · 2.05 KB
/
sts23.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#! /bin/sh
AUFRUF=$(echo "Aufruf: $0 <test|echt> <Poolfilter> <Anz. Behalte> [Snapshotfilter]")
if [ "$3" = "" ]
then
echo $AUFRUF
exit 0
fi
TESTECHT="$1"
#Mit der Filter Variable kannst du die Liste der datasets beschränken für die die Snaps gelöscht werden sollen.
FILTER="$2"
# Wieviele behalten
BEHALTE="$3"
[ $BEHALTE -ge 0 ] 2>/dev/null
if [ "$?" != "0" ]
then
echo "Parameter 3 keine pos. Zahl"
echo "$AUFRUF"
exit 0
fi
# Snapshots nach Muster Filtern
MUSTER="$4"
PruneZFSList=$(zfs list -o name -H| grep $FILTER)
echo "# Gegrepte Datasets"
zfs list | grep -e $FILTER -e NAME
echo ""
for DATASET in $PruneZFSList
do
echo "# Dataset: $DATASET"
echo "# Muster: $MUSTER"
if [ "$MUSTER" = "" ]
then
SNAPS=$(zfs list -r -t snap -H -o name -s creation|grep "${DATASET}@")
else
SNAPS=$(zfs list -r -t snap -H -o name -s creation|grep "${DATASET}@"|grep $MUSTER)
fi
ANZSNAPS=$(echo $SNAPS|wc -w)
echo "# Anzahl Snaps: $ANZSNAPS"
echo "# Behalte: $BEHALTE"
echo "# Liste Snaps:"
echo "$SNAPS"
DELSNAPS=$((ANZSNAPS - BEHALTE))
[ $DELSNAPS -gt 0 ] 2>/dev/null
if [ "$?" != "0" ]
then
echo "Keine Snapshots zum löschen"
echo ""
continue
fi
echo "# Anzahl Del. Snaps: $DELSNAPS"
echo "# Liste Del. Snaps:"
echo "$SNAPS" | head -n $DELSNAPS
echo "# Behalte Snaps:"
echo "$SNAPS" | tail -n $BEHALTE
if [ $DELSNAPS -gt 0 ]
then
if [ "$TESTECHT" = "echt" ]
then
echo "# zfs destroy wird ausgeführt"
echo "$SNAPS" | head -n $DELSNAPS | xargs -n 1 zfs destroy -v
echo "# Liste nach zfs destroy"
if [ "$MUSTER" = "" ]
then
zfs list -r -t snap -o name -s creation|grep "${DATASET}@"
else
zfs list -r -t snap -o name -s creation|grep "${DATASET}@"|grep $MUSTER
fi
else
echo "# Test - folgende zfs destroys würden ausgführt"
echo "$SNAPS" | head -n $DELSNAPS | xargs -n 1 zfs get -H creation
echo "$SNAPS" | head -n $DELSNAPS | xargs -n 1 echo ">>" zfs destroy -v
fi
fi
echo ""
done