root / bin / zfs-snapshot @ 2
Historique | Voir | Annoter | Télécharger (4,52 ko)
1 |
#!/bin/bash |
---|---|
2 |
|
3 |
function check_env_volume { |
4 |
#*** CHECK DE L'ENVIRONNEMENT *** |
5 |
|
6 |
if [ ! -d "/mnt/snapshot" ] |
7 |
then |
8 |
mkdir -p /mnt/snapshot |
9 |
if [ $? -eq 1 ] |
10 |
then |
11 |
echo "/!\\ Probleme lors de la creation de /mnt/snapshot /!\\" |
12 |
exit 1 |
13 |
fi |
14 |
fi |
15 |
#*** FIN DU CHECK DE L'ENVIRONNEMENT *** |
16 |
} |
17 |
|
18 |
function check_env_filesystem { |
19 |
echo "**** $1" |
20 |
if [ "$#" -eq 0 ] |
21 |
then |
22 |
echo "/!\\ Le fichier de configuration est manquant /!\\" |
23 |
exit |
24 |
fi |
25 |
|
26 |
if [ ! -f $1 ] |
27 |
then |
28 |
echo "/!\\ Le fichier de configuration n'existe pas /!\\" |
29 |
exit |
30 |
fi |
31 |
NAME_VOL=$(cat $1 |grep "name" |cut -d"=" -f2) |
32 |
TYPE_ZFS=$(cat $1 |grep "type" |cut -d"=" -f2) |
33 |
NB_SNAP=$(cat $1 |grep "nbsnapshots"|cut -d"=" -f2) |
34 |
if [ "$NAME_VOL" = "" ] || [ "$TYPE_ZFS" = "" ] || [ "$NB_SNAP" = "" ] |
35 |
then |
36 |
echo "/!\\ Probleme le fichier de configuration est incoherent ou incomplet /!\\" |
37 |
exit |
38 |
fi |
39 |
|
40 |
|
41 |
} |
42 |
|
43 |
function create_snapshot_volume { |
44 |
#*** ETAPE DE CREATION DU SNAPSHOT ***# |
45 |
|
46 |
echo "" |
47 |
echo "*** Snapshot ZFS pour : $NAME_VOL" |
48 |
echo "*** Type de volume ZFS : $TYPE_ZFS" |
49 |
echo "" |
50 |
|
51 |
if [ "$TYPE_ZFS" = "volume" ] |
52 |
then |
53 |
if [ ! -d /mnt/snapshot/$NAME_VOL ] |
54 |
then |
55 |
mkdir -p /mnt/snapshot/$NAME_VOL |
56 |
fi |
57 |
mount -o ro /dev/zvol/$NAME_VOL /mnt/snapshot/$NAME_VOL |
58 |
if [ $? -eq 0 ] |
59 |
then |
60 |
echo "*** Mount en lecture seule de $NAME_VOL [OK]" |
61 |
else |
62 |
echo "/!\\ Probleme lors de la tentative de mount de $NAME_VOL sur /mnt/snapshot/$NAME_VOL /!\\" |
63 |
exit |
64 |
fi |
65 |
fi |
66 |
|
67 |
echo "*** Creation du snapshot pour $NAME_VOL" |
68 |
ZDATE=$(date +%Y%m%d%H%M%S) |
69 |
/sbin/zfs snapshot $NAME_VOL@snapshot-$ZDATE |
70 |
echo "" |
71 |
#*** FIN ETAPE DE CREATION DU SNAPSHOT ***# |
72 |
} |
73 |
|
74 |
function create_snapshot_filesystem { |
75 |
#*** ETAPE DE CREATION DU SNAPSHOT ***# |
76 |
|
77 |
echo "" |
78 |
echo "*** Snapshot ZFS pour : $NAME_VOL" |
79 |
echo "*** Type de volume ZFS : $TYPE_ZFS" |
80 |
echo "" |
81 |
echo "*** Creation du snapshot pour $NAME_VOL" |
82 |
ZDATE=$(date +%Y%m%d%H%M%S) |
83 |
/sbin/zfs snapshot $NAME_VOL@snapshot-$ZDATE |
84 |
echo "" |
85 |
#*** FIN ETAPE DE CREATION DU SNAPSHOT ***# |
86 |
} |
87 |
|
88 |
|
89 |
function check_after_snapshot_volume { |
90 |
#*** ETAPE DE VERIFICATION ***# |
91 |
echo "*** Umount du volume /mnt/snapshot/$NAME_VOL ..." |
92 |
umount /mnt/snapshot/$NAME_VOL |
93 |
if [ $? -eq 1 ] |
94 |
then |
95 |
echo "/!\\ Probleme lors du demontage du volume $NAME_VOL /!\\" |
96 |
fi |
97 |
|
98 |
mount -o ro /dev/zvol/$NAME_VOL@snapshot-$ZDATE /mnt/snapshot/$NAME_VOL |
99 |
if [ $? -eq 0 ] |
100 |
then |
101 |
echo "*** Creation du snapshot et verification du montage du snapshot /dev/zvol/$NAME_VOL@snapshot-$ZDATE [OK]" |
102 |
umount /mnt/snapshot/$NAME_VOL |
103 |
if [ $? -eq 1 ] |
104 |
then |
105 |
echo "/!\\ Probleme lors du demontage du volume $NAME_VOL /!\\" |
106 |
fi |
107 |
|
108 |
else |
109 |
echo "/!\\ Probleme avec lors de la creation ou du snapshot : commande de destruction de /dev/zvol/$NAME_VOL@snapshot-$ZDATE /!\\" |
110 |
/sbin/zfs destroy $NAME_VOL@snapshot-$ZDATE |
111 |
if [ $? -eq 0 ] |
112 |
then |
113 |
echo "*** Suppression du snapshot $NAME_VOL@snapshot-$ZDATE [OK]" |
114 |
else |
115 |
echo "/!\\ Suppression du snapshot $NAME_VOL@snapshot-$ZDATE [ERROR]. A TRAITER DANS LES PLUS BREFS DELAIS !!!" |
116 |
fi |
117 |
fi |
118 |
#*** FIN ETAPE DE VERIFICATION ***# |
119 |
} |
120 |
|
121 |
|
122 |
function del_old_snapshot { |
123 |
#*** ETAPE SUPPRESSION DES SNAPSHOTS OBSELETES ***# |
124 |
echo "" |
125 |
CPT_SNAP=$(/sbin/zfs list -t snapshot -r $NAME_VOL |cut -d" " -f1 |grep -i $NAME_VOL\@ |wc -l) |
126 |
echo "*** Le nombre de snapshot pour $NAME_VOL est : $CPT_SNAP" |
127 |
/sbin/zfs list -t snapshot -r $NAME_VOL |
128 |
|
129 |
if [ $CPT_SNAP -gt $NB_SNAP ] |
130 |
then |
131 |
echo "*** Detection du snapshot le plus ancien" |
132 |
for ID_SNAP_OLDER in $(/sbin/zfs list -t snapshot -r $NAME_VOL |cut -d" " -f1 |grep -i $NAME_VOL\@) |
133 |
do |
134 |
echo "*** Le snapshot le plus ancien est : $ID_SNAP_OLDER" |
135 |
break |
136 |
done |
137 |
/sbin/zfs destroy $ID_SNAP_OLDER |
138 |
if [ $? -eq 0 ] |
139 |
then |
140 |
echo "*** Suppression du snapshot $ID_SNAP_OLDER [OK]" |
141 |
else |
142 |
echo "/!\\ Suppression du snapshot $ID_SNAP_OLDER [ERROR]." |
143 |
fi |
144 |
|
145 |
fi |
146 |
#*** FIN ETAPE SUPPRESSION DES SNAPSHOTS OBSELETES ***# |
147 |
} |
148 |
|
149 |
echo "**** $1" |
150 |
if [ "$#" -eq 0 ] |
151 |
then |
152 |
echo "/!\\ Le fichier de configuration est manquant /!\\" |
153 |
exit |
154 |
fi |
155 |
|
156 |
if [ ! -f $1 ] |
157 |
then |
158 |
echo "/!\\ Le fichier de configuration n'existe pas /!\\" |
159 |
exit |
160 |
fi |
161 |
|
162 |
NAME_VOL=$(cat $1 |grep "name" |cut -d"=" -f2) |
163 |
TYPE_ZFS=$(cat $1 |grep "type" |cut -d"=" -f2) |
164 |
NB_SNAP=$(cat $1 |grep "nbsnapshots"|cut -d"=" -f2) |
165 |
if [ "$NAME_VOL" = "" ] || [ "$TYPE_ZFS" = "" ] || [ "$NB_SNAP" = "" ] |
166 |
then |
167 |
echo "/!\\ Probleme le fichier de configuration est incoherent ou incomplet /!\\" |
168 |
exit |
169 |
fi |
170 |
|
171 |
if [ "$TYPE_ZFS" == "volume" ] |
172 |
then |
173 |
check_env_volume |
174 |
create_snapshot_volume |
175 |
check_after_snapshot_volume |
176 |
del_old_snapshot |
177 |
|
178 |
|
179 |
else |
180 |
if [ "$TYPE_ZFS" == "filesystem" ] |
181 |
then |
182 |
create_snapshot_filesystem |
183 |
del_old_snapshot |
184 |
|
185 |
fi |
186 |
fi |