New script that will recreate a given disk image.
[backups/.git] / scripts / repack-image.sh
1 #!/bin/bash
2
3 # One must supply the disk name as an argument to this script
4 [ $# == 1 ] || exit 1
5
6 scriptsdir=$(dirname $0)
7
8 export PATH=$scriptsdir:/bin:/usr/bin:/sbin:/usr/sbin
9
10 # source the default configuration
11 . config.sh
12
13 # source the system specific configuration
14 [ -f /etc/lsbackups.conf ] && . /etc/lsbackups.conf
15
16 isoimage="$imagedir/$1.iso"
17 isomountdir="$isoimage.mnt"
18
19 echo "-> Checking for available disk space on $imagedir"
20 available=$(df $imagedir | awk '{print$4}' | grep -E "[0-9]+")
21 required=$((imagesizemb*1024))
22 [ $required -gt $available ] && err "Not enough space for the backup image on $imagedir"
23
24 echo "-> Creating directories"
25 mkdir --mode=700 -p $datadir $imagedir $isomountdir $tmpdir
26 if [ $? != 0 ]; then
27   test -d $isomountdir && rm -rf $isomountdir
28   err "Unable to create the following directories:
29   $datadir $imagedir $isomountdir $tmpdir"
30 fi
31
32 echo "-> Creating the iso image in $isoimage"
33 dd of=$isoimage bs=1M count=0 seek=$imagesizemb
34
35 [ $? != 0 ] && err "dd failed to create $isoimage"
36
37 mke2fs -b $blocksize -F $isoimage
38 if [ $? != 0 ]; then
39   rm -rf $isomountdir $isoimage
40   err "Unable to create the iso image: $isoimage"
41 fi
42
43 e2label $isoimage $today
44 if [ $? != 0 ]; then
45   rm -rf $isomountdir $isoimage
46   err "Unable to label the iso image: $isoimage"
47 fi
48
49 echo "-> Mounting the iso image"
50 mount -t ext2 -o loop $isoimage $isomountdir
51 if [ $? != 0 ]; then
52   rm -rf $isomountdir $isoimage
53   err "Unable to mount the iso image: $isoimage -> $isomountdir"
54 fi
55
56 echo "-> Querying backupdb for files originally placed on disk $1"
57 cat $backupdb | files-from-date.sh $1 > $1.filelist
58
59 echo "-> Repacking backup image for disk $1"
60 cat $1.filelist | rsync -W -H -S -l -p -t -g -o -0 --files-from=- --stats --progress / $isomountdir
61 umount $isomountdir
62 rm $1.filelist
63 md5sum $isoimage | awk '{print$1}' > $isoimage.md5sum
64
65
66
67
68
69
70
71