Révision 1
bin/del-iscsi-volume (revision 1) | ||
---|---|---|
1 |
#!/bin/bash |
|
2 |
|
|
3 |
|
|
4 |
function usage { |
|
5 |
echo "Usage :" 1>&2 |
|
6 |
echo "$0 [OPTIONS]" 1>&2 |
|
7 |
echo " -h display this message" 1>&2 |
|
8 |
echo " -i interactive mode" 1>&2 |
|
9 |
echo " -T Specify the TID" 1>&2 |
|
10 |
|
|
11 |
} |
|
12 |
|
|
13 |
function nointeractive { |
|
14 |
if [ "$TID2DEL" == "" ] |
|
15 |
then |
|
16 |
echo "Please specify a TID ISCSI" 1>&2 |
|
17 |
exit 1 |
|
18 |
fi |
|
19 |
TARGET=$(cat /proc/net/iet/session |grep -i tid:$TID2DEL |cut -d ":" -f3) |
|
20 |
|
|
21 |
TID_FIND=1 |
|
22 |
TID_ISACTIVE=1 |
|
23 |
for line in $(cat /proc/net/iet/session) |
|
24 |
do |
|
25 |
if [ $TID_FIND -eq 0 ] |
|
26 |
then |
|
27 |
CHECK_STATE=$(echo $line |awk '{ if ( /state:active/ ){ print 0 }else{ print $1 $line} }') |
|
28 |
if [ "$CHECK_STATE" = "0" ] |
|
29 |
then |
|
30 |
TID_ISACTIVE=0 |
|
31 |
fi |
|
32 |
|
|
33 |
fi |
|
34 |
if [ $TID_ISACTIVE -eq 0 ] |
|
35 |
then |
|
36 |
echo "iscsi volume in use, please disconnect all clients " 1>&2 |
|
37 |
exit 1 |
|
38 |
fi |
|
39 |
TID_LISTED=$(echo $line |awk '(/tid:/) { print $1 }') |
|
40 |
if [ "$TID_LISTED" != "" ] |
|
41 |
then |
|
42 |
if [ "tid:$TID2DEL" = "$TID_LISTED" ] |
|
43 |
then |
|
44 |
TID_FIND=0 |
|
45 |
else |
|
46 |
TID_FIND=1 |
|
47 |
fi |
|
48 |
fi |
|
49 |
done |
|
50 |
|
|
51 |
ietadm --op delete --tid=$TID2DEL |
|
52 |
if [ $? -eq 0 ] |
|
53 |
then |
|
54 |
echo "*** La suppression via la commande ietadm s'est termine correctement" |
|
55 |
echo "" |
|
56 |
echo "*** Vérification et suppression du volume dans le fichier /etc/iet/ietd.conf ..." |
|
57 |
|
|
58 |
COPY_LINE=0 |
|
59 |
>/tmp/.buffer_ietd.conf |
|
60 |
while read line |
|
61 |
do |
|
62 |
echo $line |grep -i "^Target" |
|
63 |
if [ $? -eq 0 ] |
|
64 |
then |
|
65 |
COPY_LINE=0 |
|
66 |
fi |
|
67 |
echo $line |grep -i "^Target $TARGET" |
|
68 |
if [ $? -eq 0 ] |
|
69 |
then |
|
70 |
COPY_LINE=1 |
|
71 |
fi |
|
72 |
if [ $COPY_LINE -eq 0 ] |
|
73 |
then |
|
74 |
echo $line >> /tmp/.buffer_ietd.conf |
|
75 |
fi |
|
76 |
|
|
77 |
done < "/etc/iet/ietd.conf" |
|
78 |
echo "*** Sauvegarde du fichier /etc/iet/ietd.conf ..." |
|
79 |
TODAY=$(date +%Y%m%d%H%M%S) |
|
80 |
cp /etc/iet/ietd.conf /etc/iet/ietd.conf.$TODAY |
|
81 |
cp /tmp/.buffer_ietd.conf /etc/iet/ietd.conf |
|
82 |
|
|
83 |
|
|
84 |
echo "" |
|
85 |
echo "*** Vérification /proc/net/iet/volume :" |
|
86 |
cat /proc/net/iet/volume |
|
87 |
|
|
88 |
echo "" |
|
89 |
echo "*** Verification repertoire /etc/iet :" |
|
90 |
ls -ltr /etc/iet |
|
91 |
|
|
92 |
echo "" |
|
93 |
echo "*** Operation de suppression [OK] ..." |
|
94 |
else |
|
95 |
|
|
96 |
echo "*** Un probleme est survenu lors de la tentive de suppresion du volume iscsi TID:$TID2DEL" |
|
97 |
echo "*** Veuillez vérifier que le volume n'est pas en cours d'uilisation (cat /proc/net/iet/session) sinon contacter l'admin en charge de ce serv ce" |
|
98 |
fi |
|
99 |
|
|
100 |
|
|
101 |
} |
|
102 |
|
|
103 |
|
|
104 |
function interactive { |
|
105 |
|
|
106 |
echo "*** Choix du volume ISCSI a supprimer ***" |
|
107 |
cat /proc/net/iet/session |
|
108 |
|
|
109 |
echo "*** Saisir le TID du volume iscsi a supprimer : ***" |
|
110 |
while read inputline |
|
111 |
do |
|
112 |
TID2DEL=$inputline |
|
113 |
echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***" |
|
114 |
|
|
115 |
while read inputConfirm |
|
116 |
do |
|
117 |
if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ] |
|
118 |
then |
|
119 |
break |
|
120 |
fi |
|
121 |
echo "*** Etes-vous certain de vouloir supprimer le TID : $inputline ? (y/n) ***" |
|
122 |
done |
|
123 |
|
|
124 |
if [ "$inputConfirm" = "y" ] |
|
125 |
then |
|
126 |
break |
|
127 |
fi |
|
128 |
if [ "$inputConfirm" != "y" ] |
|
129 |
then |
|
130 |
echo "*** Saisir le TID du volume iscsi a supprimer : ***" |
|
131 |
fi |
|
132 |
done |
|
133 |
|
|
134 |
echo "**** Recuperation de la propriété Target (identifiant utilise dans le fichier /etc/iet/ietd.conf) ..." |
|
135 |
TARGET=$(cat /proc/net/iet/session |grep -i tid:$TID2DEL |cut -d ":" -f3) |
|
136 |
|
|
137 |
echo "Nom de la target a rechercher dans /etc/iet/ietd.conf : $TARGET" |
|
138 |
|
|
139 |
echo "" |
|
140 |
echo "**** Check si le volume est en cours d'utilisation ..." |
|
141 |
|
|
142 |
|
|
143 |
TID_FIND=1 |
|
144 |
TID_ISACTIVE=1 |
|
145 |
for line in $(cat /proc/net/iet/session) |
|
146 |
do |
|
147 |
if [ $TID_FIND -eq 0 ] |
|
148 |
then |
|
149 |
CHECK_STATE=$(echo $line |awk '{ if ( /state:active/ ){ print 0 }else{ print $1 $line} }') |
|
150 |
if [ "$CHECK_STATE" = "0" ] |
|
151 |
then |
|
152 |
TID_ISACTIVE=0 |
|
153 |
fi |
|
154 |
|
|
155 |
fi |
|
156 |
if [ $TID_ISACTIVE -eq 0 ] |
|
157 |
then |
|
158 |
echo "Le volume isci est en cours d'utilisation, suppression impossible" |
|
159 |
exit 1 |
|
160 |
fi |
|
161 |
TID_LISTED=$(echo $line |awk '(/tid:/) { print $1 }') |
|
162 |
if [ "$TID_LISTED" != "" ] |
|
163 |
then |
|
164 |
if [ "tid:$TID2DEL" = "$TID_LISTED" ] |
|
165 |
then |
|
166 |
TID_FIND=0 |
|
167 |
else |
|
168 |
TID_FIND=1 |
|
169 |
fi |
|
170 |
fi |
|
171 |
done |
|
172 |
|
|
173 |
echo "*** Debut de la procédure de suppression ..." |
|
174 |
echo "" |
|
175 |
|
|
176 |
ietadm --op delete --tid=$TID2DEL |
|
177 |
if [ $? -eq 0 ] |
|
178 |
then |
|
179 |
echo "*** La suppression via la commande ietadm s'est termine correctement" |
|
180 |
echo "" |
|
181 |
echo "*** Vérification et suppression du volume dans le fichier /etc/iet/ietd.conf ..." |
|
182 |
|
|
183 |
COPY_LINE=0 |
|
184 |
>/tmp/.buffer_ietd.conf |
|
185 |
while read line |
|
186 |
do |
|
187 |
echo $line |grep -i "^Target" |
|
188 |
if [ $? -eq 0 ] |
|
189 |
then |
|
190 |
COPY_LINE=0 |
|
191 |
fi |
|
192 |
echo $line |grep -i "^Target $TARGET" |
|
193 |
if [ $? -eq 0 ] |
|
194 |
then |
|
195 |
COPY_LINE=1 |
|
196 |
fi |
|
197 |
if [ $COPY_LINE -eq 0 ] |
|
198 |
then |
|
199 |
echo $line >> /tmp/.buffer_ietd.conf |
|
200 |
fi |
|
201 |
|
|
202 |
done < "/etc/iet/ietd.conf" |
|
203 |
echo "*** Sauvegarde du fichier /etc/iet/ietd.conf ..." |
|
204 |
TODAY=$(date +%Y%m%d%H%M%S) |
|
205 |
cp /etc/iet/ietd.conf /etc/iet/ietd.conf.$TODAY |
|
206 |
cp /tmp/.buffer_ietd.conf /etc/iet/ietd.conf |
|
207 |
|
|
208 |
|
|
209 |
echo "" |
|
210 |
echo "*** Vérification /proc/net/iet/volume :" |
|
211 |
cat /proc/net/iet/volume |
|
212 |
|
|
213 |
echo "" |
|
214 |
echo "*** Verification repertoire /etc/iet :" |
|
215 |
ls -ltr /etc/iet |
|
216 |
|
|
217 |
echo "" |
|
218 |
echo "*** Operation de suppression [OK] ..." |
|
219 |
else |
|
220 |
|
|
221 |
echo "*** Un probleme est survenu lors de la tentive de suppresion du volume iscsi TID:$TID2DEL" |
|
222 |
echo "*** Veuillez vérifier que le volume n'est pas en cours d'uilisation (cat /proc/net/iet/session) sinon contacter l'admin en charge de ce service" |
|
223 |
fi |
|
224 |
echo "*** FIN ***" |
|
225 |
} |
|
226 |
|
|
227 |
while getopts "iT:h" OPTION |
|
228 |
do |
|
229 |
case $OPTION in |
|
230 |
h) |
|
231 |
usage |
|
232 |
exit 1 |
|
233 |
;; |
|
234 |
i) |
|
235 |
interactive |
|
236 |
;; |
|
237 |
T) |
|
238 |
TID2DEL=$OPTARG |
|
239 |
;; |
|
240 |
*) |
|
241 |
usage |
|
242 |
exit 1 |
|
243 |
;; |
|
244 |
esac |
|
245 |
done |
|
246 |
|
|
247 |
if [ ! -d "/proc/net/iet" ] |
|
248 |
then |
|
249 |
echo "Please, check if ietd is running ..." 1>&2 |
|
250 |
exit 1 |
|
251 |
fi |
|
252 |
if [ -z $TID2DEL ] |
|
253 |
then |
|
254 |
usage |
|
255 |
exit 1 |
|
256 |
fi |
|
257 |
nointeractive |
|
258 |
|
|
0 | 259 |
bin/dell-omsa-alert (revision 1) | ||
---|---|---|
1 |
#!/bin/bash |
|
2 |
|
|
3 |
|
|
4 |
/opt/dell/srvadmin/sbin/omreport system alertlog > /tmp/alertmsg.txt 2>&1 |
|
5 |
echo "====================================================================" >>/tmp/alertmsg.txt |
|
6 |
echo "!!!PENSER A VIDER LES LOGS QUAND LES PROBLEMES ONT ETE RESOLUS !!!!!!" >>/tmp/alertmsg.txt |
|
7 |
mail -s "PSITTACUS SAN : $1" root </tmp/alertmsg.txt> /tmp/mailout.txt 2>&1 |
|
0 | 8 |
bin/enable-snapshot (revision 1) | ||
---|---|---|
1 |
#!/bin/bash |
|
2 |
|
|
3 |
DIR_CRON="/etc/cron.d/" |
|
4 |
DIR_CONF_SNAPSHOT="/opt/gZFS/snapshots/" |
|
5 |
BIN_ZFS_SNAPSHOT="/sbin/zfs-snapshot" |
|
6 |
|
|
7 |
|
|
8 |
function usage { |
|
9 |
echo "Usage : $0 options" 1>&2 |
|
10 |
echo "OPTIONS :" 1>&2 |
|
11 |
echo " -i : interactive mode, this option is not compatible with others options" 1>&2 |
|
12 |
echo " -m : minute field for cron snapshot" 1>&2 |
|
13 |
echo " -H : hour field for cron snapshots" 1>&2 |
|
14 |
echo " -D : Day of Month field for cron snapshots" 1>&2 |
|
15 |
echo " -M : Month field for cron snapshots" 1>&2 |
|
16 |
echo " -d : Day of week for cron snapshots" 1>&2 |
|
17 |
echo " -N : Name of ZFS Volume/FileSystem to snapshots" 1>&2 |
|
18 |
echo " -t : Type ZFS Volume or FileSystem. Possible value : volume or filesystem" 1>&2 |
|
19 |
echo " -k : Number of snapsot to keep" 1>&2 |
|
20 |
} |
|
21 |
|
|
22 |
function checkField4Cron { |
|
23 |
if [[ $OPTARG =~ [a-zA-Z] ]] |
|
24 |
then |
|
25 |
echo "-$OPTION contain a bad value" 1>&2 |
|
26 |
exit 1 |
|
27 |
fi |
|
28 |
} |
|
29 |
|
|
30 |
function createCronFile4Snapshot { |
|
31 |
FILE_NAME=$(echo "snapshot-"${NAMEZFS/\//-}) |
|
32 |
echo "$MINUTE $HOUR $MONTH $DAYMONTH $DAYWEEK root $BIN_ZFS_SNAPSHOT $DIR_CONF_SNAPSHOT$FILE_NAME.conf" > $DIR_CRON$FILE_NAME |
|
33 |
echo "name=$NAMEZFS" >$DIR_CONF_SNAPSHOT$FILE_NAME.conf |
|
34 |
echo "type=$TYPEZFS" >>$DIR_CONF_SNAPSHOT$FILE_NAME.conf |
|
35 |
echo "nbsnapshots=$SNAP2KEEP" >>$DIR_CONF_SNAPSHOT$FILE_NAME.conf |
|
36 |
} |
|
37 |
|
|
38 |
function interactive { |
|
39 |
zfs list |
|
40 |
echo "*** Choix du volume pour l'activation des snapshot (merci de saisir le path complet du volume) : ***" |
|
41 |
|
|
42 |
while read inputline |
|
43 |
do |
|
44 |
NAME_VOL=$inputline |
|
45 |
if [ "$NAME_VOL" = "" ] |
|
46 |
then |
|
47 |
echo "*** Choix du volume pour l'activation des snapshot : ***" |
|
48 |
else |
|
49 |
|
|
50 |
echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***" |
|
51 |
|
|
52 |
|
|
53 |
while read inputConfirm |
|
54 |
do |
|
55 |
if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ] |
|
56 |
then |
|
57 |
break |
|
58 |
fi |
|
59 |
echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***" |
|
60 |
done |
|
61 |
|
|
62 |
if [ "$inputConfirm" = "y" ] |
|
63 |
then |
|
64 |
zfs list $NAME_VOL |
|
65 |
if [ $? -eq 0 ] |
|
66 |
then |
|
67 |
echo "*** Le volume saisi $NAME_VOL existe ***" |
|
68 |
break |
|
69 |
else |
|
70 |
echo "*** Le volume saisi $NAME_VOL n'existe pas ***" |
|
71 |
echo "*** Choix du volume pour l'activation des snapshot : ***" |
|
72 |
fi |
|
73 |
fi |
|
74 |
if [ "$inputConfirm" != "y" ] |
|
75 |
then |
|
76 |
echo "*** Choix du volume pour l'activation des snapshot : ***" |
|
77 |
fi |
|
78 |
|
|
79 |
fi |
|
80 |
done |
|
81 |
|
|
82 |
echo "*** Le volume est utilise en zfs natif ou en zvol (sous forme d'un device) : volume/filesystem ***" |
|
83 |
|
|
84 |
while read inputline |
|
85 |
do |
|
86 |
if [ "$inputline" = "volume" ] || [ "$inputline" = "filesystem" ] |
|
87 |
then |
|
88 |
TYPE_ZFS=$inputline |
|
89 |
break |
|
90 |
else |
|
91 |
echo "*** Le volume est utilise en zfs natif ou en zvol (sous forme d'un device) : volume/filesystem ***" |
|
92 |
|
|
93 |
fi |
|
94 |
|
|
95 |
done |
|
96 |
|
|
97 |
|
|
98 |
echo "*** Nombre de snapshot a garder : ***" |
|
99 |
|
|
100 |
|
|
101 |
|
|
102 |
while read inputline |
|
103 |
do |
|
104 |
NB_SNAP=$inputline |
|
105 |
if [ "$NB_SNAP" = "" ] |
|
106 |
then |
|
107 |
|
|
108 |
echo "*** Nombre de snapshot a garder : ***" |
|
109 |
|
|
110 |
else |
|
111 |
|
|
112 |
echo "*** Creation du fichier de configuration ***" |
|
113 |
FILE_NAME=$(echo "snapshot-"${NAME_VOL/\//-}) |
|
114 |
>$DIR_CONF_SNAPSHOT$FILE_NAME.conf |
|
115 |
echo "name=$NAME_VOL" > $DIR_CONF_SNAPSHOT$FILE_NAME.conf |
|
116 |
echo "nbsnapshots=$NB_SNAP" >> $DIR_CONF_SNAPSHOT$FILE_NAME.conf |
|
117 |
echo "type=$TYPE_ZFS" >> $DIR_CONF_SNAPSHOT$FILE_NAME.conf |
|
118 |
break |
|
119 |
fi |
|
120 |
done |
|
121 |
|
|
122 |
echo "*** Frequence des snapshots ***" |
|
123 |
echo "1 - Tous les jours" |
|
124 |
echo "2 - Toutes les semaines" |
|
125 |
echo "3 - Tous les mois" |
|
126 |
echo "*******************************" |
|
127 |
while read inputline |
|
128 |
do |
|
129 |
case $inputline in |
|
130 |
|
|
131 |
"1" ) |
|
132 |
echo "*** Saisir l'heure (HH:MM) " |
|
133 |
while read inputheure |
|
134 |
do |
|
135 |
if [[ "$inputheure" =~ [0-9][0-9]":"[0-9][0-9] ]] |
|
136 |
then |
|
137 |
echo "Le choix de l'heure est : $inputheure" |
|
138 |
H_DEBUT=$(echo $inputheure |cut -d":" -f1) |
|
139 |
M_DEBUT=$(echo $inputheure |cut -d":" -f2) |
|
140 |
echo "$M_DEBUT $H_DEBUT * * * root $BIN_ZFS_SNAPSHOT $DIR_CONF_SNAPSHOT$FILE_NAME.conf" > $DIR_CRON$FILE_NAME |
|
141 |
break; |
|
142 |
else |
|
143 |
echo "*** Saisir l'heure (HH:MM) " |
|
144 |
fi |
|
145 |
done |
|
146 |
|
|
147 |
break ;; |
|
148 |
"2" ) |
|
149 |
echo "*** Saisir le jour de la semaine : 0-6 (0 est dimanche) " |
|
150 |
while read inputjour |
|
151 |
do |
|
152 |
if [[ "$inputjour" =~ [0-9] ]] |
|
153 |
then |
|
154 |
|
|
155 |
echo "*** Saisir l'heure (HH:MM) " |
|
156 |
while read inputheure |
|
157 |
do |
|
158 |
if [[ "$inputheure" =~ [0-9][0-9]":"[0-9][0-9] ]] |
|
159 |
then |
|
160 |
echo "Le choix de l'heure est : $inputheure" |
|
161 |
H_DEBUT=$(echo $inputheure |cut -d":" -f1) |
|
162 |
M_DEBUT=$(echo $inputheure |cut -d":" -f2) |
|
163 |
break; |
|
164 |
else |
|
165 |
echo "*** Saisir l'heure (HH:MM) " |
|
166 |
fi |
|
167 |
done |
|
168 |
|
|
169 |
echo "$M_DEBUT $H_DEBUT * * $inputjour root $BIN_ZFS_SNAPSHOT $DIR_CONF_SNAPSHOT$FILE_NAME.conf" > $DIR_CRON$FILE_NAME |
|
170 |
echo "*** Planification du snapshot [OK]" |
|
171 |
break; |
|
172 |
else |
|
173 |
echo "*** Saisir le jour de la semaine : 0-6 (0 est dimanche) " |
|
174 |
fi |
|
175 |
done |
|
176 |
|
|
177 |
break ;; |
|
178 |
|
|
179 |
"3" ) |
|
180 |
echo "*** Saisir le jour du mois : 01-30" |
|
181 |
while read inputjour |
|
182 |
do |
|
183 |
if [[ "$inputjour" =~ [0-9][0-9] ]] |
|
184 |
then |
|
185 |
|
|
186 |
echo "*** Saisir l'heure (HH:MM) " |
|
187 |
while read inputheure |
|
188 |
do |
|
189 |
if [[ "$inputheure" =~ [0-9][0-9]":"[0-9][0-9] ]] |
|
190 |
then |
|
191 |
echo "Le choix de l'heure est : $inputheure" |
|
192 |
H_DEBUT=$(echo $inputheure |cut -d":" -f1) |
|
193 |
M_DEBUT=$(echo $inputheure |cut -d":" -f2) |
|
194 |
break; |
|
195 |
else |
|
196 |
echo "*** Saisir l'heure (HH:MM) " |
|
197 |
fi |
|
198 |
done |
|
199 |
|
|
200 |
echo "$M_DEBUT $H_DEBUT $inputjour * * root $BIN_ZFS_SNAPSHOT $DIR_CONF_SNAPSHOT$FILE_NAME.conf" > $DIR_CRON$FILE_NAME |
|
201 |
echo "*** Planification du snapshot [OK]" |
|
202 |
break; |
|
203 |
else |
|
204 |
echo "*** Saisir le jour du mois : 01-30 " |
|
205 |
fi |
|
206 |
done |
|
207 |
|
|
208 |
break ;; |
|
209 |
|
|
210 |
esac |
|
211 |
echo "*** Frequence des snapshots *** " |
|
212 |
echo "1 - Tous les jours" |
|
213 |
echo "2 - Toutes les semaines" |
|
214 |
echo "3 - Tous les mois" |
|
215 |
echo "*******************************" |
|
216 |
|
|
217 |
done |
|
218 |
/etc/init.d/cron restart |
|
219 |
} |
|
220 |
|
|
221 |
while getopts "im:H:D:M:d:N:t:k:h" OPTION |
|
222 |
do |
|
223 |
case $OPTION in |
|
224 |
h) |
|
225 |
usage |
|
226 |
exit 1 |
|
227 |
;; |
|
228 |
i) |
|
229 |
interactive |
|
230 |
exit 0 |
|
231 |
;; |
|
232 |
m) |
|
233 |
checkField4Cron |
|
234 |
MINUTE=$OPTARG |
|
235 |
;; |
|
236 |
H) |
|
237 |
checkField4Cron |
|
238 |
HOUR=$OPTARG |
|
239 |
;; |
|
240 |
D) |
|
241 |
checkField4Cron |
|
242 |
DAYMONTH=$OPTARG |
|
243 |
;; |
|
244 |
M) |
|
245 |
checkField4Cron |
|
246 |
MONTH=$OPTARG |
|
247 |
;; |
|
248 |
d) |
|
249 |
checkField4Cron |
|
250 |
DAYWEEK=$OPTARG |
|
251 |
;; |
|
252 |
N) |
|
253 |
NAMEZFS=$OPTARG |
|
254 |
;; |
|
255 |
t) |
|
256 |
TYPEZFS=$OPTARG |
|
257 |
;; |
|
258 |
k) |
|
259 |
SNAP2KEEP=$OPTARG |
|
260 |
;; |
|
261 |
*) |
|
262 |
usage |
|
263 |
exit 1 |
|
264 |
;; |
|
265 |
esac |
|
266 |
done |
|
267 |
|
|
268 |
if [[ -z $MINUTE ]] || [[ -z $HOUR ]] || [[ -z $DAYMONTH ]] || [[ -z $MONTH ]] || [[ -z $DAYWEEK ]] || [[ -z $NAMEZFS ]] || [[ -z $TYPEZFS ]] || [[ -z $SNAP2KEEP ]] |
|
269 |
then |
|
270 |
usage |
|
271 |
exit 1 |
|
272 |
fi |
|
273 |
|
|
274 |
createCronFile4Snapshot |
|
275 |
|
|
276 |
/etc/init.d/cron restart |
|
277 |
|
|
278 |
|
|
0 | 279 |
bin/create-filesystem (revision 1) | ||
---|---|---|
1 |
#!/bin/bash |
|
2 |
|
|
3 |
function usage { |
|
4 |
echo "Syntax :" 1>&2 |
|
5 |
echo "$0 [options]" 1>&2 |
|
6 |
echo " -n : filesystem name" 1>&2 |
|
7 |
echo " -p : pool name" 1>&2 |
|
8 |
echo " -o : options zfs filesystem. Read the man zfs for more details" 1>&2 |
|
9 |
|
|
10 |
} |
|
11 |
|
|
12 |
function nointeractive { |
|
13 |
|
|
14 |
/sbin/zfs create -o $FS_OPTION $NAME_POOL/$NAME |
|
15 |
|
|
16 |
} |
|
17 |
|
|
18 |
|
|
19 |
function interactive { |
|
20 |
zfs list |
|
21 |
echo "*** Choix du pool pour la creation du filesystem : ***" |
|
22 |
|
|
23 |
while read inputline |
|
24 |
do |
|
25 |
if [ "$inputline" != "" ] |
|
26 |
then |
|
27 |
zfs list |grep -i $inputline |
|
28 |
if [ $? -eq 1 ] |
|
29 |
then |
|
30 |
echo "*** Choix du pool pour la creation du filesystem : ***" |
|
31 |
else |
|
32 |
|
|
33 |
echo "*** Etes-vous sur du choix du pool : $inputline ? (y/n) ***" |
|
34 |
while read inputConfirm |
|
35 |
do |
|
36 |
if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ] |
|
37 |
then |
|
38 |
break |
|
39 |
fi |
|
40 |
echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***" |
|
41 |
done |
|
42 |
|
|
43 |
if [ "$inputConfirm" = "y" ] |
|
44 |
then |
|
45 |
NAME_POOL=$inputline |
|
46 |
echo "Saisir le nom du filesystem : " |
|
47 |
while read inputFS |
|
48 |
do |
|
49 |
if [ "$inputFS" != "" ] |
|
50 |
then |
|
51 |
zfs list |grep -i "$inputFS " |
|
52 |
if [ $? -eq 0 ] |
|
53 |
then |
|
54 |
echo "Le nom du filesystem existe deja" |
|
55 |
FS_OK=1 |
|
56 |
else |
|
57 |
FS_OK=0 |
|
58 |
fi |
|
59 |
if [ $FS_OK -eq 1 ] |
|
60 |
then |
|
61 |
echo "Saisir le nom du filesystem : " |
|
62 |
else |
|
63 |
NAME_FS=$inputFS |
|
64 |
zfs create $NAME_POOL/$inputFS |
|
65 |
if [ $? -eq 0 ] |
|
66 |
then |
|
67 |
echo "*** Creation du filesystem ZFS [OK] ***" |
|
68 |
zfs list |
|
69 |
break |
|
70 |
else |
|
71 |
echo "/!\\ Creation du filesystem ZFS [ERROR] /!\\" |
|
72 |
fi |
|
73 |
fi |
|
74 |
else |
|
75 |
echo "Saisir le nom du filesystem : " |
|
76 |
fi |
|
77 |
done |
|
78 |
break |
|
79 |
fi |
|
80 |
break |
|
81 |
fi |
|
82 |
else |
|
83 |
echo "*** Choix du pool pour la creation du filesystem : ***" |
|
84 |
fi |
|
85 |
done |
|
86 |
} |
|
87 |
|
|
88 |
while getopts "in:p:b:s:o:h" OPTION |
|
89 |
do |
|
90 |
case $OPTION in |
|
91 |
h) |
|
92 |
usage |
|
93 |
exit 1 |
|
94 |
;; |
|
95 |
i) |
|
96 |
interactive |
|
97 |
exit 0 |
|
98 |
;; |
|
99 |
n) |
|
100 |
NAME=$OPTARG |
|
101 |
;; |
|
102 |
p) |
|
103 |
NAME_POOL=$OPTARG |
|
104 |
;; |
|
105 |
o) |
|
106 |
FS_OPTION=$OPTARG |
|
107 |
FS_OPTION=$(echo $FS_OPTION|sed -e 's/,/ -o /g') |
|
108 |
echo "$FS_OPTION" |
|
109 |
;; |
|
110 |
esac |
|
111 |
done |
|
112 |
if [[ -z $NAME_POOL ]] || [[ -z $NAME ]] |
|
113 |
then |
|
114 |
usage |
|
115 |
exit 1 |
|
116 |
fi |
|
117 |
|
|
118 |
nointeractive |
|
0 | 119 |
bin/show-infodisk-cache (revision 1) | ||
---|---|---|
1 |
#!/bin/bash |
|
2 |
|
|
3 |
#cat /opt/gZFS/infodisks.cache |
|
4 |
while read line |
|
5 |
do |
|
6 |
echo $line |
|
7 |
done < "/opt/gZFS/infodisks.cache" |
|
8 |
#done < "/var/log/syslog" |
|
0 | 9 |
bin/del-filesystem (revision 1) | ||
---|---|---|
1 |
#!/bin/bash |
|
2 |
|
|
3 |
function usage { |
|
4 |
echo "Description : destroy a ZFS FileSystem." 1>&2 |
|
5 |
echo "Usage :" 1>&2 |
|
6 |
echo "$0 [OPTIONS]" 1>&2 |
|
7 |
echo " -h display this message" 1>&2 |
|
8 |
echo " -i interactive mode" 1>&2 |
|
9 |
echo " -n ZFS Volume Name" 1>&2 |
|
10 |
|
|
11 |
} |
|
12 |
|
|
13 |
function nointeractive { |
|
14 |
|
|
15 |
MOUNTED=$(zfs get -H mounted $FS_NAME|awk '{ print $3}') |
|
16 |
|
|
17 |
if [ "$MOUNTED" == "no" ] |
|
18 |
then |
|
19 |
zfs destroy $FS_NAME |
|
20 |
|
|
21 |
else |
|
22 |
echo "ZFS FileSystem $FS_NAME mounted" 1>&2 |
|
23 |
exit 1; |
|
24 |
fi |
|
25 |
} |
|
26 |
|
|
27 |
|
|
28 |
function interactive { |
|
29 |
|
|
30 |
zfs list |
|
31 |
echo "*** Enter the ZFS FileSystem Name : ***" |
|
32 |
while read inputline |
|
33 |
do |
|
34 |
NAME_VOL=$inputline |
|
35 |
echo "*** Do you want really remove the ZFS FileSystem : $inputline ? (y/n) ***" |
|
36 |
while read inputConfirm |
|
37 |
do |
|
38 |
if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ] |
|
39 |
then |
|
40 |
break |
|
41 |
fi |
|
42 |
echo "*** Do you want really remove the ZFS FileSystem : $inputline ? (y/n) ***" |
|
43 |
done |
|
44 |
|
|
45 |
|
|
46 |
if [ "$inputConfirm" = "y" ] |
|
47 |
then |
|
48 |
break |
|
49 |
fi |
|
50 |
if [ "$inputConfirm" != "y" ] |
|
51 |
then |
|
52 |
echo "*** Enter the ZFS Volume FileSystem : ***" |
|
53 |
fi |
|
54 |
done |
|
55 |
nointeractive |
|
56 |
} |
|
57 |
|
|
58 |
while getopts "in:h" OPTION |
|
59 |
do |
|
60 |
case $OPTION in |
|
61 |
h) |
|
62 |
usage |
|
63 |
exit 1 |
|
64 |
;; |
|
65 |
i) |
|
66 |
interactive |
|
67 |
;; |
|
68 |
n) |
|
69 |
FS_NAME=$OPTARG |
|
70 |
;; |
|
71 |
*) |
|
72 |
usage |
|
73 |
exit 1 |
|
74 |
;; |
|
75 |
esac |
|
76 |
done |
|
77 |
|
|
78 |
if [[ -z $FS_NAME ]] |
|
79 |
then |
|
80 |
usage |
|
81 |
exit 1 |
|
82 |
fi |
|
83 |
nointeractive |
|
84 |
|
|
85 |
|
|
0 | 86 |
bin/zpool-get-state (revision 1) | ||
---|---|---|
1 |
#!/bin/bash |
|
2 |
|
|
3 |
|
|
4 |
function usage { |
|
5 |
|
|
6 |
echo "Syntax :" |
|
7 |
echo "$0 -n zpool_name : display zpool state and last scrub" |
|
8 |
echo "$0 -h : display this message" |
|
9 |
} |
|
10 |
function nointeractive { |
|
11 |
echo $(zpool status $poolname|grep -i "state:"|sed -e "s/^ \+//g"|sed -e "s/: /:/") |
|
12 |
echo $(zpool status $poolname|grep -i "scan:"|sed -e "s/^ \+//g"|sed -e "s/: /:/") |
|
13 |
exit 0 |
|
14 |
} |
|
15 |
while getopts "in:h" OPTION |
|
16 |
do |
|
17 |
case $OPTION in |
|
18 |
h) |
|
19 |
usage |
|
20 |
exit 1 |
|
21 |
;; |
|
22 |
n) |
|
23 |
poolname=$OPTARG |
|
24 |
;; |
|
25 |
*) |
|
26 |
usage |
|
27 |
;; |
|
28 |
esac |
|
29 |
done |
|
30 |
if [[ -z $poolname ]] |
|
31 |
then |
|
32 |
usage |
|
33 |
exit 1 |
|
34 |
fi |
|
35 |
|
|
36 |
nointeractive |
|
37 |
|
|
38 |
|
|
0 | 39 |
bin/zfs-snapshot (revision 1) | ||
---|---|---|
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 |
|
0 | 187 |
bin/update-iscsi-volume (revision 1) | ||
---|---|---|
1 |
#!/bin/bash |
|
2 |
cat /proc/net/iet/volume |
|
3 |
echo "*** Saisir TID a mettre a jour : ***" |
|
4 |
|
|
5 |
while read inputline |
|
6 |
do |
|
7 |
TID_ISCSI=$inputline |
|
8 |
echo "*** Etes-vous sur de vouloir mettre a jour le TID : $inputline ? (y/n) ***" |
|
9 |
|
|
10 |
while read inputConfirm |
|
11 |
do |
|
12 |
if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ] |
|
13 |
then |
|
14 |
break |
|
15 |
fi |
|
16 |
echo "*** Etes-vous sur du nom : $inputline ? (y/n) ***" |
|
17 |
done |
|
18 |
|
|
19 |
if [ "$inputConfirm" = "y" ] |
|
20 |
then |
|
21 |
COPY_LINE=1 |
|
22 |
TARGET=$(cat /proc/net/iet/session |grep tid:$TID_ISCSI |awk '{split($0,array,"name:")} END {print array[2]}') |
|
23 |
LUN=$(cat /proc/net/iet/volume |grep "tid:$TID_ISCSI" -A1 | awk '{split($0,array,"lun:")} END {print array[2]}'|cut -d " " -f1) |
|
24 |
TYPE=$(cat /proc/net/iet/volume |grep "tid:$TID_ISCSI" -A1 | awk '{split($0,array,"iotype:")} END {print array[2]}'|cut -d " " -f1) |
|
25 |
DEV_PATH=$(cat /proc/net/iet/volume |grep "tid:$TID_ISCSI" -A1 | awk '{split($0,array,"path:")} END {print array[2]}'|cut -d " " -f1) |
|
26 |
|
|
27 |
echo "*** $TARGET" |
|
28 |
echo "*** $LUN" |
|
29 |
echo "*** $TYPE" |
|
30 |
echo "*** $DEV_PATH" |
|
31 |
COPY_LINE=0 |
|
32 |
while read line |
|
33 |
do |
|
34 |
echo $line |grep -i "^Target" |
|
35 |
if [ $? -eq 0 ] |
|
36 |
then |
|
37 |
COPY_LINE=0 |
|
38 |
fi |
|
39 |
echo $line |grep -i "^Target $TARGET" |
|
40 |
if [ $? -eq 0 ] |
|
41 |
then |
|
42 |
COPY_LINE=1 |
|
43 |
fi |
|
44 |
if [ $COPY_LINE -eq 1 ] |
|
45 |
then |
|
46 |
SEARCH_USER=$(echo $line |grep -i "^IncomingUser") |
|
47 |
if [ "$SEARCH_USER" != "" ] |
|
48 |
then |
|
49 |
echo "FIND $SEARCH_USER" |
|
50 |
USERCHAP=$(echo $SEARCH_USER|cut -d " " -f2) |
|
51 |
PASSCHAP=$(echo $SEARCH_USER|cut -d " " -f3) |
|
52 |
if [ "$USERCHAP" != "IncomingUser" ] |
|
53 |
then |
|
54 |
echo "USERCHAP : $USERCHAP" |
|
55 |
echo "PASSCHAP : $PASSCHAP" |
|
56 |
fi |
|
57 |
fi |
|
58 |
fi |
|
59 |
|
|
60 |
done < "/etc/iet/ietd.conf" |
|
61 |
|
|
62 |
#ietadm --op delete --tid=$TID_ISCSI |
|
63 |
#ietadm --op new --tid=$TID_ISCSI --params Name=$TARGET |
|
64 |
#ietadm --op new --tid=$TID_ISCSI --lun=$LUN --params Path=$DEV_PATH,Type=$TYPE |
|
65 |
#ietadm --op new --tid=$TID_ISCSI --user --params=IncomingUser=$USERCHAP,Password=$PASSCHAP |
|
66 |
break |
|
67 |
fi |
|
68 |
if [ "$inputConfirm" != "y" ] |
|
69 |
then |
|
70 |
echo "*** Saisir TID a mettre a jour : ***" |
|
71 |
fi |
|
72 |
done |
|
0 | 73 |
bin/get-conf-snapshot (revision 1) | ||
---|---|---|
1 |
#!/bin/bash |
|
2 |
|
|
3 |
function usage { |
|
4 |
echo "Syntax : $0 zfs_filesystem/volume_name" 1>&2 |
|
5 |
echo "Return the parameters snapshot for a zfs filesystem/volume" 1>&2 |
|
6 |
} |
|
7 |
|
|
8 |
DIR_CRON="/etc/cron.d/" |
|
9 |
DIR_CONF_SNAP="/opt/gZFS/snapshots/" |
|
10 |
NAMEZFS=$1 |
|
11 |
FILE_NAME=$(echo "snapshot-"${NAMEZFS/\//-}) |
|
12 |
|
|
13 |
if [ "$1" != "" ] |
|
14 |
then |
|
15 |
if [ -e $DIR_CRON$FILE_NAME ] |
|
16 |
then |
|
17 |
echo "minutesofsnapshots=$(cat $DIR_CRON$FILE_NAME |awk '{split($0,array," ")} END {print array[1]}')" |
|
18 |
echo "hoursofsnapshots=$(cat $DIR_CRON$FILE_NAME |awk '{split($0,array," ")} END {print array[2]}')" |
|
19 |
echo "monthsnapshots=$(cat $DIR_CRON$FILE_NAME |awk '{split($0,array," ")} END {print array[3]}')" |
|
20 |
echo "dayofmonthsnapshots=$(cat $DIR_CRON$FILE_NAME |awk '{split($0,array," ")} END {print array[4]}')" |
|
21 |
echo "dayofweeksnapshots=$(cat $DIR_CRON$FILE_NAME |awk '{split($0,array," ")} END {print array[5]}')" |
|
22 |
fi |
|
23 |
if [ -e "$DIR_CONF_SNAP$FILE_NAME.conf" ] |
|
24 |
then |
|
25 |
echo "fileconf=$DIR_CONF_SNAP$FILE_NAME.conf" |
|
26 |
/bin/cat $DIR_CONF_SNAP$FILE_NAME.conf |
|
27 |
fi |
|
28 |
|
|
29 |
|
|
30 |
else |
|
31 |
usage |
|
32 |
exit 1 |
|
33 |
fi |
|
0 | 34 |
bin/zfs-clone (revision 1) | ||
---|---|---|
1 |
#!/bin/bash |
|
2 |
|
|
3 |
function usage { |
|
4 |
echo "Syntax :" |
|
5 |
echo "$0 -n snapshot name to clone" |
|
6 |
echo "$0 -i for a interactive use" |
|
7 |
|
|
8 |
} |
|
9 |
|
|
10 |
|
|
11 |
function nointeractive { |
|
12 |
|
|
13 |
TODAY=$(date +%Y%m%d%H%M%S) |
|
14 |
|
|
15 |
clone_name=$(echo "$volfs2clone" |sed -e "s/@.*$//g") |
|
16 |
/sbin/zfs clone $volfs2clone $clone_name-$TODAY-clone |
|
17 |
if [ "$?" == "0" ] |
|
18 |
then |
|
19 |
echo "name:$clone_name-$TODAY-clone" |
|
20 |
exit 0 |
|
21 |
fi |
|
22 |
} |
|
23 |
|
|
24 |
function interactive { |
|
25 |
|
|
26 |
/sbin/zfs list -t snapshot |
|
27 |
echo "*** Select Volume or Filesystem to Clone : ***" |
|
28 |
while read inputline |
|
29 |
do |
|
30 |
NAMEVOLFS=$inputline |
|
31 |
echo "*** Are you sur ? : $inputline ? (y/n) ***" |
|
32 |
|
|
33 |
while read inputConfirm |
|
34 |
do |
|
35 |
if [ "$inputConfirm" = "y" ]||[ "$inputConfirm" = "n" ] |
|
36 |
then |
|
37 |
break |
|
38 |
fi |
|
39 |
echo "*** Are you sur ? : $inputline ? (y/n) ***" |
|
40 |
done |
|
41 |
|
|
42 |
if [ "$inputConfirm" = "y" ] |
|
43 |
then |
|
44 |
volfs2clone=$inputline |
|
45 |
nointeractive |
|
46 |
fi |
|
47 |
if [ "$inputConfirm" != "y" ] |
|
48 |
then |
|
49 |
/sbin/zfs list -t snapshot |
|
50 |
echo "*** Select Volume or Filesystem to Clone : ***" |
|
51 |
fi |
|
52 |
done |
|
53 |
|
|
54 |
} |
|
55 |
|
|
56 |
while getopts "in:h" OPTION |
|
57 |
do |
|
58 |
case $OPTION in |
|
59 |
h) |
|
60 |
usage |
|
61 |
exit 1 |
|
62 |
;; |
|
63 |
n) |
|
64 |
volfs2clone=$OPTARG |
|
65 |
;; |
|
66 |
i) |
|
67 |
interactive |
|
68 |
exit 0 |
|
69 |
;; |
|
70 |
esac |
|
71 |
done |
|
72 |
if [[ -z $volfs2clone ]] |
|
73 |
then |
|
74 |
usage |
|
75 |
exit 1 |
|
76 |
fi |
|
77 |
nointeractive |
|
78 |
|
|
0 | 79 |
bin/disable-snapshot (revision 1) | ||
---|---|---|
1 |
#!/bin/bash |
|
2 |
|
|
3 |
DIR_CRON="/etc/cron.d/" |
|
4 |
DIR_CONF_SNAPSHOT="/opt/gZFS/snapshots/" |
|
5 |
BIN_ZFS_SNAPSHOT="/sbin/zfs-snapshot" |
|
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
|
10 |
|
|
11 |
|
|
12 |
function usage { |
|
13 |
echo "Usage :" 1>&2 |
|
14 |
echo "disable-snapshot [OPTIONS]" 1>&2 |
|
15 |
echo " -h display this message" 1>&2 |
|
16 |
echo " -i interactive mode" 1>&2 |
|
17 |
echo " -N Specify the name ZFS Volume/Filesystem" 1>&2 |
|
18 |
|
|
19 |
} |
|
20 |
|
|
21 |
function nointeractive { |
|
22 |
FILE_NAME=$(echo "snapshot-"${NAMEZFS/\//-}) |
|
23 |
/bin/rm -f $DIR_CONF_SNAPSHOT$FILE_NAME.conf |
|
24 |
if [ -e $DIR_CONF_SNAPSHOT$FILE_NAME.conf ] |
|
25 |
then |
|
26 |
echo "Error : cannot delete $DIR_CONF_SNAPSHOT$FILE_NAME.conf" |
|
27 |
fi |
|
28 |
|
|
29 |
/bin/rm $DIR_CRON$FILE_NAME |
|
30 |
if [ -e $DIR_CRON$FILE_NAME ] |
|
31 |
then |
|
32 |
echo "Error : cannot delete $DIR_CRON$FILE_NAME" |
|
33 |
fi |
|
34 |
|
|
35 |
} |
|
36 |
|
|
37 |
function interactive { |
|
38 |
|
|
39 |
/sbin/zfs list |
|
40 |
echo "*** Nom du volume pour desactiver les snapshot :" |
|
41 |
while read inputline |
|
42 |
do |
|
43 |
if [ "$inputline" != "" ] |
|
44 |
then |
|
45 |
/sbin/zfs list $inputline |
|
46 |
if [ $? -eq 0 ] |
|
47 |
then |
|
48 |
FILE_NAME=$(echo "snapshot-"${inputline/\//-}) |
|
49 |
if [ -e $DIR_CONF_SNAPSHOT$FILE_NAME.conf ] |
|
50 |
then |
|
51 |
/bin/rm -f $DIR_CONF_SNAPSHOT$FILE_NAME.conf |
|
52 |
if [ $? -eq 0 ] |
|
53 |
then |
|
54 |
echo "*** Suppression du fichier conf $DIR_CONF_SNAPSHOT$FILE_NAME.conf [OK]" |
|
55 |
else |
|
56 |
echo "/!\\ Suppression du fichier $DIR_CONF_SNAPSHOT$FILE_NAME.conf [ERROR] /!\\" |
|
57 |
exit |
|
58 |
fi |
|
59 |
else |
|
60 |
echo "*** Le fichier de conf $DIR_CONF_SNAPSHOT$FILE_NAME.conf n'existe pas" |
|
61 |
fi |
|
62 |
|
|
63 |
if [ -e $DIR_CRON$FILE_NAME ] |
|
64 |
then |
|
65 |
/bin/rm $DIR_CRON$FILE_NAME |
|
66 |
if [ $? -eq 0 ] |
|
67 |
then |
|
68 |
echo "*** Suppression du fichier de cron $DIR_CRON$FILE_NAME [OK]" |
|
69 |
break |
|
70 |
else |
|
71 |
echo "/!\\ Suppression du fichier de cron $DIR_CRON$FILE_NAME /!\\" |
|
72 |
exit |
|
73 |
fi |
|
74 |
else |
|
75 |
echo "*** Le fichier cron $DIR_CRON$FILE_NAME n'existe pas" |
|
76 |
break |
|
77 |
fi |
|
78 |
fi |
|
79 |
fi |
|
80 |
echo "*** Nom du volume pour desactiver les snapshot :" |
|
81 |
done |
|
82 |
} |
|
83 |
|
|
84 |
while getopts "iN:h" OPTION |
|
85 |
do |
|
86 |
case $OPTION in |
|
87 |
h) |
|
88 |
usage |
|
89 |
exit 1 |
|
90 |
;; |
|
91 |
i) |
|
92 |
interactive |
|
93 |
;; |
|
94 |
N) |
|
95 |
NAMEZFS=$OPTARG |
|
96 |
;; |
|
97 |
*) |
|
98 |
usage |
|
99 |
exit 1 |
|
100 |
;; |
|
101 |
esac |
|
102 |
done |
|
103 |
if [[ -z $NAMEZFS ]] |
|
104 |
then |
|
105 |
usage |
|
106 |
exit 1 |
|
107 |
fi |
|
108 |
nointeractive |
|
0 | 109 |
bin/get-disk-info (revision 1) | ||
---|---|---|
1 |
#!/bin/bash |
|
2 |
SMARTTOOL="/usr/sbin/smartctl" |
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
function usage { |
|
7 |
echo "Syntax :" |
|
8 |
echo "$0 -d device_name" |
|
9 |
} |
|
10 |
|
|
11 |
function nointeractive { |
|
12 |
|
|
13 |
FIRST_TEST=$($SMARTTOOL $DEVBYID) |
|
14 |
if [ $? -eq 0 ] |
|
15 |
then |
|
16 |
while read line |
|
17 |
do |
|
18 |
if [[ "$line" =~ ":" ]] |
|
19 |
then |
|
20 |
echo $line |
|
21 |
fi |
|
22 |
|
|
23 |
done <<< "$($SMARTTOOL -i -H $DEVBYID)" |
|
24 |
DEVBYIDNOPART=$(echo $DEVBYID |sed -e "s/\/dev\/disk\/by-id\///g" |sed -e "s/-part1$//g") |
|
25 |
echo "nameinzpool:$DEVBYIDNOPART" |
|
26 |
errorread=$(/sbin/zpool status |grep "$DEVBYIDNOPART"|sed -e "s/\t//g" |sed -e "s/ \+/ /g" | sed -e "s/^ //g"|cut -d " " -f3) |
|
27 |
echo "errorread:$errorread" |
|
28 |
errorwrite=$(/sbin/zpool status |grep "$DEVBYIDNOPART"|sed -e "s/\t//g" |sed -e "s/ \+/ /g" | sed -e "s/^ //g"|cut -d " " -f4) |
|
29 |
echo "errorwrite:$errorwrite" |
|
30 |
errorchecksum=$(/sbin/zpool status |grep "$DEVBYIDNOPART"|sed -e "s/\t//g" |sed -e "s/ \+/ /g" | sed -e "s/^ //g"|cut -d " " -f5) |
|
31 |
echo "errorchecksum:$errorchecksum" |
|
32 |
exit 0 |
|
33 |
fi |
|
34 |
|
|
35 |
if [[ -e /sbin/multipath ]] || [[ -e /usr/sbin/multipath ]] || [[ -e /usr/local/sbin/multipath ]] |
|
36 |
then |
|
37 |
|
|
38 |
resultMulti=$(multipath -l $DEVBYID |sed -e 's/(/disk_id=/g' |sed -e 's/)//g'|cut -d " " -f2 |grep disk_id|cut -d '=' -f2) |
|
39 |
if [ "$resultMulti" != "" ] |
|
40 |
then |
|
41 |
while read liner |
|
42 |
do |
|
43 |
if [[ "$liner" =~ ":" ]] |
|
44 |
then |
|
45 |
echo $liner |
|
46 |
fi |
|
47 |
done<<< "$($SMARTTOOL -i -H /dev/disk/by-id/scsi-$resultMulti)" |
|
48 |
DEVBYIDNOPART=$(echo $DEVBYID|cut -d "/" -f4) |
|
49 |
echo "nameinzpool:$DEVBYIDNOPART" |
|
50 |
errorread=$(/sbin/zpool status |grep "$DEVBYIDNOPART "|sed -e "s/\t//g" |sed -e "s/ \+/ /g" | sed -e "s/^ //g"|cut -d " " -f3) |
|
51 |
echo "errorread:$errorread" |
|
52 |
errorwrite=$(/sbin/zpool status |grep "$DEVBYIDNOPART "|sed -e "s/\t//g" |sed -e "s/ \+/ /g" | sed -e "s/^ //g"|cut -d " " -f4) |
|
53 |
echo "errorwrite:$errorwrite" |
|
54 |
errorchecksum=$(/sbin/zpool status |grep "$DEVBYIDNOPART "|sed -e "s/\t//g" |sed -e "s/ \+/ /g" | sed -e "s/^ //g"|cut -d " " -f5) |
|
55 |
echo "errorchecksum:$errorchecksum" |
|
56 |
exit 0 |
|
57 |
fi |
|
58 |
fi |
|
59 |
|
|
60 |
echo "no informations disk" |
|
61 |
} |
|
62 |
|
|
63 |
while getopts "d:h" OPTION |
|
64 |
do |
|
65 |
case $OPTION in |
|
66 |
h) |
|
67 |
usage |
|
68 |
exit 1 |
|
69 |
;; |
|
70 |
d) |
|
71 |
DEVBYID=$OPTARG |
|
72 |
;; |
|
73 |
*) |
|
74 |
usage |
|
75 |
exit 1 |
|
76 |
;; |
|
77 |
esac |
|
78 |
done |
|
79 |
if [[ -z $DEVBYID ]] |
|
80 |
then |
|
81 |
usage |
|
82 |
exit 1 |
|
83 |
fi |
|
84 |
|
|
85 |
nointeractive |
|
86 |
|
|
0 | 87 |
Formats disponibles : Unified diff