Statistiques
| Révision :

root / bin / zfs-snapshot @ 1

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