Statistiques
| Révision :

root / bin / zfs-snapshot @ 26

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