Benjamin Renard commited on 2011-09-06 14:10:02
Showing 5 changed files, with 132 additions and 0 deletions.
... | ... |
@@ -0,0 +1,3 @@ |
1 |
+# A l'insertion du disque, lancement du script de backup |
|
2 |
+# Rechargement des regles udev manuellement si necessaire : udevadm control --reload-rules |
|
3 |
+SUBSYSTEMS=="scsi", DRIVERS=="sd", ATTRS{vendor}=="WD", ATTRS{model}=="10EAVS External", RUN+="/usr/local/sbin/udev-bckp-disk" |
... | ... |
@@ -0,0 +1,116 @@ |
1 |
+#!/bin/bash |
|
2 |
+ |
|
3 |
+# LOG |
|
4 |
+LOG=/var/log/bckp-disk.log |
|
5 |
+ |
|
6 |
+# Chemins à archiver (avec le / finale) |
|
7 |
+SRC_BACKUP_PATH="/" |
|
8 |
+ |
|
9 |
+# A exclure |
|
10 |
+EXCLUDE_FROM_FILE='/etc/rsync.exclude' |
|
11 |
+ |
|
12 |
+# Dossier dans lequel archiver les dossiers sur le disque (sans le / initial et avec le / final) |
|
13 |
+DST_BACKUP_PATH="serveur/" |
|
14 |
+ |
|
15 |
+# LOCK_FILE |
|
16 |
+LOCK_FILE=/var/lock/bckp-disk.lock |
|
17 |
+ |
|
18 |
+function is_mount () { |
|
19 |
+ df $1 | grep -c "^$1" |
|
20 |
+} |
|
21 |
+ |
|
22 |
+function debug () { |
|
23 |
+ d=`date "+%Y-%m-%d - %Hh%Mm%Ss"` |
|
24 |
+ echo "$d -- [$1] $2" >> $LOG 2>&1 |
|
25 |
+ if [ "$1" == "HALT" ] |
|
26 |
+ then |
|
27 |
+ beep -f 300 -l 2000 |
|
28 |
+ fi |
|
29 |
+} |
|
30 |
+ |
|
31 |
+if [ "$ACTION" == "add" -a "$DEVTYPE" == "partition" ] |
|
32 |
+then |
|
33 |
+ debug INFO Start |
|
34 |
+ if [ -f $LOCK_FILE ] |
|
35 |
+ then |
|
36 |
+ debug ERREUR "Le fichier de lock est toujours présent ($LOCK_FILE)." |
|
37 |
+ debug HALT |
|
38 |
+ exit 1 |
|
39 |
+ fi |
|
40 |
+ debug INFO "Dépot du fichier de lock." |
|
41 |
+ echo $$ > $LOCK_FILE |
|
42 |
+ beep -f 1000 -r 2 -l 100 |
|
43 |
+ |
|
44 |
+ DATE=`date "+%Y-%m-%d--%Hh%Mm%Ss"` |
|
45 |
+ MNT_DIR=/media/bckp_$DATE |
|
46 |
+ |
|
47 |
+ if [ `is_mount $DEVNAME` -eq 1 ] |
|
48 |
+ then |
|
49 |
+ debug ERREUR "Le disque est déjà monté" |
|
50 |
+ debug HALT |
|
51 |
+ exit 1 |
|
52 |
+ fi |
|
53 |
+ |
|
54 |
+ if [ -d $MNT_DIR ] |
|
55 |
+ then |
|
56 |
+ debug ERREUR "Le point de montage ($MNT_DIR) existe déjà." |
|
57 |
+ debug HALT |
|
58 |
+ exit 1 |
|
59 |
+ fi |
|
60 |
+ |
|
61 |
+ debug INFO "Montage du disque." |
|
62 |
+ mkdir $MNT_DIR >> $LOG 2>&1 |
|
63 |
+ mount $DEVNAME $MNT_DIR >> $LOG 2>&1 |
|
64 |
+ |
|
65 |
+ if [ `is_mount $DEVNAME` -eq 0 ] |
|
66 |
+ then |
|
67 |
+ echo "[ERREUR] Problème durant le montage du disque dur." |
|
68 |
+ rmdir $MNT_DIR >> $LOG 2>&1 |
|
69 |
+ debug HALT |
|
70 |
+ exit 1 |
|
71 |
+ fi |
|
72 |
+ debug INFO "Disque monté." |
|
73 |
+ |
|
74 |
+ debug INFO "Synchronisation." |
|
75 |
+ |
|
76 |
+ rsync -av --delete-after --exclude-from=$EXCLUDE_FROM_FILE $SRC_BACKUP_PATH $MNT_DIR/$DST_BACKUP_PATH >> $LOG 2>&1 |
|
77 |
+ |
|
78 |
+ if [ $? -ne 0 ] |
|
79 |
+ then |
|
80 |
+ debug ERREUR "Problème durant la synchronisation" |
|
81 |
+ umount $MNT_DIR >> $LOG 2>&1 |
|
82 |
+ rmdir $MNT_DIR >> $LOG 2>&1 |
|
83 |
+ debug HALT |
|
84 |
+ exit 1 |
|
85 |
+ fi |
|
86 |
+ debug INFO "Synchronisation réussie" |
|
87 |
+ |
|
88 |
+ debug INFO "Démontage du disque" |
|
89 |
+ umount $MNT_DIR >> $LOG 2>&1 |
|
90 |
+ |
|
91 |
+ if [ `is_mount $DEVNAME` -eq 1 ] |
|
92 |
+ then |
|
93 |
+ debug ERREUR "Problème durant le démontage du disque dur." |
|
94 |
+ debug HALT |
|
95 |
+ exit 1 |
|
96 |
+ fi |
|
97 |
+ |
|
98 |
+ rmdir $MNT_DIR >> $LOG 2>&1 |
|
99 |
+ |
|
100 |
+ while /bin/true; |
|
101 |
+ do |
|
102 |
+ if [ -L "/dev/disk/by-uuid/$ID_FS_UUID" ] |
|
103 |
+ then |
|
104 |
+ debug INFO "Attente que le disque soit débranché..." |
|
105 |
+ beep -f 1000 -r 3 -l 500 |
|
106 |
+ sleep 60 |
|
107 |
+ else |
|
108 |
+ debug INFO "Le disque a été débranché." |
|
109 |
+ debug INFO "Stop." |
|
110 |
+ rm -f $LOCK_FILE |
|
111 |
+ beep -f 1000 -l 2000 |
|
112 |
+ exit 0 |
|
113 |
+ fi |
|
114 |
+ done |
|
115 |
+ |
|
116 |
+fi |