Backupskript laufen lassen

Florian Lohoff f at zz.de
Thu Jan 31 07:41:20 CET 2019


On Wed, Jan 30, 2019 at 12:52:01AM +0100, Arnd Behring wrote:
> Hallo zusammen,
> 
> der Thread zu den Backups von neulich hat mich über folgendes Problem
> nachdenken lassen: Nehmen wir an, dass regelmäßig ein Backup (z.B. mit
> borg) von einem Laptop auf einen Server im LAN zuhause gemacht werden
> soll. Der Server ist von außen über das Internet nicht erreichbar bzw.
> es wäre vom Traffic her Unsinn das Backup über das Internet zu machen.
> Was wäre eine elegante Möglichkeit, z.B. einmal täglich ein solches
> Backup anzustoßen, vorausgesetzt der der Server ist im lokalen Netz
> erreichbar?
> 
> Die relevanten Rahmenbedingungen des Problems sind also:
> - Der Laptop ist nicht 24/7 an.
> - Der Laptop ist, wenn er an ist, nicht notwendigerweise im Heimnetz.
> - Der Server ist nur vom Heimnetz aus zu erreichen.
> - Das Backup sollte täglich laufen, aber nicht mehrmals täglich.
> - Wenn der Server nicht erreichbar ist, sollte es später nochmal
>   versucht werden.
> 
> Ich habe mir die Fähigkeiten verschiedener Cron-Daemons angeschaut und
> einiges (anacron, fcron) geht schon in die richtige Richtung, aber was
> ich zum Beispiel noch nicht gefunden habe (wenn ich nicht irgendwas
> offensichtliches übersehen habe), wäre eine Möglichkeit den Job bei
> Misserfolg später zu wiederholen.
> 
> Ob der Server erreichbar ist, könnte man sicher darüber testen, ob ein
> Login per SSH klappt und dann "hostname" den richtigen Hostnamen ausgibt.

Also - ich habe mir ein meinem homedir ein "whereami" script geschrieben 
das sich ansieht wo das Notebook Netztechnisch gerade so ist:


WIFIDEV=wlp3s0

wifiap=$(nmcli device show ${WIFIDEV} | sed -ne '/^GENERAL.CONNECTION/ { s/^.*: *//; p; }')
wifiip=$(nmcli device show ${WIFIDEV} | sed -ne '/^IP4.ADDRESS\[1\]:/ { s/^.*: *//; p; }')

ETHDEV=enp0s25
ethip=$(nmcli device show ${ETHDEV} | sed -ne '/^IP4.ADDRESS\[1\]:/ { s/^.*: *//; p; }')

defif=$(/bin/ip r get 8.8.8.8 | sed -ne '/dev / { s/.* dev //; s/ .*$//; p; }')
via=$(ip r get 8.8.8.8 | sed -ne '/ via / { s/.* via //; s/ .*$//; p; }')
defneigh=$(ip neigh show ${via} | sed -ne '/ lladdr / { s/.* lladdr //; s/ .*$//; p; }')

location="unknown"
bandwidth="low"
case "${wifiap}" in
        *buero*)
                location="buero"
                bandwidth="high"
                ;;
        *goodkarma*)
                location="whereever"
                bandwidth="low"
                ;;
        *home*)
                location="heideweg"
                bandwidth="low"
                ;;
        *)
                #echo "Unknown wifiap ${wifiap}"
                ;;
esac

if [ "${location}" = "unknown" ]; then
        case "${defneigh}" in
                "00:12:5f:00:01:0f")
                        location="buero"
                        bandwidth="high"
                        ;;
        esac
fi

case "${defif}" in
        en*|eth)
                physconnection=ethernet
                ;;
        wl*)
                physconnection=wifi
                ;;
        *)
                physconnection=unknown
                ;;
esac

echo location=$location
echo bandwidth=$bandwidth
echo physconnection=$physconnection
echo defaultif=$defif
echo defaultvia=$via
echo defaultviamac=$defneigh

exit 0



Dann rufe ich via cron alle 2 Stunden ein script auf ~/bin/backup-conditional


eval $(~/bin/whereami)

case "${bandwidth}" in
        medium|high)
                sudo -n /usr/local/sbin/borg-backup-pax
		exit
                ;;
esac

case "${location}" in
        buero)
                sudo -n /usr/local/sbin/borg-backup-pax
                ;;
        heideweg)
                sudo -n /usr/local/sbin/borg-backup
                ;;
esac


Das was dir jetzt noch fehlt ist ein touch auf eine datei und nachsehen 
ob die älter als 24h ist bevor das backup-conditional das backup wirklich anstößt.

Ich mache wirklich alle 2 Stunden ein Backup.


Das ist z.b. ein Backup von gestern kurz bevor ich nach hause gegangen bin (borg-backup)

Jan 29 17:29:03 p4 borg-pax: ------------------------------------------------------------------------------
Jan 29 17:29:03 p4 borg-pax: Archive name: sys-201901291715
Jan 29 17:29:03 p4 borg-pax: Archive fingerprint: e69e1d8de9c01b40f64277d307eee4864334110219e682b38b4c6d055696a651
Jan 29 17:29:03 p4 borg-pax: Time (start): Tue, 2019-01-29 17:15:57
Jan 29 17:29:03 p4 borg-pax: Time (end):   Tue, 2019-01-29 17:28:53
Jan 29 17:29:03 p4 borg-pax: Duration: 12 minutes 56.43 seconds
Jan 29 17:29:03 p4 borg-pax: Number of files: 1549962
Jan 29 17:29:03 p4 borg-pax: ------------------------------------------------------------------------------
Jan 29 17:29:03 p4 borg-pax:                        Original size      Compressed size    Deduplicated size
Jan 29 17:29:03 p4 borg-pax: This archive:              144.15 GB             79.27 GB            120.96 MB
Jan 29 17:29:03 p4 borg-pax: All archives:                2.74 TB              1.59 TB            217.43 GB
Jan 29 17:29:03 p4 borg-pax: 
Jan 29 17:29:03 p4 borg-pax:                        Unique chunks         Total chunks
Jan 29 17:29:03 p4 borg-pax: Chunk index:                 1574794             24556478
Jan 29 17:29:03 p4 borg-pax: ------------------------------------------------------------------------------


Von den 144GByte auf der Platte mussten 120MByte wirklich gesichert werden nach
der deduplizierung.  Das dingen läuft so unbemerkt im Hintergrund - soll der
doch alle 2 Stunden sichern. Die deduplizierung und das expire auf dem Server
führt dann dazu das da nicht viel von über bleibt.

Flo
-- 
Florian Lohoff                                                 f at zz.de
        UTF-8 Test: The 🐈 ran after a 🐁, but the 🐁 ran away
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lug-owl.de/pipermail/linux/attachments/20190131/f02b0284/attachment.sig>


More information about the Linux mailing list