homeserver_wacken
Anmeldungsdatum: 1. März 2025
Beiträge: 19
|
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:
| 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
Anmeldungsdatum: 19. Januar 2021
Beiträge: 683
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: 19
|
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
Anmeldungsdatum: 19. Januar 2021
Beiträge: 683
Wohnort: Hamburg
|
Ja, ist doch ist doch logisch
|
homeserver_wacken
(Themenstarter)
Anmeldungsdatum: 1. März 2025
Beiträge: 19
|
Das kriege ich nicht zum laufen:
Ich erstelle mir auf der ext. HDD einen Pool mit:
| zpool create -O compression=lz4 Backup_Pool /dev/sdd
|
Und kopiere dann ein ausgewählten Snapshot mit:
| 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: 19
|
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
Anmeldungsdatum: 19. Januar 2021
Beiträge: 683
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: 19
|
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
Anmeldungsdatum: 19. Januar 2021
Beiträge: 683
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: 19
|
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.
| 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:
| zpool status -P -v Backup_Pool
cannot open 'Backup_Pool': no such pool
|
| zfs unmount Backup_Pool
cannot open 'Backup_Pool': pool I/O is currently suspended
|
|
micneu
Anmeldungsdatum: 19. Januar 2021
Beiträge: 683
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
Lernst du dann nichts Könntest du das nicht bezahlen
|