kleines Backupscript

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
gnude
Beiträge: 1567
Registriert: 14.09.2009 22:05:28
Kontaktdaten:

kleines Backupscript

Beitrag von gnude » 03.01.2018 08:32:51

Hallo
ich habe mir ein kleines "Backupscript" ausgedacht. Leider kann ich das
nicht im live Betrieb testen.... daher meine Frage: Würde das so laufen?

Mit geht es darum eine externe Festplatte einzuhängen.
Dann den Inhalt von 4 Verzeichnissen samt Unterverzeichnisse darauf zu
übertragen und diese anschliessend wieder aushängen.

Code: Alles auswählen

#!/bin/sh
echo "Bitte die externe Festplatte anschliessen"
pause
mount /dev/sdi1 /externhdd 
cp -r /backup/Netzwerklaufwerk/* /externhdd/Netzwerklaufwerk/
cp -r /backup/datenbank/* /externhdd/datenbank/
cp -r /backup/emailvz/* /externhdd/emailvz/
cp -r /backup2/mailserver/* /externhdd/mailserver/
umount /externhdd
clear
echo "Festplatte kann entfernt werden"
Danke für das Feedback.

Benutzeravatar
Tintom
Moderator
Beiträge: 3029
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: kleines Backupscript

Beitrag von Tintom » 03.01.2018 08:46:46

Hallo,
was möchtest du mit 'pause' bezwecken? Wenn du das Skript für eine Zeitspanne pausieren willst, dann nimm sleep (s. auch man sleep)

Benutzeravatar
gnude
Beiträge: 1567
Registriert: 14.09.2009 22:05:28
Kontaktdaten:

Re: kleines Backupscript

Beitrag von gnude » 03.01.2018 08:51:55

Mit pause wollte ich bezwecken das man eine Taste drücken muss (huch ich glaub da kommt nen bisschen Batch Wissen aus der DOS Zeit durch). :facepalm:

Somit hat man Gelegenheit die Festplatte anzuklemmen.

Benutzeravatar
heisenberg
Beiträge: 3473
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: kleines Backupscript

Beitrag von heisenberg » 03.01.2018 09:22:59

mount /dev/sdi1 /externhdd
Es kann sein, dass die Festplatte beim anschliessen eine andere Bezeichnung hat. Deswegen lieber so:

Code: Alles auswählen

mount /dev/disk/by-uuid/ef324a93-8a8b-40c4-b882-3f7e717efffe /externhdd
Die uuid findest Du heraus mit blkid.

Im übrigen "könnte" man das auch mit udev-Regeln lösen: Die Backup-Festplatte wird angeschlossen. Udev erkennt das und feuert das Backupscript ab.
... unterhält sich hier gelegentlich mangels wunschgemäßer Gesprächspartner mal mit sich selbst.

Benutzeravatar
gnude
Beiträge: 1567
Registriert: 14.09.2009 22:05:28
Kontaktdaten:

Re: kleines Backupscript

Beitrag von gnude » 03.01.2018 09:53:15

Danke.
mit den uuid hab ich mich nicht wirklich befasst, aber das habe ich jetzt geändert.
Sehr guter Hinweis ! :THX:

Benutzeravatar
novalix
Beiträge: 1908
Registriert: 05.10.2005 12:32:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: elberfeld

Re: kleines Backupscript

Beitrag von novalix » 03.01.2018 10:30:18

Was sind das denn für Daten unter /backup*/$wasauchimmer/?
Sieht ja nicht aus wie die kanonischen Orte für Originaldaten.

Mit "cp -r" legst Du keinen Spiegel der Ursprungsdaten an, sondern generierst einen neuen Datensatz. Die Inhalte bleiben zwar gleich, die Metadaten sind allerdings ganz andere. Das betrifft vor allen Dingen die Berechtigungen. Timestamps sind auch mitunter sehr wichtig.
Mit dem Schalter "-a" bzw. "--archive" bleiben die original Berechtigungen und Zeitstempel erhalten.

Falls die zu kopierenden Dateien nicht ausschließlich Archivdateien sind, können Dir Dateien verloren gehen (z.B. versteckte Dateien, die mit einem "." beginnen.

Es werden auf diese Weise immer alle Dateien kopiert, unabhängig davon, ob sie unverändert bereits existieren. Das kann je nach Datenmenge eine ganz gehörige Bremse werden.
Das Wem, Wieviel, Wann, Wozu und Wie zu bestimmen ist aber nicht jedermannns Sache und ist nicht leicht.
Darum ist das Richtige selten, lobenswert und schön.

Benutzeravatar
hikaru
Moderator
Beiträge: 13559
Registriert: 09.04.2008 12:48:59

Re: kleines Backupscript

Beitrag von hikaru » 03.01.2018 11:13:23

novalix hat geschrieben: ↑ zum Beitrag ↑
03.01.2018 10:30:18
Es werden auf diese Weise immer alle Dateien kopiert, unabhängig davon, ob sie unverändert bereits existieren. Das kann je nach Datenmenge eine ganz gehörige Bremse werden.
Daher würde ich vorschlagen, cp durch rsync zu ersetzen.

Benutzeravatar
heisenberg
Beiträge: 3473
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: kleines Backupscript

Beitrag von heisenberg » 03.01.2018 11:18:09

Ja, entweder rsync, oder cp -au (u wie update), dann geht's schneller. Bei lokal gemounteten Dateisystemen sollten die Methoden gleich effizient/schnell sein. Ist ein Netzwerk dazwischen, kann man mit rsync viel mehr Bandbreite(auf Kosten von lokaler I/O auf beiden Seiten) sparen.
... unterhält sich hier gelegentlich mangels wunschgemäßer Gesprächspartner mal mit sich selbst.

breakthewall
Beiträge: 507
Registriert: 30.12.2016 23:48:51

Re: kleines Backupscript

Beitrag von breakthewall » 03.01.2018 11:44:14

Auf den ersten Blick sehe ich ein paar Logikfehler, und fehlende Test-Konditionen. Letzteres ist insbesondere relevant, da ein Shellscript schon eine gewisse Intelligenz aufweisen sollte, damit nicht alles ungeprüft abgearbeitet wird.

Etwas in dieser Art zum Beispiel:

Code: Alles auswählen

#!/bin/bash

uuid="ef324a93-8a8b-40c4-b882-3f7e717efffe"

devicecheck() {
while true
        do                                                                                                                        
        blkid | grep -qE "$uuid" && break
        sleep 2
done                                                        
}

if devicecheck
    then
          echo "Festplatte erkannt..."                
          mount /dev/disk/by-uuid/"$uuid" /externhdd
          sleep 2
          if mount | grep -qE "$uuid" | grep -qE "externhdd"
              then
                    echo "Backup wird gestartet..."                                                        
                    cp -au /backup/Netzwerklaufwerk/* /externhdd/Netzwerklaufwerk/
                    cp -au /backup/datenbank/* /externhdd/datenbank/
                    cp -au /backup/emailvz/* /externhdd/emailvz/
                    cp -au /backup2/mailserver/* /externhdd/mailserver                                                                                                                        
                    if [ "$?" -eq "0" ]
                        then
                              echo "Backup war erfolgreich. Die Festplatte kann entfernt werden."
                              exit 0
                        else
                              echo "Backup wurde mit Fehlern beendet."
                              exit 1
                    fi
          fi
fi

uname
Beiträge: 12046
Registriert: 03.06.2008 09:33:02

Re: kleines Backupscript

Beitrag von uname » 03.01.2018 12:18:32

Wie beschrieben verwende rsync. Achte auf korrekte Parameter. Überlege, ob inkrementelle Backups mit --link-test zur Platzminimierung und Performanceoptimierung (Backup nicht Restore) relevant sind. Teste die Backups. Erfinde die Welt nicht neu. Die meisten Backupstripte werden besser und sicherer sein als deins.

Antworten