====== 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. ===== Installation ===== ==== Backupserver ==== Benötigt wird das [[http://wiki.fem.tu-ilmenau.de/technik/dienste/gentoo-overlay|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 [[http://subversion.fem.tu-ilmenau.de/repository/fem-overlay/trunk/app-backup/bontmia/files|Patch]], welcher die Angabe eines SSH-Schlüssels (--identity) und einer Exclude-Datei (--exclude-from) für rsync erlaubt. ==== zu sichernder Server ==== * **//emerge net-misc/rsync//** * **//emerge app-admin/sudo//** ===== Konfiguration ===== ==== zu sichernder Server ==== === 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//** 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) # Allow rsync for backup-user backup ALL=(root)NOPASSWD:/usr/bin/rsync --server --sender -vlHogDtprRze.iLsf . / * ab rsync 3.1.1 (auf dem Backupserver) # Allow rsync for backup-user backup ALL=(root)NOPASSWD:/usr/bin/rsync --server --sender -vlHogDtprRze.iLsfx . / * ab rsync 3.1.2 (auf dem Backupserver) # 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. ==== Backupserver ==== 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**// 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. /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. + 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. 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