Hyper Backup HBK Datei auf externe USB sichern

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Matchbox

Benutzer
Registriert
08. März 2016
Beiträge
121
Reaktionspunkte
30
Punkte
28
Hallo zusammen,

ich hab versucht mich "schlau" zu lesen, vertshe es jedoch nicht und hoffe jemand/ihr kann/koennt mir helfen.

Ich sichere von System A auf System B jede Nach per Hyper Backup, soweit so gut.

Zur weiteren Sicherheit moechte ich einmal im Monat eine externe USB Festplatte an System B haengen und die Daten (HBK) von auf die USB Festplatte sichern.

Ich hab nur "Ordner und Pakete" zur Auswahl und waehle dann den entsprechenden Ordner aus.

Nun meine Frage: Kann ich die Versionierung weg lassen und die darauffolgende Frage wuerde er dann trotzdem inkrementell sichern? Oder wuerde er dann jedes mal 10 TB sichern (was so 3 Tage dauert)?

Da hab ich irgendwie einen Denknoten.

VG
Olio
 
Ich habe mir ein Skript für den Aufgabenplaner gebaut, dass die Dateien der Sicherung (inkrementell) auf eine USB Platte kopiert. Das Skript benutze ich mit Active Backup (welches meine PCs sichert). Vielleicht ist es ein Ansatz für dich.


Code:
#!/bin/bash
# -------------------------------------------------------------------
# Backup-Skript: HyperBackup (.hbk-Ordner) auf zwei USB-Platten verteilen
# -------------------------------------------------------------------

# Quelle: HyperBackup-Verzeichnis
SOURCE="/volume1/sicherung"
# Logverzeichnis
LOGDIR="/volume1/log"
# Ziele: zwei USB-Platten
TARGETDIR1="/volumeUSB1/usbshare"
TARGETDIR2="/volumeUSB2/usbshare"
# Log-Retention in Tagen
LOG_RETENTION_DAYS=90
# Trenner für die Ordnersicherung
LOG_TRENNER_START="= Start Ordner ================================================="
LOG_TRENNER="= Ende Ordner =================================================="

# -------------------------------------------------------------------
# Listen der zu sichernden Ordner (je USB-Platte)
# -------------------------------------------------------------------
USB1_LIST=(
    "home.hbk"
    "photo.hbk"
    "projekte.hbk"
    "docker.hbk"
    "music.hbk"
    "video.hbk"
)

USB2_LIST=(
    "home.hbk"
    "photo.hbk"
    "projekte.hbk"
    "docker.hbk"
)

# -------------------------------------------------------------------
# Hilfsfunktionen
# -------------------------------------------------------------------
log_msg() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOGFILE"
}

usage() {
    echo "Usage: $0 usb1|usb2"
    exit 1
}

# -------------------------------------------------------------------
# Parameter prüfen
# -------------------------------------------------------------------
if [ $# -ne 1 ]; then
    usage
fi

TARGET=$1
case "$TARGET" in
    usb1)
        DEST_BASE="$TARGETDIR1"
        SRC_BASE="$SOURCE"
        FOLDERS=("${USB1_LIST[@]}")
        LOGNAME="backup_usb1"
        ;;
    usb2)
        DEST_BASE="$TARGETDIR2"
        SRC_BASE="$SOURCE"
        FOLDERS=("${USB2_LIST[@]}")
        LOGNAME="backup_usb2"
        ;;
    *)
        usage
        ;;
esac

# Logdatei für dieses Ziel
# LOGFILE="$LOGDIR/${LOGNAME}_$(date '+%Y').log"
LOGFILE="$LOGDIR/${LOGNAME}_$(date '+%Y-%m-%d').log"

# -------------------------------------------------------------------
# Sicherung starten
# -------------------------------------------------------------------
log_msg "================================================================"
log_msg "Starte Sicherung auf $TARGET ($DEST_BASE) ==============="

for folder in "${FOLDERS[@]}"; do
    SRC_DIR="$SRC_BASE/$folder"
    DEST_DIR="$DEST_BASE/$folder"

    if [ ! -d "$SRC_DIR" ]; then
        log_msg "✗ FEHLER: Quellordner existiert nicht: $SRC_DIR"
        log_msg "$LOG_TRENNER"
        continue
    fi

    log_msg "$LOG_TRENNER_START"
    if [ ! -d "$DEST_DIR" ]; then
        mkdir -p "$DEST_DIR"
        log_msg "# Verzeichnis $DEST_DIR erstellt"
    fi

    # Größe vor der Sicherung ermitteln (in MB)
    OLD_SIZE=$(du -sm "$DEST_DIR" 2>/dev/null | awk '{print $1}')
    OLD_SIZE=${OLD_SIZE:-0}
    
    log_msg "→ Sicherung Ordner: $SRC_DIR ..."
    START_TIME=$(date +%s)

    rsync -a --delete --chmod=700 "$SRC_DIR/" "$DEST_DIR/" >>"$LOGFILE" 2>&1
    STATUS=$?

    END_TIME=$(date +%s)
    DURATION=$((END_TIME - START_TIME))
    # Umrechnung in hh:mm:ss
    HOURS=$((DURATION / 3600))
    MINUTES=$(((DURATION % 3600) / 60))
    SECONDS=$((DURATION % 60))
    # Ausgabe in 00:00:00-Format
    TIME_STR=$(printf "%02d:%02d:%02d" $HOURS $MINUTES $SECONDS)

    if [ $STATUS -eq 0 ]; then
        # Größe nach der Sicherung nur bei Erfolg ermitteln
        NEW_SIZE=$(du -sm "$DEST_DIR" 2>/dev/null | awk '{print $1}')
        NEW_SIZE=${NEW_SIZE:-0}

        DIFF_SIZE=$((NEW_SIZE - OLD_SIZE))

        log_msg "✔ Ordner $SRC_DIR erfolgreich gesichert."
        log_msg "⏱ Laufzeit: ${TIME_STR}"
        log_msg "★ Größe alt ${OLD_SIZE} MB, neu: ${NEW_SIZE} MB, Differenz: ${DIFF_SIZE} MB"
    else
        log_msg "✗ FEHLER beim Sichern von $SRC_DIR."
        log_msg "⏱ Laufzeit bis zum Fehler: ${TIME_STR}"
    fi
    log_msg "$LOG_TRENNER"

done

# -------------------------------------------------------------------
# Restplatz auf der USB-Platte ermitteln
# -------------------------------------------------------------------
# FREE_SPACE=$(df -h "$DEST_BASE" | awk 'NR==2 {print $4}')
# log_msg "■ Freier Speicherplatz auf der USB-Platte: ${FREE_SPACE}"
FREE_SPACE=$(df -BG "$DEST_BASE" | awk 'NR==2 {print $4}' | tr -dc '0-9')
log_msg "■ Freier Speicherplatz auf der USB-Platte: ${FREE_SPACE} GB"

# -------------------------------------------------------------------
# Restplatz auf der USB-Platte ermitteln wenn weniger als 5% Error
# -------------------------------------------------------------------
FREE_PERC=$(df "$DEST_BASE" | awk 'NR==2 {print $5}' | tr -d '%')

# Wenn Restplatz < 5%, Skript mit Fehlercode beenden
if [ "$FREE_PERC" -lt 5 ]; then
    # Extrahiere den ersten Teil nach /volume, in Großbuchstaben
    DISK_NAME=$(echo "$DEST_BASE" | awk -F'/' '{print $2}' | tr '[:lower:]' '[:upper:]')
    log_msg "⚠ WARNUNG: Weniger als 5% (${FREE_SPACE} GB) freier Speicherplatz auf $DISK_NAME!"
    exit 1
fi

# -------------------------------------------------------------------
# Sicherung beendet
# -------------------------------------------------------------------
log_msg "Sicherung $TARGET abgeschlossen ==================================="
log_msg "================================================================"

# -------------------------------------------------------------------
# Alte Logs bereinigen
# -------------------------------------------------------------------
find "$LOGDIR" -type f -name "backup_${TARGET}_*.log" -mtime +$LOG_RETENTION_DAYS -exec rm -f {} \; 2>/dev/null

Das ganze ist mit rsync gelöst ...

VG
 
Nun meine Frage: Kann ich die Versionierung weg lassen und die darauffolgende Frage wuerde er dann trotzdem inkrementell sichern?
Ja, auch bei "eine Version" wird inkrementell gesichert. Bedenke dabei aber, dass überschrieben/gelöschte Daten dann auch überschrieben/gelöscht werden und nicht aus einer Vorversion wiederherstellbar ist

Als backup vom backup ist eine Einzelversion an sich ausreichend. Wobei ich dennoch gerne eine geringe Versionierung nutze (2 Versionen) denn das gibt dir notfalls die Möglichkeit 2 Monate zurück zu gehen wenn du monatlich sicherst


Edit: kommt natürlich drauf an ob dein backupmedium (deine USB HDD) genügend Platz für 1-3 Versionen hergibt

Edit2: achso: solltest du lediglich das 10TB hbk file sichern, welches sich dauernd ändert, dann wird natürlich jedes Mal das vollständige hbk file gesichert. Das dauert dann eben doch die volle Zeitspanne für 10TB jedes Mal.
Und dann ist eine Versionierung auch kaum machbar.
 
Zuletzt bearbeitet:
Edit2: achso: solltest du lediglich das 10TB hbk file sichern, welches sich dauernd ändert, dann wird natürlich jedes Mal das vollständige hbk file gesichert. Das dauert dann eben doch die volle Zeitspanne für 10TB jedes Mal.
Das ist falsch. Das ist gar keine Datei sondern ein Verzeichnis. Da müssen nicht jedesmal 10 TB gesichert werden, sondern nur das, was sich geändert hat.
 
  • Like
Reaktionen: RalfPeter
... und nur deshalb funktioniert mein Skript auch mit rsync und nur die geänderten Dateien des hbk Ordners werden kopiert. Die Sicherung ist dann so groß wie das Original und enthält natürlich auch alle Versionen...
 
Zuletzt bearbeitet von einem Moderator:
@synfor Merkwürdig. War dann war das bei älteren DSM anders? Ich erinnere mich, genau aus diesem Grund die Backups spezieller Ordner in extra Jobs gemacht zu haben damit eben Dinge wie Filme nicht dauernd mit synchronisiert werden müssen.

Denn ich erinnere mich, an diesem problem selbst gehangen zu haben, weil jedes Mal vollständig synchronisiert wurde.

Aaaber es wäre möglich dass es noch vor der HyperBackup zeit war (DSM 4/5 mit meiner alten DS212j)
 

Additional post fields

 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat