public:technik:howto:bontmia

Pull-Backup mit Bontmia

Mit bontmia lassen sich tägliche Snapshots von Dateien auf einem entfernten Server erstellen. Bontmia läuft hierbei auf dem Backupserver, so dass auf dem zu sichernden Server keinerlei Login-Daten vom Backupserver liegen. Um auf dem Backupserver Platz zu sparen werden nicht geänderte Dateien als Hardlinks abgelegt.

Benötigt wird das FeM-Gentoo-Overlay!

  • emerge app-backup/bontmia
  • emerge net-misc/rsync

Versionen:

  • 0.14 - Original-Version des Authors
  • 0.14-r1 - mit integriertem Patch , welcher die Angabe eines SSH-Schlüssels (--identity) und einer Exclude-Datei (--exclude-from) für rsync erlaubt

Alternativ ist das Skript auch unter http://folk.uio.no/johnen/bontmia verfügbar werden. Im FeM-Gentoo-Overlay liegt ein passender Patch, welcher die Angabe eines SSH-Schlüssels (--identity) und einer Exclude-Datei (--exclude-from) für rsync erlaubt.

  • emerge net-misc/rsync
  • emerge app-admin/sudo

Benutzer und SSH-Key anlegen

Der Schlüssel muss ohne Passwort (Passphrase) erstellt werden, sonst macht das automatische Backup wenig Spaß.

  • useradd -m backup
  • ssh-keygen -f /home/backup/.ssh/id_rsa

Ausgabe

Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/backup/.ssh/id_rsa.
Your public key has been saved in /home/backup/.ssh/id_rsa.pub.
The key fingerprint is:
3e:65:ec:fd:ba:92:15:94:18:da:74:26:d4:fc:b9:f0 root@server1
The key's randomart image is:
+--[ RSA 2048]----+
|         .==o.   |
|         +.+=    |
|        . .. . . |
|         .  o o  |
|        S +  + . |
|       . + .. E  |
|        o .o.    |
|         .o  .   |
|           .oo.  |
+-----------------+

  • echo "command=\"sudo /usr/bin/rsync --server --sender -vlHogDtprRze.iLsf . /\",no-pty,no-port-forwarding,no-X11-forwarding $(cat /home/backup/.ssh/id_rsa.pub)" >> /home/backup/.ssh/authorized_keys
    • Wenn der Zugriff von einem Backup-Server mit fester IP-Adresse erfolgt, dann kann der Zugriff zusätzlich mit from=„10.0.0.1“ (Beispiel) als Option für den SSH-Schlüssel abgesichter werden
  • chown backup:backup /home/backup/.ssh/*

Der Private Schlüssel für den Backup-Nutzer (/home/backup/.ssh/id_rsa) muss nun sicher (z.B. per SCP) auf den Backup-Server übertragen werden. Anschließend kann er auf dem zu sichernden Server gelöscht werden.

  • rm /home/backup/.ssh/id_rsa

Sudo einrichten

Damit rsync auf alle Dateien zugreifen kann, muss es mit root-Rechten ausgeführt werden. Dies geschieht via sudo.

  • bis rsync 3.1.1 (auf dem Backupserver)

/etc/sudoers

# Allow rsync for backup-user
backup  ALL=(root)NOPASSWD:/usr/bin/rsync --server --sender -vlHogDtprRze.iLsf . /

  • ab rsync 3.1.1 (auf dem Backupserver)

/etc/sudoers

# Allow rsync for backup-user
backup  ALL=(root)NOPASSWD:/usr/bin/rsync --server --sender -vlHogDtprRze.iLsfx . /

  • ab rsync 3.1.2 (auf dem Backupserver)

/etc/sudoers

# Allow rsync for backup-user
backup  ALL=(root)NOPASSWD:/usr/bin/rsync --server --sender -vlHogDtprRze.iLsfxC . /

Hinweis: Der zu sichernde Pfad ist hier /, kann aber bei Bedarf auch eingeschränkt werden.

Annahmen:

  • Server: server1.example.org (Port 1022)
  • Backup-Verzeichnis: /mnt/backup/server1.example.org/backup/
  • SSH-Key: /mnt/backup/server1.example.org/identity
  • exclude-Datei: /mnt/backup/server1.example.org/exclude

SSH-Hostkey speichern

Zu allererst muss man sich einmal per SSH mit dem zu sichernden Server als der Benutzer auf dem Backupserver verbinden unter dem dann das Backup läuft.

  • ssh backup@server1.example.org -i /mnt/backup/server1.example.org/identity
    • Are you sure you want to continue connecting (yes/no)? yes

Ausgabe

The authenticity of host 'server1.example.org (10.200.2.211)' can't be established.
RSA key fingerprint is c9:08:84:ea:1c:2c:84:5a:0f:cd:6e:1f:a1:bf:fe:4a.
Are you sure you want to continue connecting (yes/no)?

Nun sollte man als Nutzer Backup auf dem genannten Server eingeloggt sein.

Sicherungsinhalt festlegen

Ausschließliche Exclude-Liste

Mit dieser Variante werden die genannten Verzeichnisse und/oder Dateien (Wildcards erlaubt) vom Backup ausgeschlossen. Alles andere wird gesichert.

In diesem Beispiel werden alle Verzeichnisse außer /dev, /mnt, /proc, /sys und /usr/portage und alle Dateien außer /opt/xen/*/*.fs gesichert.

/mnt/backup/server1.example.org/exclude

/dev
/mnt
/opt/xen/*/*.fs
/proc
/sys
/usr/portage

Kombinierte Include-/Exclude-Liste

Mit dieser Variante legt man explizit die zu sichernden Verzeichnisse und/oder Dateien (Wildcards erlaubt) fest, die vom Backup eingeschlossen werden. Alles andere wird nicht gesichert.

In diesem Beispiel werden die Verzeichnisse /etc, /home, /root (ohne root/.cache), /usr/local, /var/lib/mysql, /var/lib/portage, /var/log und /var/www gesichert.

/mnt/backup/server1.example.org/exclude

+ etc
+ etc/**
+ home
+ home/**
- root/.cache
- root/.cache/**
+ root
+ root/**
+ usr
+ usr/local
+ usr/local/**
+ var
+ var/lib
+ var/lib/mysql
+ var/lib/mysql/**
+ var/lib/portage
+ var/lib/portage/**
+ var/log
+ var/log/**
+ var/www
+ var/www/**
- *

Backup

Auf dem Backupserver kann nun mit

  • bontmia --dest /mnt/backup/server1.example.org/backup --rotation 0minutes0hours7days4weeks3month0years --port 1022 --identity /mnt/backup/server1.example.org/identity --exclude-from /mnt/backup/server1.example.org/exclude backup@server1.example.org:

das Backup anstoßen.

Ausgabe

bdirmatch: ^(./server1.example.org:/)
No previous backup detected, will start with an empty replication

Backing up
  server1.example.org:

Deletes files that should not be in the latest snapshot

Moving the complete backup into the backup archive
  (/mnt/backup/server1.example.org/backup/unfinished_backup -> /mnt/backup/server1.example.org/backup/)

Calculates which backups to save
(0 minutes, 0 hours, 7 days, 4 weeks, 3 months, 0 years)
  Saving /mnt/backup/server1.example.org/backup/2012/03/31/12:50 by filters:  days weeks month

Anschließend kann man dies auch per Cronjob erledigen lassen. Der Parameter „–rotation“ gibt an, welche Backups vorgehalten werden - im Beispiel sind das

  • monatliches Backup für 3 Monate
  • wöchentliches Backup für 4 Wochen
  • tägliches Backup für 7 Tage
  • public/technik/howto/bontmia.txt
  • Zuletzt geändert: 2016/01/05 09:47
  • von mape2k