1 Laatst bewerkt door bigred (21 Jan 2011 16:34:53)

Onderwerp: mijn eerste backup script

Ik had al een tijdje een 1TB usb harddisk voor me data maar eigenlijk nooit een fatsoenlijke manier om deze te backuppen.
Belangrijke dingen kopieerde ik eens in de zoveel tijd naar een werkstation en de rest was eigenlijk aan de gok overgelaten.
Pas stond er een in een folder nog een 1tb usb harddisk in de aanbieding en ik dacht het moet er maar eens van komen.
Me vriendin gaat geregeld naar de binnenstad van Enschede dus ik had haar opdracht gegeven die harddisk voor me mee te nemen.
Wat denk je precies dezelfde harddisk die ik al had, hele andere winkel en zeker een jaar later.

Mijn eerste uitdaging was dus om uit te zoeken welke harddisk wat is zodat ze niet in de verkeerde volgorde gemount worden als ik per ongeluk de stekkers omwissel.
Ik had al eens zoiets gedaan met udev voor 2 dezelfde usb-serial adaptors op me werkstation.
Met udevinfo -a -p $(udevinfo -q path -n /dev/sda)
en udevinfo -a -p $(udevinfo -q path -n /dev/sdb)
kun je vergelijken wat het verschil is tussen de 2 drives.
Omdat het bij mij om 2 dezelfde drives ging was alles hetzelfde behalve het serie nummer
in /etc/udev/rules.d/10-local.rules kan je aangeven welke drive met welk serie nummer naar welk device gaat

/etc/udev/rules.d/10-local.rules

BUS=="usb", KERNEL=="sd?1", ATTRS{serial}=="00243269", NAME="%k", SYMLINK+="backup"
BUS=="usb", KERNEL=="sd?1", ATTRS{serial}=="000ec422", NAME="%k", SYMLINK+="1tb"

Zo krijg ik een /dev/backup en /dev/1tb device die ik mount als /mnt/backup en mnt/1tb.

Alle schijven op de goede plaats nu kan ik beginnen aan me backup script:
Wat zijn de eisen die ik stel aan het script:
Natuurlijk backup van /mnt/1tb naar /mnt/backup
controleren of beide schijven aanwezig zijn en zijn gemount.
email naar mij met status report.

Na een lange zoektocht op internet naar de verschillende programma's ben ik uiteindelijk op dit schript uitgekomen (met uitleg in het script).

/usr/sbin/backup

#!/bin/bash
#set datum voor email
date=$(date --rfc-3339=date)

#set datum en tijd
date2=$(date)

#set backup file
tmpbackupfile=/tmp/backup

#set mount points
mnt_point=/mnt/1tb
mnt_point2=/mnt/backup

#mount backup disk
mount /dev/backup /mnt/backup

#check of master en backupdisk gemount zijn
command=$(mount | grep $mnt_point | cut -d\  -f3)
command2=$(mount | grep $mnt_point2 | cut -d\  -f3)

#als masterdisk niet gemount is stuur mail unmount backup en exit
if [ "$command" != "$mnt_point" ]
then
echo "/mnt/1tb not mounted" > $tmpbackupfile
mailx -s $date me@myserver <$tmpbackupfile
rm $tmpbackupfile
umount /dev/backup
exit 0
else
echo "/mnt/1tb mounted" > $tmpbackupfile
fi

#als backupdisk niet gemount is stuur mail en exit
if [ "$command2" != "$mnt_point2" ]
then
echo "/mnt/backup not mounted" > $tmpbackupfile
mailx -s $date me@myserver <$tmpbackupfile
rm $tmpbackupfile
exit 0
else
echo "/mnt/backup mounted" >> $tmpbackupfile

#maak backup met rsync
echo >>$tmpbackupfile
rsync -av --delete /mnt/1tb/ /mnt/backup >>$tmpbackupfile
date3=$(date)
echo >>$tmpbackupfile
echo start $date2 >> $tmpbackupfile
echo stop $date3 >> $tmpbackupfile
mailx -s $date me@myserver <$tmpbackupfile
rm $tmpbackupfile
umount  /dev/backup
fi
exit 0

Ik moet er wel bij opmerken dat deze machine ook mijn mail verdeeld en dus al de mogelijkheid heeft om mail te versturen naar lokale users.

In /etc/crontab heb ik een regel toegevoegd die deze code elke nacht uitvoerd om 5:15 uur (dan ben ik toch meestal niet wakker).

15 5    * * *    root    /usr/sbin/backup

Nu krijg ik elke morgen een mailtje van me server met status report:

Als de master disk niet gemount is:

From:     root <root@myserver>
To:     me@myserver
Subject:     2011-01-21

/mnt/1tb not mounted

als de backup disk niet gemount is (voor de test de stekker er even uit getrokken).

From:     root <root@myserver>
To:     me@myserver
Subject:     2011-01-21

/mnt/backup not mounted

en als alles goed gaat:

From:     root <root@myserver>
To:     me@myserver
Subject:     2011-01-21

/mnt/1tb mounted
/mnt/backup mounted

sending incremental file list
./
deleting backuptestremove
backuptestadd

sent 1161691 bytes  received 2314 bytes  42327.45 bytes/sec
total size is 240664028749  speedup is 206755.15

start Fri Jan 21 16:07:54 CET 2011
stop Fri Jan 21 16:08:21 CET 2011

Ik hang al een tijd rond op dit forum en dacht laat ik me script ook maar eens posten.
Misschien heeft een ander er iets aan of heeft iemand nog opmerkingen, die hoor ik natuurlijk graag ??

2

Re: mijn eerste backup script

interessant, daar ga ik eens naar kijken.
ben zelf ook op zoek naar een goede backup-oplossing.
er is er nl geen een die doet wat ik wil, dus een script gebruiken is een mooie oplossing.
ga er binnenkort eens mee aan de slag.
thnx voor de info!

Debian Wheezy / Ubuntu 13.04 / win8 / Haiku OS Alpha 4 / Cyanogen(mod) 9.1 / Maemo 5

3

Re: mijn eerste backup script

Ik heb laatst nog een script gepost die ik gebruik

http://forum.nedlinux.nl/viewtopic.php? … 26#p352726

4

Re: mijn eerste backup script

ga ik ook eens naar kijken!
thnx!

Debian Wheezy / Ubuntu 13.04 / win8 / Haiku OS Alpha 4 / Cyanogen(mod) 9.1 / Maemo 5

Re: mijn eerste backup script

Ik maak gebruik van 2 backup-scripts, wat eigenlijk weer een layer over rdiff-backup is. Het eerste script kopieert alles van de daadwerkelijke disk naar de eerste backupdisk. Het tweede script synced alles van backupdisk1 naar backupdisk2. Ik heb die aanpak gekozen omdat ik op vrijdagochtend backupdisk2 loskoppel, naar m'n werk ga, en op de terugweg bij m'n offside-backup locatie stop. Daar verwissel ik de disk met de disk die daar staat en rijd ik naar huis. Het syncroniseren tussen backupdisk1 en wat dan backupdisk2 is geworden duurt enkele uren, dus dat start ik altijd zaterdagochtend pas (ja, dat doe ik altijd handmatig). Ik wil vrijdag echter wel gewoon backups maken (ik backup bepaalde directories elk uur wink ), daarom is het wat uitgebreid bij mij smile
script 1:

#!/bin/bash

# Handige optie om incrementeel te backuppen...
# local of remote (default via ssh).
# Ik vind het handiger dan rsync of rsnapshot.

# Home: http://www.nongnu.org/rdiff-backup
# Voor Debian: in de repository
# Voor Red Hat Enterprise Linux/CentOS: bij Dag Wieers
# Voor Gentoo: in Portage
# Orgineel script: http://www.mrleejohn.nl/downloads/rdiff.txt

DEST="/backup/snapshots"

# Set the string seperator to newlines only, not to space, tabs and newlines.
#  Needed to be able to backup directories with a space in them
IFS=,

if [ -z "$(mount | grep 'backup ')" ] ; then
        echo "The backup disk is not mounted on /backup, please fix this. Aborting backup now." 1>&2
else


        if [ -r /etc/rdiff-backup/rdiff-$1 ] ; then
                source /etc/rdiff-backup/rdiff-$1
        else
                echo "The file rdiff-$1 doesn't exist. Please fix your config" 1>&2
                exit 1
        fi

        cd /
        for dir in $DIRS ; do
                echo "Starting backup of $dir at $(date)"
                rdiff-backup --backup-mode --create-full-path --no-carbonfile --preserve-numerical-ids "$dir" "$DEST/$1/$dir"
                if [ $? = 0 ]; then
                        rdiff-backup --force --remove-older-than $TIME_SAVED "$DEST/$1/$dir"
                        if [ $? = 0 ]; then
                                echo "Done backing up $dir at $(date) succesfully"
                        else
                                echo 'Deleting of the old backups failed, please see above for the reason why.' 1>&2
                        fi
                else
                        echo 'Creating of the backup failed, please see above for the reason why' 1>&2
                fi
                echo ""
        done
fi

Zoals te zien is, opent hij nog een configfile uit /etc. Dat configfiletje ziet er zo uit:

#!/bin/bash

export DIRS='/home/mysql,/home/svn,/home/cybertinus/bash,/root/bash,/home/cybertinus/localhost,/home/cybertinus/mail'
export TIME_SAVED='2D'

Dit soort config bestanden kan je zoveel van wegzetten als je wilt, zolang ze maar /etc/rdiff-backup/rdiff-<hier_een_naam> heten. Met het eerste argument aan script1 geef je aan welk config bestand je wil gebruiken. En met een crontab regel bepaal je hoe vaak dit script draait.
Ik heb 3 config bestanden: /etc/rdiff-backup/rdiff-hourly, /etc/rdiff-backup/rdiff-daily en /etc/rdiff-backup/rdiff-weekly.

Script2 voor het syncen van backupdisk1 naar backupdisk2:

#!/bin/bash

if [ -z "$(mount | grep backup_sync)" ] ; then
        echo '/backup_sync is not mounted on an external device, canceling sync.' 1>&2
elif [ -f /tmp/backup_sync ] ; then
        echo "$0 is already running. Canceling running it twice at the same moment." 1>&2
else
        touch /tmp/backup_sync
        echo -n 'Starting sync at '
        date
        rsync --delete --archive --hard-links --executability --acls --xattrs /backup/ /backup_sync
        echo -n 'Done syncing at '
        date
        rm /tmp/backup_sync
fi

De scripts zijn nog niet heel erg goed configureerbaar. Op meerdere plekken staat nu keihard de mountpoints gedefinieerd. Dat is wel op te lossen hoor, maar nu geen tijd voor wink. Voor mij werkt dit nu. De gebruikte mountpoints zijn: /backup voor script1 en /backup_sync voor script2.
Of je daarop direct je disken mount of dat je er nog een encryptielaag (luks) tussen zet, en/of een dmraid en/of lvm mag je natuurlijk helemaal zelf weten smile. Ik heb er zelf alleen een encryptielaag tussen zitten.

Desktop: Intel i7 2600 @ 3,4 Ghz, 16 GB RAM,  11 TB (SSD+RAID6) voor Gentoo en Fedora, 1 TB voor Windows 7 Home Premium 64 bit English (zelfbouw)
Server: Intel Xeon E5506, 24 GB RAM, 2x 256 GB Samsung 840 Pro (LVM Mirrored LV) voor Proxmox (zelfbouw)

6 Laatst bewerkt door bigred (22 Jan 2011 01:27:54)

Re: mijn eerste backup script

Ja ik heb er ook nog over gedacht een 3de disk op me werk in mijn kast te leggen en die wekenlijks te wisselen met de backup disk die ik nu heb maar ja dan moet ik er nog een disk bij kopen.
Misschien wel een optie om dat alsnog een keer te doen, die backup moet dan wel encrypted zijn zodat niet iedereen op me werk de data kan lezen.
Niet dat ik mijn collega's niet vertrouw maar gewoon voor de zekerheid, stel voor dat die een keer in de auto blijft liggen als ik niet direct naar huis ga.

7

Re: mijn eerste backup script

Een directory is (aldus het boek Essential System Administration) in wezen gewoon een (binaire) lijst met bestanden.
Door een bestand te verwijderen haal je de verwijzing naar dat bestand uit deze lijst.
Daarom is schrijfbevoegdheid op de directory voldoende om bestanden te verwijderen.

8

Re: mijn eerste backup script

Dat is allemaal heel boeiend,  maar plaats geen reacties op discussies van jaren terug.
Dat geeft alleen maar verwarring

Help mee om KDE 5 in het Nederlands te vertalen!!