Esprit & Schmackes

Fuse ftw

Automatische Backupsicherung per ssh und sshfs so um die 456 Wörter

Als Update zu PostgreSQL-Dump als Cronjob möchte ich über die wöchentlich erstellten Backups auf meinen Server nicht mehr per E-Mail benachrichtigt werden (um sie dann manuell abzuholen), sondern das Abholen gleich ganz automatisieren. Das mache ich mit dem neu entdeckten Programm sshfs.

 

Auf dem Server erstelle ich dafür einen neuen Benutzer.

# adduser --home /home/backupuser backupuser

Auf dem PC muss der SSH-Key erstellt und zum Server übertragen werden.
Das mache ich gleich unter dem lokalen Benutzer root, da ich die Rechte später eh für das Einbinden des SSH-Verzeichnisses brauche.

# ssh-keygen -t rsa

Für den Key wird natürlich keine Passphrase eingestellt, damit später automatisch verbunden werden kann.

# ssh-copy-id -i ~/.ssh/backup@server/id_rsa backupuser@xx.xx.xx.xx

Damit ich nachher etwas komfortabler auf den SSH-Zugang zugreifen kann, tätige ich einen entsprechenden Eintrag in der ~/.ssh/config

Host backup
        HostName xx.xx.xx.xx
        Port 22
        User backupuser
        IdentityFile ~/.ssh/backup@server/id_rsa

Damit kann ich mich ganz bequem per ssh backup einloggen, und der Befehl für sshfs wird auch deutlich kürzer.

Jetzt noch sshfs installieren

# pacman -S sshfs

und das Mountverzeichnis erstellen.

# mkdir /mnt/backup

 

Um jetzt das Verzeichnis lokal einzubinden, müsst ich das folgendermaßen aufrufen

# sshfs -o IdentityFile=~/.ssh/backup@server/id_rsa backupuser@xx.xx.xx.x:/home/backupuser/backup /mnt/backup -C

Da ich vorhin den alias backup gesetzt hab, kann ich mir den ganzen Schrutz sparen und einfach

# sshfs backup:/home/backupuser/backup /mnt/backup -C

schreiben. -C steht dabei für die Option -o compression=yes.


Jetzt muss noch der Cronjob auf dem lokalen PC erstellt werden. Unter Manjaro hab ich da cronie im Einsatz, das aus einem Cron automatisch ein Anacron macht, wenn der Rechner zu dem Zeitpunkt nicht lief.
Da die Backups auf dem Server mit @weekly jeden Montag um 0 Uhr erstellt werden, möchte ich auf dem PC jeden Montag ab 0:10 Uhr das Backup abholen.

# vi /root/storebackup.sh

#!/usr/bin/env bash
 
mountdir=/mnt/backup
storedir=/var/backup/server
 
sshfs backup:/home/backupuser/backup ${mountdir} -C
 
mountpoint ${mountdir} > /dev/null
 
if [ $? -eq 0 ]; then
        mv -ufv ${mountdir}/* ${storedir}/
else
        echo "backup-dir is not mounted!"
        exit 1
fi
 
fusermount -u ${mountdir}

${mountdir} ist das per SSH eingebundene Backup-Verzeichnis, ${storedir} das Verzeichnis auf meiner Platte, wo die Backups abgelegt werden sollen. Mit dem Befehl mountpoint kann man prüfen, ob ein Verzeichnis eingebunden ist. Falls das der Fall ist, werden alle Dateien aus dem eingebundenen Verzeichnis auf mein ${storedir} geschaufelt, wobei nur neue Dateien überschrieben werden.

Das Script wie immer ausführbar machen und in der Crontab die Zeile 

10 0 * * mon /root/storebackup.sh


eintragen.

 

War's.

[ unter ]

Kommentare

was zu melden?