ubuntuusers.de

Backup eines ZFS

Status: Ungelöst | Ubuntu-Version: Server 24.04 (Noble Numbat)
Antworten |

homeserver_wacken

Anmeldungsdatum:
1. März 2025

Beiträge: 20

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.

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 684

Wohnort: Hamburg

XZ-komprimierten Dateien kannst du nicht mounten, es ist KEIN Dateisystem Meine Empfehlung: Schau dir mal zfs send/receive an

homeserver_wacken

(Themenstarter)

Anmeldungsdatum:
1. März 2025

Beiträge: 20

Den send Befehl verwende ich ja breits und sende das Dataset in eine Datei. Wenn ich receive verwende muss die Backup HDD als ZFS Formartiert sein oder?

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 684

Wohnort: Hamburg

Ja, ist doch ist doch logisch

homeserver_wacken

(Themenstarter)

Anmeldungsdatum:
1. März 2025

Beiträge: 20

Das kriege ich nicht zum laufen: Ich erstelle mir auf der ext. HDD einen Pool mit:

1
zpool create -O compression=lz4 Backup_Pool /dev/sdd

Und kopiere dann ein ausgewählten Snapshot mit:

1
zfs send Toshiba_1x_18TB_Pool/FS_nextcloud@FS_nextcloud_backup_20250320135814 | zfs receive Backup_Pool/FS_nextcloud

Das Dateisystem wird erstellt und es wird auch der erwartete Speicherplatz belegt. Ich kann aber nicht auf die Daten zugreifen.

homeserver_wacken

(Themenstarter)

Anmeldungsdatum:
1. März 2025

Beiträge: 20

So ich habe rausgefunden warum ich die Daten nicht finde. Es liegt an Openmediavault und den Shared Foldes.

So sieht das Original aus:

  • Name: Nextcloud

  • Device: Toshiba_1x_18TB_Pool/Nextcloud

  • Relative Path: Nextcloud/

  • Absolute Path: /Toshiba_1x_18TB_Pool/Nextcloud/Nextcloud

Und so das eingespielte Backup:

  • Name: Nextcloud_bak

  • Device: Backup_Pool/Nextcloud_bak

  • Relative Path: Nextcloud_bak/

  • Absolute Path: /Backup_Pool/Nextcloud_bak/Nextcloud_bak

Im Absoluten Pfad liegen aber keine Daten. Die Daten liegen im Pfad:

/Backup_Pool/Nextcloud_bak/Nextcloud

Wie kann ich das korrigieren, dass er das so macht, dass ich die Daten auch freigeben kann.

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 684

Wohnort: Hamburg

homeserver_wacken schrieb:

So ich habe rausgefunden warum ich die Daten nicht finde. Es liegt an Openmediavault und den Shared Foldes. ... Wie kann ich das korrigieren, dass er das so macht, dass ich die Daten auch freigeben kann.

fragst du im Ubuntu Forum wie du was in in Openmediavault? Die Frage musst du im Forum von Openmediavault stellen, nicht hier!

homeserver_wacken

(Themenstarter)

Anmeldungsdatum:
1. März 2025

Beiträge: 20

Ja vielleicht. Hier sind aber viele kluge Köpfe und wie die Freigaben von ZFS und NFS angelegt werden, kann ja auch mit der Konsole gemacht werden und ist daher unabhängig von der openmediavault-Web-GUI.

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 684

Wohnort: Hamburg

Wie man nfs Freigaben einrichtet kannst in unzähligen Beiträgen in diesem Forum finden, du musst nur die Forum Suche nutzen oder das ubuntu Wiki

homeserver_wacken

(Themenstarter)

Anmeldungsdatum:
1. März 2025

Beiträge: 20

Ich komme mit dem ZFS-Backup immer noch nicht zurecht. Wie muss ich das Skript anpassen, dass es für ein ZFS-Pool funktioniert. Ich habe folgende Probleme.

  • Der Pool wird nicht zuverlässig erkannt. Könnte an der Laufwerkszuordnung liegen. Die Bezeichnung ändert sich manchmal wenn ich die HDD abstecke und danach wieder einstecke. Z.B. sdd zu sde. Der Pool sieht so aus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
zpool status -P -v Backup_Pool 
  pool: Backup_Pool
 state: SUSPENDED
status: One or more devices are faulted in response to IO failures.
action: Make sure the affected devices are connected, then run 'zpool clear'.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-HC
config:

        NAME         STATE     READ WRITE CKSUM
        Backup_Pool  ONLINE       0     0     0
          /dev/sdd1  ONLINE       3     0     0

Alternativ bekomme ich auch folgende Error, obwohl die Laufwerksbuchstaben passen:

1
2
zpool status -P -v Backup_Pool 
cannot open 'Backup_Pool': no such pool
  • Wie muss ich den Pool unmounten, dass ich die HDD ohne Datenverlust abziehen kann. Ich habe es mit folgendem Versucht und auch das funktioniert nicht immer zuverlässig:

1
2
zfs unmount Backup_Pool
cannot open 'Backup_Pool': pool I/O is currently suspended

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 684

Wohnort: Hamburg

Das mit deinem USB-Gerät kannst du mit udev Regeln lösen (so haben wir es in der Firma für einen USB GSM Modul gemacht. Am besten googlest du mal, den ich werden nicht anfangen deinen code anzupassen

  1. Lernst du dann nichts

  2. Könntest du das nicht bezahlen

homeserver_wacken

(Themenstarter)

Anmeldungsdatum:
1. März 2025

Beiträge: 20

Deine Antworten sind überhaupt nicht Hilfreich. Einfach nur auf googlen zu verweisen bringt mir gar nichts. Ein bisschen mehr Infos benötige ich schon, und wenn du das zeitlich oder aus anderen Gründen nicht möchtest, Antworte bitte hier nicht weiter. Vielleicht hilft mir dann ja jemand anders besser weiter. Nimm die bitte mal ein Bsp. an frostschutz (https://forum.ubuntuusers.de/topic/fehlerhaftes-raid6-mit-mdadm-wiederherstellen/). Er hat auch nicht übermäßig viel Zeit in seine Antworten gesteckt, und hat mir dafür aber extrem weitergeholfen. Und gelernt habe ich dabei auch einiges.

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 684

Wohnort: Hamburg

ehrlich, sowas finde man auch wenn man Googlet https://wiki.ubuntuusers.de/udev/

Antworten |