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