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