Statistiques
| Révision :

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