3 # Goal: backup a directory
5 # $2: Server name (i.e.: onelab2)
6 # $3: Backup name (i.e.: twiki)
8 # $5: Directory to backup
11 BACKUP_NAME=$1/$2-$3-$4.tar.bz2
14 if [ ! -d $DIR ]; then
15 echo " (No such directory) [KO]"
19 echo -n "Backup directory $DIR..."
20 tar cfjp $BACKUP_NAME *
22 echo -n " (`stat --printf="%s" $BACKUP_NAME`)"
23 if [ $RES -eq 0 ]; then
32 # Goal: backup a PostgreSQL database
34 # $2: Server name (i.e.: onelab2)
42 BACKUP_NAME=$DEST/$2-db-$DBNAME-$3.bak
44 echo -n "Backup database $DBNAME..."
45 pg_dump -i -U postgres --user=$DBUSER -F c -f $BACKUP_NAME $DBNAME
47 echo -n " (`stat --printf="%s" $BACKUP_NAME`)"
48 if [ $RES -eq 0 ]; then
58 # Goal: backup all PostgreSQL databases on the machine
60 # $2: Server name (i.e.: onelab2)
62 function backup_all_dbs {
63 for i in `psql -qtAF '|' -U postgres -l`; do
64 DBNAME=`echo $i | cut -d '|' -f 1`
65 DBUSER=`echo $i | cut -d '|' -f 2`
66 if [ $DBNAME != template0 -a $DBNAME != template1 ]; then
67 backup_db $1 $2 $3 $DBNAME $DBUSER
72 # Goal: backup a database in a VServer
74 # $2: VServer name (i.e.: onelab2)
75 # $3: Backup name (i.e.: twiki)
79 function backup_vserver_db {
82 BACKUP_NAME=$1/$2-$3-$4.bak
86 mkdir -p /vservers/$VSERVER/$DEST
87 echo -n "Backup database $DBNAME..."
88 vserver $VSERVER exec \
89 pg_dump -i -U postgres --user=$DBUSER -F c -v -f $BACKUP_NAME \
92 mv /vservers/$VSERVER/$BACKUP_NAME $BACKUP_NAME
93 echo -n " (`stat --printf="%s" $BACKUP_NAME`)"
94 if [ $RES -eq 0 ]; then
104 # Goal: backup an offline vserver instance
105 # $1: Destination (where to save the backup)
106 # $2: VServer name (i.e.: plc)
108 function backup_vserver_offline {
111 BACKUP_NAME=$1/$2-vs-$3.off.tar.bz2
112 BACKUP_CONF_NAME=$1/$2-vsconf-$3.off.tar.bz2
114 echo -n "Backup vserver $VSERVER..."
115 if [ ! -d /etc/vservers/$VSERVER ]; then
116 echo " (No such vserver) [ KO ]"
120 cd /etc/vservers/$VSERVER &&
121 tar cfjp $BACKUP_CONF_NAME * 2>&1 >/dev/null &&
122 cd /vserver/$VSERVER &&
123 tar cfjp $BACKUP_NAME * 2>&1 >/dev/null
126 echo -n " (`stat --printf="%s" $BACKUP_NAME`)"
127 if [ $RES -eq 0 ]; then
137 # Goal: backup an online vserver instance
138 # $1: Destination (where to save the backup)
139 # $2: VServer name (i.e.: plc)
141 # $4: LVM dev on which the VServer is mounted (default to /dev/vg/$2 if empty)
142 function backup_vserver_online {
145 BACKUP_NAME=$1/$2-vs-$3.on.tar.bz2
146 BACKUP_CONF_NAME=$1/$2-vsconf-$3.on.tar.bz2
149 DEV="/dev/vg/$VSERVER"
152 echo -n "Backup vserver $VSERVER..."
153 mkdir -p $DEST >/dev/null
156 if [ ! -d /etc/vservers/$VSERVER ]; then
157 echo " (No such vserver) [ KO ]"
161 # Create a snapshot of the running vserver filesystem...
162 SNAPVG=`echo $SNAPDEV | cut -f 3 -d '/'`
163 SNAPLV=`echo $SNAPDEV | cut -f 4 -d '/'`
164 SNAPMOUNT=/tmp/$SNAPLV
165 lvcreate -L20G -s -n$SNAPLV $DEV >/dev/null
166 if [ $? -ne 0 ]; then
167 echo " (Can't create snapshot volume: $SNAPDEV) [ KO ]"
171 # ... mount it and backup it...
172 cd /etc/vservers/$VSERVER &&
173 tar cfjp $BACKUP_CONF_NAME * &&
174 mkdir -p $SNAPMOUNT &&
175 mount -t ext3 $SNAPDEV $SNAPMOUNT -o ro &&
177 tar cfjp $BACKUP_NAME * 2>/dev/null >/dev/null
180 # ... and remove the snapshot
183 lvremove -f $SNAPDEV >/dev/null &&
185 if [ $? -ne 0 ]; then
186 echo " (Can't delete snapshot volume: $SNAPDEV) [ KO ]"
190 echo -n " (`stat --printf="%s" $BACKUP_NAME`)"
191 if [ $RES -eq 0 ]; then
201 # Goal: backup a vserver instance (online or offline)
202 # $1: Destination (where to save the backup)
203 # $2: VServer name (i.e.: onelab2)
205 function backup_vserver {
209 if [ ! -d /etc/vservers/$VSERVER ]; then
210 echo "Backup vserver $VSERVER... (No such vserver) [ KO ]"
213 ctx=`cat /etc/vservers/$VSERVER/context`
214 vserver-stat | grep $ctx 2>&1 > /dev/null
217 if [ $offline -eq 0 ]; then
218 backup_vserver_online $DEST $VSERVER $DATE
220 backup_vserver_offline $DEST $VSERVER $DATE
225 # Goal: backup all vserver instances (online or offline) on the machine
226 # $1: Destination (where to save the backup)
228 function backup_all_vservers {
229 for i in /etc/vservers/*; do
230 VSERVER=`basename $i`
231 backup_vserver $1 $VSERVER $2
235 # Fetch all backups from a server
239 # $4: backup location
240 function fetch_backup {
245 echo -n "Fetch backups from $BACKUP_HOST..."
246 su $BACKUP_USER -c "mkdir -pv $DEST"
247 su $BACKUP_USER -c "rsync --exclude="lost+found" -a $BACKUP_USER@$BACKUP_HOST:$BACKUP_LOC/ $DEST"
249 if [ $RES -eq 0 ]; then