Systemlaufwerks-schonende Backups mithilfe rsync
Verfasst: Mi 14. Aug 2013, 17:26
Mit rsync werden in diesem Fall nur die Dateien kopiert, die sich verändert haben.
Wenn man einmal ein komplettes Image erstellt hat und dann nur noch mit rsync arbeitet, wird nicht jedesmal nochmal alles kopiert sondern wie bereits erwähnt nur das was sich seither verändert hat..
Das geht vorallem auch in den meisten Fällen wesendlich schneller als jedesmal ein komplettes Image zu erzeugen
1) Einmalig ein Image mit " dd " erstellen, in diesem Beispiel wird das " if " Laufwerk nach /mnt/usbstick/Backup_sda.img geschrieben:
2) Ein Verzeichnis für den 3.Schritt erstellen:
3) Das erstellte Image mounten (einbinden):
4) Das Programm "rsync" installieren:
5) Script /root/rsync_backup.sh erstellen zum regelmässigen backupen mit rsync:
6. Das Script ausführbar machen:
7. Zur Kontrolle das Script ausführen:
8. Das Script in die Crontab eintragen. In diesem Beispiel wird es ein mal jede Woche, Montag Morgen um 03:00 ausgeführt:
nano /etc/crontab
Wer an sein Gerät immer nur einen USB-Stick oder Festplatte anschliest kann ausserdem sein System so einstellen dass das Device immer automatisch beim einstecken, eingehängt (mounted) und beim abziehen auch wieder ausgehängt (unmounted) wird - letzteres ist ebenfalls wichtig da es sonst haufenweise Fehlermeldungen in den Systemlogs verursacht
Wenn man einmal ein komplettes Image erstellt hat und dann nur noch mit rsync arbeitet, wird nicht jedesmal nochmal alles kopiert sondern wie bereits erwähnt nur das was sich seither verändert hat..
Das geht vorallem auch in den meisten Fällen wesendlich schneller als jedesmal ein komplettes Image zu erzeugen
1) Einmalig ein Image mit " dd " erstellen, in diesem Beispiel wird das " if " Laufwerk nach /mnt/usbstick/Backup_sda.img geschrieben:
Code: Alles auswählen
dd if=/dev/sda of=/mnt/usbstick/Backup_sda.img
Code: Alles auswählen
mkdir -p /mnt/Backup
Code: Alles auswählen
mount -o loop /mnt/usbstick/Backup_sda.img /mnt/Backup
Code: Alles auswählen
apt-get install rsync
Code: Alles auswählen
#!/bin/bash
# Simple backup with rsync
## Create Log? [0=no , 1=yes]
LOG=1
## Log also verbose (--dry-run) rsync output? [0=no , 1=yes]
# NOTE: Logfile can get very big!
VERBOSE=0
## Wheres the Imagefile to get mounted?
IMAGE="/mnt/usbstick/BACKUP/rpi.img"
## MountPoint where Backuped-Image is mounted
MOUNTPOINT="/mnt/Backup"
## Exclude Dirs/Files (these dirs/files dont get backuped) (space seperated)
EXCLUDE="/mnt/usbstick"
# -------------------------------------------------------------- #
# >>> >> > DO NOT MESS WiTH ANYTHiNG BELOW THiS LiNE! < << <<< #
# -------------------------------------------------------------- #
for EX in $EXCLUDE ; do
[ -z "$EXCL" ] && EXCL="--exclude=$EX" || EXCL="$EXCL --exclude=$EX"
done
#- variables
LOGFILE=/var/log/$(basename $0).log
RSYNCopt="-aR --update --exclude=$MOUNTPOINT --exclude=$IMAGE --exclude=/proc --exclude=/sys $EXCL"
#- functions
# check and write log / also echo message to console
_LOG() {
[[ "$1" =~ "\r\n" ]] && echo -e "$1"
message="$1"
if [ $LOG = "1" ]; then
_DT=$(date +"%d.%m.%Y %H:%M:%S")
echo -e "[$_DT] $message" >> $LOGFILE
fi
}
#- main code
[ "$VERBOSE" = 1 ] && RSYNCopt="--dry-run $RSYNCopt"
MOUNTED=$(mount | grep "$MOUNTPOINT");
if [ -z "$MOUNTED" ]; then
_LOG "$MOUNTPOINT not mounted. Mounting $IMAGE to $MOUNTPOINT\r\n"
[ ! -d "$MOUNTPOINT" ] && mkdir -p $MOUNTPOINT
mount -o loop $IMAGE $MOUNTPOINT
fi
if [ "${MOUNTPOINT:${#MOUNTPOINT}-1:1}" != "/" ]; then
MOUNTPOINT=$MOUNTPOINT/
fi
_LOG "rsync $RSYNCopt / $MOUNTPOINT\r\n"
if [ "$VERBOSE" = 1 ]; then
rsync $RSYNCopt / $MOUNTPOINT >> $LOGFILE 2>&1
else
rsync $RSYNCopt / $MOUNTPOINT
fi
exit 0
Code: Alles auswählen
chmod +x /root/rsync_backup.sh
Code: Alles auswählen
/root/rsync_backup.sh
nano /etc/crontab
Code: Alles auswählen
0 3 * * 1 /root/rsync_backup.sh >/dev/null 2>&1
Wer an sein Gerät immer nur einen USB-Stick oder Festplatte anschliest kann ausserdem sein System so einstellen dass das Device immer automatisch beim einstecken, eingehängt (mounted) und beim abziehen auch wieder ausgehängt (unmounted) wird - letzteres ist ebenfalls wichtig da es sonst haufenweise Fehlermeldungen in den Systemlogs verursacht
Spoiler
Show
1) udev Regel anlegen:
Mit folgendem Inhalt:
Das ist eine sehr einfach gehaltene Regel, damit ein x-beliebiger USB-Stick immer nach /mnt/usbstick eingebunden wird..
2) udev neu starten:
3) mount-point (Verzeichnis wohin der Stick gemounted wird) anlegen:
4) USB-Stick mit einer FAT32 Partition formatieren, einstecken und mit dem Befehl
prüfen ob obiges funktioniert
Das funktioniert in der Form aber nur mit einem USB-Stick/HDD. Wer mehrere nutzten möchte, muss die udev-Regel anpassen bzw anhand genauerer Merkmale das Device unterschieden
Code: Alles auswählen
nano /etc/udev/rules.d/99-usbautomount.rules
Code: Alles auswählen
ACTION=="add", SUBSYSTEMS=="usb", KERNEL=="sd?1", RUN+="/bin/mount /dev/%k /mnt/usbstick"
ACTION=="remove", SUBSYSTEMS=="usb", KERNEL=="sd?1", RUN+="/bin/umount /dev/%k"
2) udev neu starten:
Code: Alles auswählen
/etc/init.d/udev restart
Code: Alles auswählen
mkdir -p /mnt/usbstick
Code: Alles auswählen
mount
Das funktioniert in der Form aber nur mit einem USB-Stick/HDD. Wer mehrere nutzten möchte, muss die udev-Regel anpassen bzw anhand genauerer Merkmale das Device unterschieden