Hi,
ich habe auf meinem Homeserver Ubuntu mit einem NFS am laufen. Der Speicher ist als ZFS formartiert. Ich möchte nun automatisch, wenn ich eine spezielle USB-HDD einstecke, dass ein Backup der Daten gemacht wird. Im speziellen für jedes Dataset ein eigenes Backup. Die Backups sollten inkrementell erstellt werden und komprimiert gespeichert sein. Ich möchte bei bedarf das Backup einfach als read only mounten können ohne dafür die Daten erst zu entpacken.
Mit folgendem Skript habe ich ein Backup erstellt, welches auch automatisch per udev gestartet wird:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #!/bin/bash LOG_FILE="/var/log/backup_script.log" # Pfad zur Log-Datei # Variablen #POOL="poolname/dataset" # Ersetze dies mit dem Namen deines ZFS-Pools und Datasets POOL="Toshiba_1x_18TB_Pool/FS_nextcloud" # Ersetze dies mit dem Namen deines ZFS-Pools und Datasets BACKUP_DIR="/mnt/USB_14TB_Backup_drive" # Ersetze dies mit dem Mount-Pfad deiner externen HDD SNAPSHOT_NAME="FS_nextcloud_backup_$(date +%Y%m%d%H%M%S)" # Erstelle einen Namen für den Snapshot mit Datum und Uhrzeit # Protokolliere den Start des Backups echo "$(date): Backup gestartet." >> $LOG_FILE # Erstelle einen Snapshot des ZFS-Pools zfs snapshot $POOL@$SNAPSHOT_NAME # Protokolliere echo "$(date): Snapshot erstellt." >> $LOG_FILE # Überprüfe, ob bereits ein letztes Backup existiert if [ -f "$BACKUP_DIR/last_backup" ]; then # Wenn ja, lese den Namen des letzten Snapshots LAST_SNAPSHOT=$(cat "$BACKUP_DIR/last_backup") # Protokolliere echo "$(date): Es gibt ein Backup." >> $LOG_FILE # Sende den inkrementellen Snapshot (nur die Änderungen seit dem letzten Snapshot) zfs send -i $LAST_SNAPSHOT $POOL@$SNAPSHOT_NAME | xz > "$BACKUP_DIR/backup-$SNAPSHOT_NAME.xz" else # Wenn kein letztes Backup existiert, sende den vollständigen Snapshot zfs send $POOL@$SNAPSHOT_NAME | xz > "$BACKUP_DIR/backup-$SNAPSHOT_NAME.xz" # Protokolliere echo "$(date): Neues Backup erstellt." >> $LOG_FILE fi # Aktualisiere die Datei mit dem Namen des letzten Snapshots echo $SNAPSHOT_NAME > "$BACKUP_DIR/last_backup" # Protokolliere den Abschluss des Backups echo "$(date): Backup abgeschlossen. Letzter Snapshot: $LAST_SNAPSHOT, Backup-Datei: backup-$SNAPSHOT_NAME.xz" >> $LOG_FILE # Unmount der externen HDD if mountpoint -q "$BACKUP_DIR"; then echo "$(date): Unmounting $BACKUP_DIR." >> $LOG_FILE umount "$BACKUP_DIR" if [ $? -eq 0 ]; then echo "$(date): $BACKUP_DIR erfolgreich unmounted." >> $LOG_FILE else echo "$(date): Fehler beim Unmounten von $BACKUP_DIR." >> $LOG_FILE fi else echo "$(date): $BACKUP_DIR ist nicht gemountet." >> $LOG_FILE fi |
Ich bekomme das Backup aber nicht gemountet:
1 2 3 | sudo mount -o loop,ro /mnt/USB_14TB_Backup_drive/backup-FS_nextcloud_backup_20250320151313.xz /export/Toshiba_1x_18TB_nextcloud/Backup/ mount: /export/Toshiba_1x_18TB_nextcloud/Backup: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error. dmesg(1) may have more information after failed mount system call. |
Was mache ich hier falsch, und kann ich das evtl. auch eleganter lösen?
Vielen Dank im Voraus.