Rear (Relax and Recover) - sämtliche Datenpfade auslagern

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Benutzeravatar
speefak
Beiträge: 449
Registriert: 27.04.2008 13:54:20

Rear (Relax and Recover) - sämtliche Datenpfade auslagern

Beitrag von speefak » 15.12.2021 01:14:43

Also Rear ist echt komisch was die Pfade angeht.

ReaR Info Guide : https://speefak.spdns.de/oss_lifestyle/ ... ssystemen/
Script : viewtopic.php?p=1289795#p1289795

Die ISO Bootfiles werden in /tmp/rear.xxxxx angelegt, darin wird dann das Systembackup als tar Archiv gespeichert und am Ende wird aus dem /tmp/rear.xxx die ISO in /var/lib/rear/output erstellt.
Soweit so gut. Wenn das System nun aber keinen freien Speicherplatz mehr hat gibt es verschiedene Optionen die man per config mit geben kann:

1 ISO output Pfad ändern und über versch. Module wie z.B sshfs auslagern
2 Tar Archuiv des Systembackups auslagern

Die erstelle ISO wird dann nicht mehr im System erstellt. Das Tar Archiv des Systembackups wird zwar auf dem sshfs remote Host erstellt aber ebenfalls in /tmp/rear.xxxx. Ist das Tar Archiv nun größer als die /tmp Partition gibt es ein Problem.

Das TMPDIR der rear config kann zwar auch geändert werden aber eben nicht auf Remote Pfade. Temporäres Einhängen einer sshfs Freigabe in über /tmp für zu folgendem Fehler:

Code: Alles auswählen

Relax-and-Recover 2.6 / Git
Running rear mkbackup (PID 211037)
Using log file: /var/log/rear/rear-debian.log
Running workflow mkbackup on the normal/original system
speefak@speenux's password: 
Using backup archive '/tmp/rear.aiIKreAvxv3Bfx5/outputfs/debian/backup.tar.gz'
Using autodetected kernel '/boot/vmlinuz-5.10.0-9-amd64' as kernel in the recovery system
Creating disk layout
Overwriting existing disk layout file /var/lib/rear/layout/disklayout.conf
Using guessed bootloader 'GRUB' (found in first bytes on /dev/sda)
Verifying that the entries in /var/lib/rear/layout/disklayout.conf are correct ...
Creating recovery system root filesystem skeleton layout
ERROR: Failed to copy '/usr/share/rear/skel/default' contents to /tmp/rear.aiIKreAvxv3Bfx5/rootfs
Some latest log messages since the last called script 010_merge_skeletons.sh:
  tar: ./usr/lib/systemd/system/multi-user.target.wants: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: ./usr/lib/systemd/system/getty.target.wants: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: ./usr/lib/systemd/system: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: ./usr/lib/systemd: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: ./usr/lib: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: ./usr: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: .: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: Exiting with failure status due to previous errors
Aborting due to an error, check /var/log/rear/rear-debian.log for details
Exiting rear mkbackup (PID 211037) and its descendant processes ...
Running exit tasks
Beendet
Gibt es eine Möglichkeit sämtliche Dateioperationen auf Remote Pfade zu mappen , sodass nichts auf dem eigentlichen zu sichernden System erstellt wird ?

Auch muss man für jede sshfs Angabe in der rear config jeweils das ssh Passwort eingeben. Da macht es doch mehr Sinn die Standartpfade für ReaR beizubehalten und ein sshfs RemoteFS direkt in /var/lib/rear/ einzuhängen. Damit muss man nur einmal beim sshfs Mount das Passwort eingeben.
Zuletzt geändert von speefak am 19.12.2021 15:25:34, insgesamt 1-mal geändert.

Benutzeravatar
speefak
Beiträge: 449
Registriert: 27.04.2008 13:54:20

Re: Rear (Relax and Recover) - sämtliche Datenpfade auslagern

Beitrag von speefak » 15.12.2021 03:41:14

Ich finde immer irgendwelche nicht dokumentierten Befehle wie z.B. https://docs.openstack.org/project-depl ... _rear.html oder https://github.com/rear/rear/issues/2530 . ISO_DIR z.B. findet sich nirgendwo im Manual ( man rear | grep ISO_DIR )

Die Konfiguration den ReaR treibt mich grad echt in den Wahnsinn. Zig nicht dokumentierte Parameter, outputs wo keine sein sollten und alles doppelt und dreifach im Quellsystem herumkopiert. So schön wie das scriptbasierte Erstellen auch sein mag - ReaR ist ein Doku und Konfig-Horror sondergleichen und so langsam verliere ich echt die Geduld. Wird als einfach und simple angepriesen und alles was einem bleibt ist Try and Error. :evil: :evil: :evil:

Benutzeravatar
Blackbox
Beiträge: 4289
Registriert: 17.09.2008 17:01:20
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Rear (Relax and Recover) - sämtliche Datenpfade auslagern

Beitrag von Blackbox » 15.12.2021 11:31:23

speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 03:41:14
Ich finde immer irgendwelche nicht dokumentierten Befehle wie z.B. https://docs.openstack.org/project-depl ... _rear.html
Das ist mir anfänglich auch aufgestoßen, bis ich verstanden habe, dass dies die Erweiterung(en) anderer Projekte (OpenStack) sind.
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 03:41:14
https://github.com/rear/rear/issues/2530 . ISO_DIR z.B. findet sich nirgendwo im Manual ( man rear | grep ISO_DIR )
Kann ich bestätigen, ich frage mich, für was du "ISO_DIR" verwenden möchtest?
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 03:41:14
Die Konfiguration den ReaR treibt mich grad echt in den Wahnsinn.
Wo genau klemmt es?
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 03:41:14
Zig nicht dokumentierte Parameter, outputs wo keine sein sollten und alles doppelt und dreifach im Quellsystem herumkopiert.
Ja, ReaR ist sehr mächtig und mittlerweile durch viele Projekte erweitert wurden, die Dokumentation könnte einmal eine grundlegende Überarbeitung gebrauchen.
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 03:41:14
ReaR ist ein Doku und Konfig-Horror sondergleichen und so langsam verliere ich echt die Geduld.
Jetzt hast du Dampf abgelassen, aber zurück zur Sachebene.
Wo genau klemmt es?
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 03:41:14
Wird als einfach und simple angepriesen und alles was einem bleibt ist Try and Error.
Nicht ganz, ich schrieb: "Gut dokumentiert und logisch in der Umsetzung.". → viewtopic.php?t=182895#p1289595
Eigenbau PC: Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Desktop PC: Dell Inspiron 530 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Notebook: TUXEDO BU1406 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Alles Minimalinstallationen und ohne sudo/PA/PW.
Rootserver: Rocky Linux 9.3 - Kernel: 5.14

Freie Software unterstützen, Grundrechte stärken!

Benutzeravatar
Blackbox
Beiträge: 4289
Registriert: 17.09.2008 17:01:20
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Rear (Relax and Recover) - sämtliche Datenpfade auslagern

Beitrag von Blackbox » 15.12.2021 12:05:45

speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 01:14:43
Also Rear ist echt komisch was die Pfade angeht.
Eigentlich nicht.
Aber ich wusste bis eben nicht, dass du ssh einsetzt, bisher habe ich ausschließlich mit NFS(4) Shares in diesem Umfeld gearbeitet.
Vielleicht hilft es dir den Einsatz von Debiansshfs zu prüfen, oder auch NFS zu verwenden?
Wenn du die Images auf entfernten Speichern erstellen möchtest.
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 01:14:43
Die ISO Bootfiles werden in /tmp/rear.xxxxx angelegt, darin wird dann das Systembackup als tar Archiv gespeichert und am Ende wird aus dem /tmp/rear.xxx die ISO in /var/lib/rear/output erstellt.
Soweit so gut. Wenn das System nun aber keinen freien Speicherplatz mehr hat gibt es verschiedene Optionen die man per config mit geben kann:

1 ISO output Pfad ändern und über versch. Module wie z.B sshfs auslagern
2 Tar Archuiv des Systembackups auslagern

Die erstelle ISO wird dann nicht mehr im System erstellt. Das Tar Archiv des Systembackups wird zwar auf dem sshfs remote Host erstellt aber ebenfalls in /tmp/rear.xxxx. Ist das Tar Archiv nun größer als die /tmp Partition gibt es ein Problem.

Das TMPDIR der rear config kann zwar auch geändert werden aber eben nicht auf Remote Pfade. Temporäres Einhängen einer sshfs Freigabe in über /tmp für zu folgendem Fehler:

Code: Alles auswählen

Relax-and-Recover 2.6 / Git
Running rear mkbackup (PID 211037)
Using log file: /var/log/rear/rear-debian.log
Running workflow mkbackup on the normal/original system
speefak@speenux's password: 
Using backup archive '/tmp/rear.aiIKreAvxv3Bfx5/outputfs/debian/backup.tar.gz'
Using autodetected kernel '/boot/vmlinuz-5.10.0-9-amd64' as kernel in the recovery system
Creating disk layout
Overwriting existing disk layout file /var/lib/rear/layout/disklayout.conf
Using guessed bootloader 'GRUB' (found in first bytes on /dev/sda)
Verifying that the entries in /var/lib/rear/layout/disklayout.conf are correct ...
Creating recovery system root filesystem skeleton layout
ERROR: Failed to copy '/usr/share/rear/skel/default' contents to /tmp/rear.aiIKreAvxv3Bfx5/rootfs
Some latest log messages since the last called script 010_merge_skeletons.sh:
  tar: ./usr/lib/systemd/system/multi-user.target.wants: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: ./usr/lib/systemd/system/getty.target.wants: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: ./usr/lib/systemd/system: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: ./usr/lib/systemd: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: ./usr/lib: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: ./usr: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: .: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: Exiting with failure status due to previous errors
Aborting due to an error, check /var/log/rear/rear-debian.log for details
Exiting rear mkbackup (PID 211037) and its descendant processes ...
Running exit tasks
Beendet
Gibt es eine Möglichkeit sämtliche Dateioperationen auf Remote Pfade zu mappen , sodass nichts auf dem eigentlichen zu sichernden System erstellt wird ?
Verstehe, sshfs scheint nicht zu funktionieren.

Dann wären 2 mögliche Lösungswege.
  • Zusätzliche Platte mit ausreichender Kapazität in die Maschine einbauen, vielleicht funktioniert auch eine externe USB Platte, die in das System eingehängt wird.
    oder
  • Doch ein NFS Share?
Das kommt eben darauf an, wie schmerzfrei (professionell) du die Maschine gestalten möchtest?
Und welche finanziellen Mittel dir zur Verfügung stehen.
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 01:14:43
Auch muss man für jede sshfs Angabe in der rear config jeweils das ssh Passwort eingeben. Da macht es doch mehr Sinn die Standartpfade für ReaR beizubehalten und ein sshfs RemoteFS direkt in /var/lib/rear/ einzuhängen. Damit muss man nur einmal beim sshfs Mount das Passwort eingeben.
Das klingt nach einem interessanten Ansatz, es wird wohl probiert werden müssen, da ich auch nicht weiß, ob das so umgesetzt werden kann.
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 03:41:14
Ich finde immer irgendwelche nicht dokumentierten Befehle wie z.B. https://docs.openstack.org/project-depl ... _rear.html
Das ist mir anfänglich auch aufgestoßen, bis ich verstanden habe, dass dies die Erweiterung(en) anderer Projekte (OpenStack) sind.
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 03:41:14
https://github.com/rear/rear/issues/2530 . ISO_DIR z.B. findet sich nirgendwo im Manual ( man rear | grep ISO_DIR )
Kann ich bestätigen, ich frage mich, für was du "ISO_DIR" verwenden möchtest?
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 03:41:14
Die Konfiguration den ReaR treibt mich grad echt in den Wahnsinn.
Wo genau klemmt es?
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 03:41:14
Zig nicht dokumentierte Parameter, outputs wo keine sein sollten und alles doppelt und dreifach im Quellsystem herumkopiert.
Ja, ReaR ist sehr mächtig und mittlerweile durch viele Projekte erweitert wurden, die Dokumentation könnte einmal eine grundlegende Überarbeitung gebrauchen.
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 03:41:14
ReaR ist ein Doku und Konfig-Horror sondergleichen und so langsam verliere ich echt die Geduld.
Jetzt hast du Dampf abgelassen, aber zurück zur Sachebene.
Wo genau klemmt es?
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 03:41:14
Wird als einfach und simple angepriesen und alles was einem bleibt ist Try and Error.
Nicht ganz, ich schrieb: "Gut dokumentiert und logisch in der Umsetzung.". → viewtopic.php?t=182895#p1289595

Bin gespannt auf deine Rückmeldung, jetzt habe ich Blut geleckt und möchte dich gern bei der Umsetzung unterstützen, den bei diesem Vorhaben kann ich bestimmt auch noch etwas lernen.
Eigenbau PC: Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Desktop PC: Dell Inspiron 530 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Notebook: TUXEDO BU1406 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Alles Minimalinstallationen und ohne sudo/PA/PW.
Rootserver: Rocky Linux 9.3 - Kernel: 5.14

Freie Software unterstützen, Grundrechte stärken!

Benutzeravatar
speefak
Beiträge: 449
Registriert: 27.04.2008 13:54:20

Re: Rear (Relax and Recover) - sämtliche Datenpfade auslagern

Beitrag von speefak » 15.12.2021 15:26:37

Moin, neuer Tag neuer Versuch ;)

Ja ich war nach 2 Tagen Try and Error ein wenig angebraten, zumal man für jeden Configtest 5 min warten muss ( habe mir fürs Testen eine Mininalinstallation aufgesetzt sonst wären es 10 - 15 min für jeden Test ). Sämtliche Dateioperationen und Verwaltung von Rechnern führe ich schon "seit immer" ;) per ssh aus (verschlüsselt, ein Port für "Alles", einfache Syntax) Bisher bin ich folgendermaßen verfahren:

1. Remote FS via sshfs ins zu sichernde System eingebunden
2. alle unötigen Daten ( Logs Tempfiles etc ) mit ncdu ( sudo ncdu / ) gelöscht
3. Sicherung mit dd if=/dev/sda of=/mnt/remotesshfs durchgeführt
3.1 ggf. nur Systempartition / gesichert wenn Home mit großem Datenbestand vorhanden

Meine Systeme partitioniere ich immer mit einer kleinst möglichen Systempartition ( anfangs 10, aktuell 20 GB ) damit der dd Backup recht klein bleibt ). Damit habe ich keinerlei zusätzliche Dateioperation im Quellsystem, ein mountbares Image und benötige keine zusätzlichen Programme mit komplizierter Syntax oder übertriebenen GUIs. Einziger Nachteil : mit dd ( oder cp /dev/sda - geht schneller ) sind die Images genau so groß wie Partition, auch wenn diese nur halbvoll ist. Will man die Images einhängen um beispielsweise Configs aus dem Backup zu kopieren fällt eine Komprimierung raus. Ein Glück sind die mittlerweile großen Speicherkapazitäten der HDDs, da machen 20 GB nicht mehr so viel aus. Optimal ist das allerdings nicht.

Die meisten Backuptools bieten keine Möglichkeit ein bootbares Image zu Installation/Systemwiederherstellung zu erstellen. Es geht zwar auch über eine Live CD dann den Backuppfad via sshfs mounten und mit dd das Backup einspielen und ggf. mit Parted/Gparted etc. die Partition dann an die neuen Größen anpassen. Nachteil hier auch wieder dd bedingt: Die Ziel Partition muss größer sein als die des Quellimages. Wenn man das alles schon bei der Installation des Systems berücksichtigt ( kleine Systempartition, Datenpfade wie /home u.a. auf andere Partitionen auslagern ) hat man ein recht einfaches Backupsystem versch. Partitionen und kleiner Platten ohne zusätzliche Software bzw. Software aus den Main Repos der meisten Distributionen. Zufrieden war ich damit nie, da es besser geht und einige "Features" fehlen:

1. Meist nur Sicherung der System Partition ( außer Vorinstallierste Systeme von z.B. Thin Clients )
2. Große Backup "Zeroinstall" Images
3. Anpassung an Speichermedien der Zielsysteme nur bedingt möglich
4. Nacharbeit der Swap, Home u.a. Pfade nach Kopieren der Systempartition auf Zielsystem.

Solange man ein LAN mit Servern und viel Speicherkapazität und Zeit hat geht das ja alles noch. Vor Ort am Ar*** der Welt ohne Internetverbindung und ohne LAN mit einer Fernbedienung mit integrierter Tastatur wirds dann echt übel ( Kodi VDR installation auf dem Campingplatz z.B. ). Wenns Wetter schlecht und die mobilen Daten des Handy ausreichen mag das nicht so schlimm sein :wink:

Die meisten OSS Tools wie Clonezilla und co. bieten auch nur Funktionen wie o.g. dd und machen m.M.n nicht viel Sinn wenn man ohnehin viel mit dem Terminal arbeitet.
Dann stieß ich auf Mondo. Bootbare ISO Images, erstellt aus den Quellsystemen und wie ich es verstanden habe ist das bootbare ISO eine 1:1 Kopie des Quellsystems mit der Option das Quellsystem auf dem Zielsystem bei Anpassung der Plattengrößen wiederherzustellen. Perfekt - wenn da nicht die umständliche Installation wäre. Dann kam die Info mit ReaR :THX: Software aus den Main Repos, Terminal basiert, bootfähige ISO Erstellung und Anpassung der Plattengrößen vor Installation/Kopieren des Backups - Einzig eine bootfähige 1:1 Kopie des Quellsystems gibt es leider nicht - Naja man kann nicht alles haben :roll:

Nachdem ich nun ReaR ausgiebig getestet habe sind mir folgende Dinge aufgefallen:

1. Es werden Dateioperationen der Backuperstellung auf dem Quellsystem durchgeführt ( "Datensammlung" in /tmp )
2. Es gibt viele Optionen, die sich teils ausschließen, widersprechen, oder nicht dokumentiert sind
3. /tmp temporär mit sshfs auslagern funktioniert nicht ( wahrscheinlich fehlende oder falsche sshfs mount Optionen, da Rechte für sshfs mount bei dxrw --- --- liegen )
4. Ohne explizite Deaktivierung der Erstellung von Dateien im Zielsystem werden Backuparchive sowie ISO Dateien auch unter /var/lib/rear erstellt, zusätzlich zu in der Config angegebenen Netzwerkpfaden ( das steht aber auch in der rear manual = "OUTPUT_URL=null" - wer lesen kann ist klar im Vorteil :facepalm: )
5. ISO_DIR für eine abweichende Speicherung der erstellten ISO Datei ist nicht im Manual dokumentiert - aber gerade DAS würde Sinn machen. Alternativ könnte man auch den sshfs Ordner direkt unter /var/lib/rear/output Einhängen. Ist OUTPUT_URL dann aber nicht auf Null gesetzt werden ISO Datei, Tar Achiv und Logdateien dann in einem Ordner Names "hostname des hosts" erstellt. Möchte man nur die einfache ISO Datei haben ist zwingend die Angabe von ISO_DIR=<path/to/isodir" und OUTPUT_URL=null nötig. Das steht allerdings nirgendwo, weder in den Online Manuals auf der ReaR Seite noch in den systeminternen Manuals. Das herauszufinden hat Stunden gedauert :twisted: Da wäre eine Doku dieses Zusammenhangs wirklich toll !
6. Die ISO Datei wird immer mit dem gleichen Namen erstellt. Sammelt man nun die ISOs verschiedener Backups in einem Ordner ist das blöd da das alte Image des gleichen Clients immer überschrieben wird. Bei inkrementellen Backupumgebungen wie Borgbackup ist das nicht tragisch, da man auf die unterschiedlichen Stände des Images zurückgreifen kann. Aber ohne solche Backupsysteme ist das ein wenig blöd.

Gelöst habe ich es nun folgendermaßen :
1. sshfs Mountpunkt wird erstellt
2. Ein sshfs Remoteordner ( direkter Home des Hosts ) wird im System eingebunden.
3. In diesem Ordner wird ein vordefinierter Ordner erstellt wenn dieser noch nicht vorhanden ist ( ISO_backups )
4. Die Kombination aus sshfs Mountpfad mit ISO_Backup Ordner wird in der ReaR Config als alleiniger und direkter ISO Output (ISO_DIR) definiert
5. Nach Erstellung des ISO Images wird das Image dann mit einem Zeitstempel beinhaltenden Namen umbenannt.
6. sshfs wird ausgehängt

Alles ein wenig umständlich aber dank Script muss dabei nur einmal das Loginpasswort des sshfs Hosts eingeben werden und die Images haben einen Zeitstempel. Vielleicht ist der Name des ISO Images direkt über die ReaR Config zu konfigurieren aber die Option habe ich nicht gefunden und bevor ich Stunden oder Tage danach suche schreibe ich dann eben Script das genau so gut erledigt.

Das einzige was jetzt noch suboptimal ist, ist die Sache mit dem /tmp/rear.xxxxxxx Order. Wenn man ReaR per Config oder sshfs Auslagerung des /tmp/rear.xxxxx Ordners davon abhalten könnte, die benötigten Dateien im Quellsystem selbst zu erstellen, wäre das wirklich super, denn bei Systemen dessen Datenmenge die Größe des /tmp Ordners/Partition übersteigt müssen wieder Workarounds wie ein separater /tmp Ordner herhalten. Dieser muss dann in der ReaR config mit TMPDIR= definiert werden. Wenn jmd einen Tipp hat, wie der ReaR TMDIR Ordner per sshfs ausgelagert werden kann, wäre es perfekt. Folgender Fehler ergibt sich, wenn ein sshfs gemounteter Ordner in der ReaR config angeben wird:

Code: Alles auswählen

Creating recovery system root filesystem skeleton layout
ERROR: Failed to copy '/usr/share/rear/skel/default' contents to /tmp/rear.aiIKreAvxv3Bfx5/rootfs
Some latest log messages since the last called script 010_merge_skeletons.sh:
  tar: ./usr/lib/systemd/system/multi-user.target.wants: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: ./usr/lib/systemd/system/getty.target.wants: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: ./usr/lib/systemd/system: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: ./usr/lib/systemd: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: ./usr/lib: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: ./usr: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: .: Cannot change ownership to uid 0, gid 0: Permission denied
  tar: Exiting with failure status due to previous errors
Aborting due to an error, check /var/log/rear/rear-debian.log for details
Das o.g. Skript :

Code: Alles auswählen

#!/bin/bash
# name          : rear-backup
# desciption    : create temporary connects and paths for rear backup
# autor         : speefak ( itoss@gmx.de )
# licence       : (CC) BY-NC-SA
# version       : 0.1.0
# notice        :
# infosource    :
#
#------------------------------------------------------------------------------------------------------------
############################################################################################################
#######################################   define global variables   ########################################
############################################################################################################
#------------------------------------------------------------------------------------------------------------

 Version=0.1.0
 ScriptName=$(basename $0)

 SSHFSUser=user			#TODO implent var as input option: scriptname user@host <remotedir>
 SSHFSHost=host
 BackupTargetDirRemoteHost="ISO_Backups"
 BackupFileSuffix="entire_disk"

 SSHFSMountpoint="/mnt/${SSHFSUser}@$(echo ${SSHFSHost} | tr -d "/")_ReaR"
 RearOutputDir="${SSHFSMountpoint}/${BackupTargetDirRemoteHost}"

#------------------------------------------------------------------------------------------------------------
############################################################################################################
#############################################   start script   #############################################
############################################################################################################
#------------------------------------------------------------------------------------------------------------

        # check for script information
        if [[ $1 == "-i" ]]; then
                printf "\n"
                script_information
                printf "\n"
        fi

#------------------------------------------------------------------------------------------------------------

        # check for root permission
        if [ ! "$(whoami)" = "root" ]; then printf "\nAre You Root ?\n\n";exit 1;fi

#------------------------------------------------------------------------------------------------------------

        # check help dialog
        if [[ -n $HelpDialog ]]; then usage "help dialog" ; fi

#------------------------------------------------------------------------------------------------------------

        # create local mountpoint, mount ssh remote host and create iso backup target dir
        mkdir -p "${SSHFSMountpoint}"
        sshfs -o allow_other,follow_symlinks ${SSHFSUser}@${SSHFSHost}: ${SSHFSMountpoint}
        mkdir -p "${RearOutputDir}"

#-------------------------------------------------------------------------------------------------------------

        # backup existing ReaR configuration and setup temporary ReaR configuration

        cp /etc/rear/local.conf /etc/rear/local.conf_bak

        echo '

                OUTPUT=ISO
                ISO_DIR='${RearOutputDir}'
                OUTPUT_URL=null
                BACKUP=NETFS
                BACKUP_URL="iso:///backup"

                BACKUP_PROG_COMPRESS_OPTIONS=( --use-compress-program=pigz )
                REQUIRED_PROGS+=( pigz )

		USER_INPUT_TIMEOUT=3

                AUTORESIZE_PARTITIONS=true

        ' > /etc/rear/local.conf

#------------------------------------------------------------------------------------------------------------

        # start ReaR backup
        rear -v mkbackup

#------------------------------------------------------------------------------------------------------------

        # restore ReaR configuration
        mv /etc/rear/local.conf_bak /etc/rear/local.conf

#------------------------------------------------------------------------------------------------------------

        # rename iso backup file
        cd ${RearOutputDir}
        mv "$(ls | grep -w rear-$(hostname).iso)" "$(hostname)_$(date +%F-%H%M%S)_${BackupFileSuffix}.iso"
        cd -
	printf "/n/nfinal image stored in ${RearOutputDir}/$(hostname)_$(date +%F-%H%M%S)_${BackupFileSuffix}.iso"

#------------------------------------------------------------------------------------------------------------

        # unmount and delete directories
        umount ${SSHFSMountpoint}
        rmdir ${SSHFSMountpoint}

#------------------------------------------------------------------------------------------------------------

exit 0

Zuletzt geändert von speefak am 17.12.2021 00:56:45, insgesamt 6-mal geändert.

Benutzeravatar
Blackbox
Beiträge: 4289
Registriert: 17.09.2008 17:01:20
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Rear (Relax and Recover) - sämtliche Datenpfade auslagern

Beitrag von Blackbox » 15.12.2021 19:54:41

Meine Gedanken zu deinen Feststellungen.
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 15:26:37
Nachdem ich nun ReaR ausgiebig getestet habe sind mir folgende Dinge
Deine Kritikpunkte sind berechtigt und sollten in upstream einfließen.
Da die Hauptentwicklung auf GITHUB stattfindet, müssten die Erkenntnisse wohl dort eingebracht werden?
So profitieren alle Anwender von den Verbesserungen in ReaR und müssten zukünftig weniger Klimm­züge machen, um ans Ziel zu kommen. - So auch wir.
Auch die Erweiterungen und die fehlenden Variablen sollten in die Dokumentation einfließen, ebenfalls upstream.
Die zentrale Frage ist nun, wie das Vorhaben effektiv angehen?
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 15:26:37
1. Es werden Dateioperationen der Backuperstellung auf dem Quellsystem durchgeführt ( "Datensammlung" in /tmp )
Hier wäre es schön, wenn es eine einfachere Möglichkeit gäbe, das Buildverzeichnis zu ändern, ohne tricksen zu müssen.
Das bedeutet aber wahrscheinlich eine Variable mehr.
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 15:26:37
2. Es gibt viele Optionen, die sich teils ausschließen, widersprechen, oder nicht dokumentiert sind
Ich habe ja bereits im vorherigen Post bemerkt, dass die Projektseite wesentlich umfangreicher ist, als die Manpages.
Das müsste ergänzt werden.
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 15:26:37
3. /tmp temporär mit sshfs auslagern funktioniert nicht ( wahrscheinlich fehlende oder falsche sshfs mount Optionen, da Rechte für sshfs mount bei dxrw --- --- liegen )
Laut: https://relax-and-recover.org/about/ → "Support for various transport methods, incl" wird auch sftp unterstützt, warum dann nicht auch direkt sshfs?
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 15:26:37
4. Ohne explizite Deaktivierung der Erstellung von Dateien im Zielsystem werden Backuparchive sowie ISO Dateien auch unter /var/lib/rear erstellt, zusätzlich zu in der Config angegebenen Netzwerkpfaden ( das steht aber auch in der rear manual = "OUTPUT_URL=null" - wer lesen kann ist klar im Vorteil )
Auch hier wäre es schön, wenn der Zusammenhang deutlicher gemacht würde.
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 15:26:37
5. ISO_DIR für eine abweichende Speicherung der erstellten ISO Datei ist nicht im Manual dokumentiert - aber gerade DAS würde Sinn machen. Alternativ könnte man auch den sshfs Ordner direkt unter /var/lib/rear/output Einhängen. Ist OUTPUT_URL dann aber nicht auf Null gesetzt werden ISO Datei, Tar Achiv und Logdateien dann in einem Ordner Names "hostname des hosts" erstellt. Möchte man nur die einfache ISO Datei haben ist zwingend die Angabe von ISO_DIR=<path/to/isodir" und OUTPUT_URL=null nötig. Das steht allerdings nirgendwo, weder in den Online Manuals auf der ReaR Seite noch in den systeminternen Manuals. Das herauszufinden hat Stunden gedauert. Da wäre eine Doku dieses Zusammenhangs wirklich toll !
Siehe Antwort vorher.
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 15:26:37
6. Die ISO Datei wird immer mit dem gleichen Namen erstellt. Sammelt man nun die ISOs verschiedener Backups in einem Ordner ist das blöd da das alte Image des gleichen Clients immer überschrieben wird. Bei inkrementellen Backupumgebungen wie Borgbackup ist das nicht tragisch, da man auf die unterschiedlichen Stände des Images zurückgreifen kann. Aber ohne solche Backupsysteme ist das ein wenig blöd.
Wir dürfen nicht vergessen, dass ReaR eine Desaster Recovery Lösung ist und da gibt es mit hoher Wahrscheinlichkeit immer nur ein Image pro Maschine.
Dennoch finde ich deinen Lösung (das Script) elegant.
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 15:26:37
Gelöst habe ich es nun folgendermaßen :
1. sshfs Mountpunkt wird erstellt
2. Ein sshfs Remoteordner ( direkter Home des Hosts ) wird im System eingebunden.
3. In diesem Ordner wird ein vordefinierter Ordner erstellt wenn dieser noch nicht vorhanden ist ( ISO_backups )
4. Die Kombination aus sshfs Mountpfad mit ISO_Backup Ordner wird in der ReaR Config als alleiniger und direkter ISO Output (ISO_DIR) definiert
5. Nach Erstellung des ISO Images wird das Image dann mit einem Zeitstempel beinhaltenden Namen umbenannt.
6. sshfs wird ausgehängt
Wow, super umgesetzt.
Das Script ist logisch aufgebaut, super lesbar, dadurch verständlich und übersichtlich.
Einzig bei der Lizenz würde ich eine andere wählen.
Aber vielleicht kann ich auch einfach deine Entscheidung (noch) nicht ohne Erklärung nachvollziehen?
Eigenbau PC: Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Desktop PC: Dell Inspiron 530 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Notebook: TUXEDO BU1406 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Alles Minimalinstallationen und ohne sudo/PA/PW.
Rootserver: Rocky Linux 9.3 - Kernel: 5.14

Freie Software unterstützen, Grundrechte stärken!

Benutzeravatar
speefak
Beiträge: 449
Registriert: 27.04.2008 13:54:20

Re: Rear (Relax and Recover) - sämtliche Datenpfade auslagern

Beitrag von speefak » 15.12.2021 21:07:05

Danke für die Blumen (Skript). Ich werde die Kritikpunkt die als Verbesserungen im Bugrepost auf Github eintragen.

Aktuell suche ich noch nach einer Möglichkeit die Timeouts des Restores herunterzusetzen bzw. zu deaktivieren, sodass beim Autorecover alles fix durchläuft. Default 1 ist ja immer ausgewählt und das Partitions Resizing nimmt sich immer die letzte Partition vor. Per default Installation legt Debian die Swap Partition immer ans Ende und als letzte Partition an. Bei HDDs war das noch sinnvoll aufgrund der höheren Abtastrate auf den äußereren Plattern aber für SSDs macht das kein Sinn - im Gegenteil Swap, boot, / , tmp, var, lib ..... home war immer schon naheliegender, da Home variiert und auch ruhig vollaufen kann. Bei den anderen Systempartitionen wäre das gar nicht gut und je nach Systemaufbau sollten diese in der Größe auch nicht variieren.

Zur Lizens : ReaR ist doch auch nicht kommerziell und unter GPL. Mein Skripte kann jeder gerne nutzen, auch kommerzielle Verwendung solange die Verwendung nicht zur Preissteigerung des Produktes verwendet wird. OK Kommerzielle Nutzung bei nicht Werrtsteigerung des Produktes ... da passt es nicht so ganz. ( https://itoss.org/rechtliches/creative- ... -lizenzen/ ). Gilt in dem Fall für ReaR aber nicht da ReaR auch nicht kommerziell ist ;)

Benutzeravatar
Blackbox
Beiträge: 4289
Registriert: 17.09.2008 17:01:20
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Rear (Relax and Recover) - sämtliche Datenpfade auslagern

Beitrag von Blackbox » 16.12.2021 12:13:31

speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 21:07:05
Ich werde die Kritikpunkt die als Verbesserungen im Bugrepost auf Github eintragen.
Kannst du bitte den Bugreport dann hier verlinken?
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 21:07:05
Aktuell suche ich noch nach einer Möglichkeit die Timeouts des Restores herunterzusetzen bzw. zu deaktivieren, sodass beim Autorecover alles fix durchläuft.
Ich würde gern helfen, aber ich weiß nicht, was genau du mit "Timeouts" meinst?
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 21:07:05
Default 1 ist ja immer ausgewählt und das Partitions Resizing nimmt sich immer die letzte Partition vor.
Kann ich nicht sagen, ich habe noch nie eine Default Installation vorgenommen.
Mein Standard ist Debiandebootstrap.
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 21:07:05
Per default Installation legt Debian die Swap Partition immer ans Ende und als letzte Partition an. Bei HDDs war das noch sinnvoll aufgrund der höheren Abtastrate auf den äußereren Plattern aber für SSDs macht das kein Sinn - im Gegenteil Swap, boot, / , tmp, var, lib ..... home war immer schon naheliegender, da Home variiert und auch ruhig vollaufen kann. Bei den anderen Systempartitionen wäre das gar nicht gut und je nach Systemaufbau sollten diese in der Größe auch nicht variieren.
Ich ahne, was du mir sagen möchtest, aber ganz sicher bin ich mir doch nicht.
speefak hat geschrieben: ↑ zum Beitrag ↑
15.12.2021 21:07:05
Zur Lizens : ReaR ist doch auch nicht kommerziell und unter GPL. Mein Skripte kann jeder gerne nutzen, auch kommerzielle Verwendung solange die Verwendung nicht zur Preissteigerung des Produktes verwendet wird. OK Kommerzielle Nutzung bei nicht Werrtsteigerung des Produktes ... da passt es nicht so ganz. ( https://itoss.org/rechtliches/creative- ... -lizenzen/ ). Gilt in dem Fall für ReaR aber nicht da ReaR auch nicht kommerziell ist
Ein Blick in meine Signatur zeigt eigentlich, welche Lizenz ich gewählt hätte.
Eigenbau PC: Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Desktop PC: Dell Inspiron 530 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Notebook: TUXEDO BU1406 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Alles Minimalinstallationen und ohne sudo/PA/PW.
Rootserver: Rocky Linux 9.3 - Kernel: 5.14

Freie Software unterstützen, Grundrechte stärken!

Benutzeravatar
speefak
Beiträge: 449
Registriert: 27.04.2008 13:54:20

Re: Rear (Relax and Recover) - sämtliche Datenpfade auslagern

Beitrag von speefak » 16.12.2021 14:55:16

Es geht um die Timeout ( 300 ) (s. Video)
https://speefak.spdns.de/mycloud/index. ... 5L846zwoTc

Zur Partitionierung : Swap ist meist viel kleiner als andere Partitionen. In den meisten Fällen ist Home die größte Partition. Der ReaR Restore verkleinert per default die letzte Partition falls die Ziel HDD/SSD kleiner als die Quell HDD/SSD ist. Es besteht die Möglichkeit während des Restore die Partitionsgrößen anzupassen, allerdings ist das recht kompliziert dann man Blöcke angeben und daher viel herumrechnen muss. Und wie gesagt die Systempartition mit dem Wurzelverzeichnis zu verkleinern ist nicht optimal. Wenn man z.B. einfach nur einen VDR Client erstellen möchte mit 4 GB für / ( das ist schon recht knapp kalkuliert ) und alle Userdaten wie Aufnahmen auf Home auslagert und / dann auf 2 GB verkleinert wird das recht schnell zu dem Fehler "No Space Left on Device" führen. Gleiches gilt für Server wenn Logs Amok laufen und /var volläuft. Darum ist eine Verkleinerung von Home am wenigsten kritisch. Wenn Home vollläuft ist das für den Systemkern fast egal.

Skriptupdate :

- Timeout von 300 auf 3 heruntergesetzt, Recovery läuft damit wesentlich schneller ohne Userinput durch
- Option für Multithreadoperationen für Kompremierung beim Backup und Recovery hinzugefügt

Die Infos finden sich alle in der /usr/share/rear/conf/default.conf. Die manpage von rear sollte 1:1 durch die /usr/share/rear/conf/default.conf ersetzt werden. Oder statt der manpage gleich ein "cat /usr/share/rear/conf/default.conf"
Zuletzt geändert von speefak am 17.12.2021 10:27:29, insgesamt 1-mal geändert.

Benutzeravatar
Blackbox
Beiträge: 4289
Registriert: 17.09.2008 17:01:20
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Rear (Relax and Recover) - sämtliche Datenpfade auslagern

Beitrag von Blackbox » 17.12.2021 11:42:57

speefak hat geschrieben: ↑ zum Beitrag ↑
16.12.2021 14:55:16
Es geht um die Timeout ( 300 ) (s. Video)
https://speefak.spdns.de/mycloud/index. ... 5L846zwoTc
Mit Hilfe deines Videos wurde klar, welche Timeouts du gemeint hast.

Aber mittlerweile hast du bereits die Lösung dieses Problems selbst gefunden.
speefak hat geschrieben: ↑ zum Beitrag ↑
16.12.2021 14:55:16
Es besteht die Möglichkeit während des Restore die Partitionsgrößen anzupassen, allerdings ist das recht kompliziert dann man Blöcke angeben und daher viel herumrechnen muss.
Ja, dieses Relikt mit Blöcken zu arbeiten ist noch aus den Anfängen von ReaR, als Datenspeicher nicht unbedingt aus einer einzelnen Platte zusammengesetzt waren.
Das kann man heute wesentlich komfortabler gestalten, weswegen dies unbedingt in deinen Bugreport einfließen sollte.
Ich dachte da an relative Angaben wie 5 G(B)+, oder Ranges wie 20 G(B) (Anfang) bis 50 G(B) (Ende), das gilt natürlich auch für Kilobyte K(B), Megabyte M(B) und so weiter.
Oder fällt dir noch ein besseres Schema ein?
speefak hat geschrieben: ↑ zum Beitrag ↑
16.12.2021 14:55:16
Und wie gesagt die Systempartition mit dem Wurzelverzeichnis zu verkleinern ist nicht optimal. Wenn man z.B. einfach nur einen VDR Client erstellen möchte mit 4 GB für / ( das ist schon recht knapp kalkuliert ) und alle Userdaten wie Aufnahmen auf Home auslagert und / dann auf 2 GB verkleinert wird das recht schnell zu dem Fehler "No Space Left on Device" führen. Gleiches gilt für Server wenn Logs Amok laufen und /var volläuft. Darum ist eine Verkleinerung von Home am wenigsten kritisch. Wenn Home vollläuft ist das für den Systemkern fast egal.
Welchen Optimierungsbedarf siehst du an dieser Stelle?
speefak hat geschrieben: ↑ zum Beitrag ↑
16.12.2021 14:55:16
Skriptupdate :

- Timeout von 300 auf 3 heruntergesetzt, Recovery läuft damit wesentlich schneller ohne Userinput durch
- Option für Multithreadoperationen für Kompremierung beim Backup und Recovery hinzugefügt

Die Infos finden sich alle in der /usr/share/rear/conf/default.conf. Die manpage von rear sollte 1:1 durch die /usr/share/rear/conf/default.conf ersetzt werden. Oder statt der manpage gleich ein "cat /usr/share/rear/conf/default.conf"
Vielleicht wäre auch noch eine Abfrage für die Timeoutzeit sinnvoll?
Das Teilprojekt würde ich aber erst einmal nach hinten stellen, da es wichtigere Punkte gibt, die eine Überarbeitung gebrauchen könnten.
Diese Änderung können wir angehen, wenn die primären Änderungswünsche umgesetzt und eingepflegt sind.

Wir könnten die manpage um die fehlenden Informationen aus

Code: Alles auswählen

/usr/share/rear/conf/default.conf
ergänzen und diese manpage dann, den Entwicklern auf GITHUB zur Verfügung stellen, das hätte geich mehrere Vorteile.
Die Entwickler könnten deine Verbesserungen schneller einpflegen, dadurch könnte eine neue Version von ReaR schneller released werden und eine überarbeitete Manpage käme aus der Community, dass zeigt den Entwicklern ganz nebenbei, dass du nicht nur forderst, sondern auch etwas Substanzielles betragen kannst.
Was die Motivation der Entwickler deiner Änderungswünsche übernehmen zu wollen, noch einmal steigern könnte.

Für die Änderungen sollte Debiangroff-base ausreichen.
Wäre das ein gangbarer Weg für dich?
Eigenbau PC: Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Desktop PC: Dell Inspiron 530 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Notebook: TUXEDO BU1406 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Alles Minimalinstallationen und ohne sudo/PA/PW.
Rootserver: Rocky Linux 9.3 - Kernel: 5.14

Freie Software unterstützen, Grundrechte stärken!

Benutzeravatar
speefak
Beiträge: 449
Registriert: 27.04.2008 13:54:20

Re: Rear (Relax and Recover) - sämtliche Datenpfade auslagern

Beitrag von speefak » 17.12.2021 12:58:30

Ich dachte da an relative Angaben wie 5 G(B)+, oder Ranges wie 20 G(B) (Anfang) bis 50 G(B) (Ende), das gilt natürlich auch für Kilobyte K(B), Megabyte M(B) und so weiter.
Oder fällt dir noch ein besseres Schema ein?
Genau das dachte ich auch.
Welchen Optimierungsbedarf siehst du an dieser Stelle?
Verbesserung in dem Sinne gibt es da keine. Das war eher so gemeint, dass man sich im Vorfeld überlegen sollte wie man die Partitionen anlegt und sein System gestaltet.

Zur Manpage : Gute Frage wie man das machen sollte ... Auf der eine Seite wird die Manpge recht unübersichtlich wenn der Inhalt aus /usr/share/rear/conf/default.conf dort einfließt. Auf der anderen Seite steht alles wesentliche in der Manpage drin u.a. auch :

Code: Alles auswählen

 /usr/share/rear/conf/default.conf
           Relax-and-Recover default values. Contains a complete set of parameters and its explanation. Please do not edit or modify. Copy values
           to local.conf or site.conf instead.
Würde man ( oder ich :facepalm: ) bis zu Ende lesen hätte man alle Informationen. Der Hinweis auf die erweiterten Optionen sollte ggf. direkt am Anfang der Manpage kommen. Aktuell gibt es eine Trennung von Grundlegenden Optionen bzw. der Nutzung von ReaR (manpage) und "Spezial Optionen" (default.conf). Ist die Frage ob die meisten Nutzer die spezial Optionen brauchen und die daher in die Manpage einfließen sollten oder eben nicht.

Groff-base kannte ich bis dato noch nicht. Im mom fehlt mir dazu die Zeit mich damit zu beschäftigen. Auf GIT Hub steht nun erstmal das "Options" Review und die Verbesserungsvorschläge an. Das Script wollte ich auch noch updaten: Configfile => Configabfrage und sshfs Verbindungen ggf. mit ssh-askpass oder sshkeys, Suffix und Prefix, Remotestoragedirectory, zusätzliche Programme, Timeouts etc.

Benutzeravatar
Blackbox
Beiträge: 4289
Registriert: 17.09.2008 17:01:20
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Rear (Relax and Recover) - sämtliche Datenpfade auslagern

Beitrag von Blackbox » 17.12.2021 18:52:27

speefak hat geschrieben: ↑ zum Beitrag ↑
17.12.2021 12:58:30
Zur Manpage : Gute Frage wie man das machen sollte ... Auf der eine Seite wird die Manpge recht unübersichtlich wenn der Inhalt aus /usr/share/rear/conf/default.conf dort einfließt. Auf der anderen Seite steht alles wesentliche in der Manpage drin u.a. auch :

Code: Alles auswählen

 /usr/share/rear/conf/default.conf
           Relax-and-Recover default values. Contains a complete set of parameters and its explanation. Please do not edit or modify. Copy values
           to local.conf or site.conf instead.
Richtig, in der Manpage sollte am Anfang ein Hinweis auf die erweiterten Optionen bzw. später auf die Manpage mit den erweiterten Optionen gesetzt werden.
Ganz am Anfang der Manpage gewährleistet, dass die Information nicht untergeht.
speefak hat geschrieben: ↑ zum Beitrag ↑
17.12.2021 12:58:30
Würde man ( oder ich ) bis zu Ende lesen hätte man alle Informationen. Der Hinweis auf die erweiterten Optionen sollte ggf. direkt am Anfang der Manpage kommen.
Siehe Absatz zuvor.
speefak hat geschrieben: ↑ zum Beitrag ↑
17.12.2021 12:58:30
Aktuell gibt es eine Trennung von Grundlegenden Optionen bzw. der Nutzung von ReaR (manpage) und "Spezial Optionen" (default.conf). Ist die Frage ob die meisten Nutzer die spezial Optionen brauchen und die daher in die Manpage einfließen sollten oder eben nicht.
Auch für die erweiterten Optionen könnte eine Manpage erstellt werden, eben weil der Linuxkundige als erstes in die Manpage schaut.
Wenn in der grundlegenden Manpage - an präsenter Stelle - auch ein Verweis auf die Manpage mit den erweiterten Optionen existiert, wird diese leichter gefunden und auch genutzt.
Das dann weiter unter ein Verweis auf eine Beispielkonfiguration zeigt, ist zwar schön, aber die lag an der falschen Stelle und konnte deswegen leicht übersehen werden.
speefak hat geschrieben: ↑ zum Beitrag ↑
17.12.2021 12:58:30
Groff-base kannte ich bis dato noch nicht. Im mom fehlt mir dazu die Zeit mich damit zu beschäftigen.
Das geht vielen so.
speefak hat geschrieben: ↑ zum Beitrag ↑
17.12.2021 12:58:30
Auf GIT Hub steht nun erstmal das "Options" Review und die Verbesserungsvorschläge an.
Hast du auch einen Link für die "Manöverkritik"? :lol:
speefak hat geschrieben: ↑ zum Beitrag ↑
17.12.2021 12:58:30
Das Script wollte ich auch noch updaten: Configfile => Configabfrage und sshfs Verbindungen ggf. mit ssh-askpass oder sshkeys, Suffix und Prefix, Remotestoragedirectory, zusätzliche Programme, Timeouts etc.
Mach erst einmal das Script fertig und dann findet sich auch Zeit für den Rest.
Ist ja bald Wochenende/Urlaub, wenn du nicht in einem systemkritischen Beruf beschäftigt bist.
Eigenbau PC: Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Desktop PC: Dell Inspiron 530 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Notebook: TUXEDO BU1406 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Alles Minimalinstallationen und ohne sudo/PA/PW.
Rootserver: Rocky Linux 9.3 - Kernel: 5.14

Freie Software unterstützen, Grundrechte stärken!

Benutzeravatar
speefak
Beiträge: 449
Registriert: 27.04.2008 13:54:20

Re: Rear (Relax and Recover) - sämtliche Datenpfade auslagern

Beitrag von speefak » 21.12.2021 03:44:36

Das Script ist etwas umfangreicher geworden, da die von rear erstellen ISOs keine Hybrid ISOs sind und daher nicht einfach mit dd o.ä. auf den USD Stick geschrieben werden können. Auch ist es nicht möglich mit ReaR ein Hybrid image zu erstellen in dem das backup TAR Archiv enthalten ist. Rear kann mit includiertem Backup Archiv nur direkt am Rechner ein bootfähigen USB Stick erstellen oder eben eine bootfähige ISO 9660. Mit dem Script wird eine Bootfähige ISO 9660 incl. Systembackup erstellt und auf einem Remote Host via sshfs abgelegt. Auf dem Quellsystem verbleiben keine Daten. ReaR kann zwar auch via sshfs u.a. plugins auf Remote Hosts zugreifen, allerdings erfodert jeder sshfs Aufruf in der config einen erneuten Login mit Passworteingabe am Remote Host. Ursprpünglich fand ich keine Option den Dateinamen der ReaR ISO Ausgabedatei anzupassen und hatte daher einen sshfs mount programiert, auf dem der ISO Output und die Umbennenung erfolgt. ReaR hat eine Option den Ausgabedateinamen anzupassen, aber keine Option ein Backupverzeichnis auf dem Remote Host anzulegen.
Externe ISOs ( 9660 ) und Hybrid ISOs ( also auch jene die nicht von ReaR erstellt wurden ) können mit dem Script ebenfalls in bootfähige USB Sticks konvertiert werden. Geht auch alles mit Terminal Befehlen aber das Script bietet eine Auswahl der angeschlossenen USD Sticks ( die Systempartitionen sind vor dd sicher 8) ) und eine schnelle Auswahl der ISO Dateien nach dem genauen oder Teilen des Dateinamen oder als wildcard ( ISO ) alle verfügbaren ISOs im System.

Code: Alles auswählen

#!/bin/bash
# name          : rear-backup
# desciption    : create temporary connects and paths for rear backup
# autor         : speefak ( itoss@gmx.de )
# licence       : (CC) BY-NC-SA
# version       : 0.1.3
# notice        :
# infosource    :
#
#------------------------------------------------------------------------------------------------------------
############################################################################################################
#######################################   define global variables   ########################################
############################################################################################################
#------------------------------------------------------------------------------------------------------------

 Version=0.1.3
 ScriptName=$(basename $0)

# TODO userinput / configfile
 SSHFSUser=speefak
 SSHFSHost=speenux
 BackupFileSuffix="OS"
 DirectoryOverride=true
 RearTmpDirOverrideDir="/home/rear_tmp" 
 BackupTargetDirRemoteHost="ReaR_Backups"
 BackupExcludeDir=" $RearTmpDirOverrideDir /mnt /media /home/vbox /home/Archiv /home/vdr_recdir /home/.Trash*"
 RearRecoverTimeout=30

 RearOutputMode=ISO
 RequiredPackets="bash perl rear syslinux syslinux-utils pigz locate"
 RearOutputImageName="$(hostname)_$(date +%F-%H%M%S)_${BackupFileSuffix}"
 SSHFSMountpoint="/mnt/${SSHFSUser}@$(echo ${SSHFSHost} | tr -d "/")_ReaR"
 RearOutputDir="${SSHFSMountpoint}/${BackupTargetDirRemoteHost}"

 CheckMark="\033[0;32m\xE2\x9C\x94\033[0m"

#------------------------------------------------------------------------------------------------------------
############################################################################################################
###############################################   parser  ##################################################
############################################################################################################
#------------------------------------------------------------------------------------------------------------

 BackupExcludeDirParsed=$(for i in $BackupExcludeDir ; do echo -n "'$i/*' " ; done)

#------------------------------------------------------------------------------------------------------------
############################################################################################################
########################################   set vars from options  ##########################################
############################################################################################################
#------------------------------------------------------------------------------------------------------------

	OptionVarList="

		HelpDialog;-h
		CreateISOBackup;-cib
		CreateUSBDrive;-cUSB
		ExternalISOFile;-eISO
		SSHConnectionCheck;-sshcc
		CheckForRequiredPackages;-cfrp
		Monochrome;-m
	"

	# set entered vars from optionvarlist
	OptionAllocator=" "										# for option seperator "=" use cut -d "="
	SAVEIFS=$IFS
	IFS=$(echo -en "\n\b")
	for InputOption in $(echo " $@" | sed 's/ -/\n-/g') ; do
		for VarNameVarValue in $OptionVarList ; do
			VarName=$(echo "$VarNameVarValue" | cut -d ";" -f1)
			VarValue=$(echo "$VarNameVarValue" | cut -d ";" -f2)
			if [[ $InputOption == "$VarValue" ]]; then
				eval $(echo "$VarName"='$InputOption')					# if [[ -n Option1 ]]; then echo "Option1 set";fi
				#eval $(echo "$VarName"="true")
			elif [[ $(echo $InputOption | cut -d "$OptionAllocator" -f1) == "$VarValue" ]]; then
				eval $(echo "$VarName"='$(echo $InputOption | cut -d "$OptionAllocator" -f 2-5000)')
			fi
		done
	done
	IFS=$SAVEIFS

#------------------------------------------------------------------------------------------------------------
############################################################################################################
###########################################   define functions   ###########################################
############################################################################################################
#------------------------------------------------------------------------------------------------------------
script_information () {
	printf " Scriptname: $ScriptName\n"
	printf " Version:    $Version \n"
	printf " Location:   $(pwd)/$ScriptName\n"
	printf " Filesize:   $(ls -lh $0 | cut -d " " -f5)\n"
}
#------------------------------------------------------------------------------------------------------------

usage() {
	printf "\n"
	printf " Usage: $(basename $0) <options> "
	printf "\n"
	printf " -h		=> help dialog \n"
	printf " -cib		=> create ISO Backup\n"
	printf " -cUSB		=> create bootable USB drive\n"
	printf " -eISO		=> external ISO file for -cUSB option (-eISO <file.iso|iso>)\n"
	printf " -sshcc		=> SSH connection check\n"
	printf " -cfrp		=> check for required packages\n"
	printf " -m		=> monochrome output\n"
	printf "\n ${LRed} $1 ${Reset} \n"
	printf "\n"

	# revoke temporary created directories
	directory_override -d &> /dev/null

	exit
}
#------------------------------------------------------------------------------------------------------------------------------------------------
load_color_codes () {
	Black='\033[0;30m'	&&	DGray='\033[1;30m'
	LRed='\033[0;31m'	&&	Red='\033[1;31m'
	LGreen='\033[0;32m'	&&	Green='\033[1;32m'
	LYellow='\033[0;33m'	&&	Yellow='\033[1;33m'
	LBlue='\033[0;34m'	&&	Blue='\033[1;34m'
	LPurple='\033[0;35m'	&&	Purple='\033[1;35m'
	LCyan='\033[0;36m'	&&	Cyan='\033[1;36m'
	LLGrey='\033[0;37m'	&&	White='\033[1;37m'
	Reset='\033[0m'
	# Use them to print in your required colours:
	# printf "%s\n" "Text in ${Red}red${Reset}, white and ${Blue}blue${Reset}."




BG='\033[47m'
FG='\033[0;30m'


}
#------------------------------------------------------------------------------------------------------------------------------------------------
check_for_required_packages () {

	InstalledPacketList=$(dpkg -l | grep ii)

	for Packet in $RequiredPackets ; do
		if [[ -z $(grep -w $Packet <<< $InstalledPacketList) ]]; then
			MissingPackets=$(echo $MissingPackets $Packet)
		fi
	done

	# print status message / install dialog
	if [[ -n $MissingPackets ]]; then
		printf  "missing packets: \e[0;31m $MissingPackets\e[0m\n"$(tput sgr0)
		read -e -p "install required packets ? (Y/N) " -i "Y" InstallMissingPackets
		if   [[ $InstallMissingPackets == [Yy] ]]; then

			# install software packets
			sudo apt update
			sudo apt install $MissingPackets
			if [[ ! $? == 0 ]]; then 
				exit
			fi
		else 
			printf "programm error: \e[0;31m missing packets : $MissingPackets\e[0m\n\n"$(tput sgr0)
			exit 1
		fi
	else
		printf " all required packets detected\n"
	fi
	exit
}
#------------------------------------------------------------------------------------------------------------
SSH_connection_check () {

	printf " check sshfs connection\n"
	ssh ${SSHFSUser}@${SSHFSHost} -t exit
	if [[ ! $? == 0 ]]; then
		usage " SSH connection failed"
	else
		printf " SSH connection ${SSHFSUser}@${SSHFSHost} established $CheckMark\n"
		
		# check sshfs mount process
		printf "\n check sshfs mount process\n"

		mkdir -p "${SSHFSMountpoint}"

		sshfs -o allow_other,follow_symlinks ${SSHFSUser}@${SSHFSHost}: ${SSHFSMountpoint}
		if [[ $? == 0 ]]; then
			printf " SSHFS connection ${SSHFSUser}@${SSHFSHost} established $CheckMark\n"
		else
			umount --force ${SSHFSMountpoint} 	&>/dev/Null
			rmdir "${SSHFSMountpoint}"		&>/dev/null
			usage " sshfs mount error "
		fi

		umount --force ${SSHFSMountpoint}
		rmdir "${SSHFSMountpoint}"
	fi
	exit 1
}
#------------------------------------------------------------------------------------------------------------
directory_override () {								# usage: <-e|-d> (enable|disable)

	# create temporary required directories
	if [[ $1 == "-e" ]]; then

		# create/mount sshfs remote storage directory
		mkdir -p "${SSHFSMountpoint}"
		sshfs -o allow_other,follow_symlinks ${SSHFSUser}@${SSHFSHost}: ${SSHFSMountpoint}
		if [[ $? == 0 ]]; then
			printf " SSH connection ${SSHFSUser}@${SSHFSHost} established $CheckMark\n"
		else
			SSH_connection_check
		fi

		# create rear TMPDIR
		mkdir -p $RearTmpDirOverrideDir

	# delete temposary created directories
	elif [[ $1 == "-d" ]]; then
		
		# unmount and delete directories
		umount --force ${SSHFSMountpoint}
		rmdir ${SSHFSMountpoint}

		# delete rear TMPDIR
		rm -r $RearTmpDirOverrideDir
	fi
}
#------------------------------------------------------------------------------------------------------------
WriteRearConfigISO () {

	echo '
		OUTPUT=ISO
		ISO_DIR='${RearOutputDir}'
		ISO_PREFIX="'$RearOutputImageName'"
		OUTPUT_URL=null
		BACKUP=NETFS
		BACKUP_URL="iso:///backup"

	' > /etc/rear/local.conf
}
#------------------------------------------------------------------------------------------------------------
WriteRearConfigUSB () {

	# TODO create a bootable usb stick directly from Rear
	# issue : Raw output, used to create an image file does not support including backup tar archiv
	# you have to create an loop device, and use this loop device for OUTPUT=USB://path''/to/loopdevice to include backup tar archiv
	# 
	# https://github.com/rear/rear/issues/2581

	echo '
		OUTPUT=RAW
		RAW_DIR='${RearOutputDir}'
		OUTPUT_URL=null

		RAWDISK_IMAGE_NAME="'$RearOutputImageName'"
		RAWDISK_IMAGE_COMPRESSION_COMMAND='\''gzip'\''
		RAWDISK_FAT_VOLUME_LABEL='\''RESCUE SYS'\''
		RAWDISK_GPT_PARTITION_NAME='\'''$RearOutputImageName' Rescue System'\''

	' > /etc/rear/local.conf
}
#------------------------------------------------------------------------------------------------------------
WriteRearConfigAdditional () {

	echo '
		BACKUP_PROG_COMPRESS_OPTIONS=( --use-compress-program=pigz )
		REQUIRED_PROGS+=( pigz )

		USER_INPUT_TIMEOUT='$RearRecoverTimeout'

		AUTORESIZE_PARTITIONS=true
#		AUTORESIZE_PARTITIONS=( /dev/sda3 )
#		AUTORESIZE_EXCLUDE_PARTITIONS=( /dev/sda2 )

		BACKUP_PROG_EXCLUDE=( '$BackupExcludeDirParsed' )

	' >> /etc/rear/local.conf

	# check for directory override
	if [[ $DirectoryOverride == true ]]; then
		echo '		export TMPDIR='$RearTmpDirOverrideDir' ' >> /etc/rear/local.conf		
	fi
}
#------------------------------------------------------------------------------------------------------------------------------------------------
create_ISO_Backup () {

	# create backup directory on ssh host
	mkdir -p "${RearOutputDir}"

	# backup existing ReaR configuration and setup temporary ReaR configuration
	cp /etc/rear/local.conf /etc/rear/local.conf_bak

	# create rear configfile in /etc/rear/local.conf
	if   [[ $RearOutputMode == "ISO" ]]; then
		WriteRearConfigISO
	elif [[ $RearOutputMode == "RAW" ]]; then
		WriteRearConfigIRAW
	fi

	WriteRearConfigAdditional

	# start ReaR backup
	rear -v mkbackup

	# restore ReaR configuration
	mv /etc/rear/local.conf_bak /etc/rear/local.conf
}
#------------------------------------------------------------------------------------------------------------------------------------------------
check_ISO_file () {									# usage: check_ISO_file <isofile.iso>

	# check for empty iso file option
	if [[ $1 == "-eISO" ]]; then
		usage "no ISO file specefied"
	fi

	# check ISO file - absolute path input
	if [[ -f $1 ]]; then
		ISOFileAbsolutePath=$1
	else
		# check ISO file - filename input | updatedb/locate for quick image location ( file cmd causes error if absolutepath is not defined )
		updatedb
		ISOFile=$(locate -b "$1" | grep "\.iso$")

		# check for more than one matched ISO file, print selection for various iso files
		ISOFilesCount=$(grep -c . <<< $ISOFile)
		if [[ $ISOFilesCount -gt 1 ]]; then
			ISOFilesCountCharacter=${#ISOFilesCount}
			ISOImageList=$(echo "$ISOFile" | nl -nrz -w $ISOFilesCountCharacter | sed 's/^ */ /g' )
			request_loop5 () {
				printf " Various ISO Images detected, select one image: \n"
				printf "\n$ISOImageList \n\n" | perl -pe '$_ = "\033[2;29m$_\033[0m" if($. % 2)'
				read -n $ISOFilesCountCharacter ISOImageSelection
				if [[ -z $( grep [[:digit:]] <<< $ISOImageSelection) ]] || [[ $ISOImageSelection -gt $ISOFilesCount ]]; then
					printf "\n ${LRed}invalid number: $ISOImageSelection ${Reset}\n\n"
					request_loop5
				fi
			}
			request_loop5
			ISOFileAbsolutePath=$(echo "$ISOImageList" | grep "^ $ISOImageSelection" | awk -F " " '{printf $2}')
		fi
	fi

	# check for existing file
	if [[ -f $ISOFileAbsolutePath ]]; then
		printf "\033[F \n image exists $CheckMark ($ISOImageSelection $ISOFileAbsolutePath)\n"
	else
		usage " file not found: $1"
	fi

	# get iso file specs
	FileProperties=$(file $ISOFileAbsolutePath)

	# check ISO filesystem
	if   [[ -n $(grep "ISO 9660" <<< $FileProperties) ]]; then
		printf " ISO filesystem $CheckMark\n"
		ISOHybrid=false
	elif [[ -n $(grep " DOS/MBR boot sector" <<< $FileProperties) ]]; then
		printf " Hybrid filesystem $CheckMark\n"
		ISOHybrid=true
	else
		usage "invalid ISO file: $(printf "$(echo -e " $FileProperties" | sed 's/iso:/iso \\n type:\\t\\t   '/)")"
	fi

	# check for bootable ISO 
	if [[ -z $(grep "bootable" <<< $FileProperties) ]]; then
		request_loop4 () {
			Request=
			printf " ${LYellow}non bootable ISO file: ${Reset} $ISOFileAbsolutePath\n"
			read -n1 -e -p " Are you sure to use this image (y/N)? " Request
			if   [[ "$Request" == [yY] ]]; then
				printf "\033[F\033[F \n non bootable ISO image accepted $CheckMark       \n"
			elif [[ "$Request" == [nN]  ]]; then
				printf " USB drive creation process canceled\n"
				exit 1
			else
				request_loop4
			fi
			printf ""
		}
		request_loop4
	else
		printf " bootable ISO image $CheckMark\n"
	fi
}
#------------------------------------------------------------------------------------------------------------------------------------------------
detect_and_select_usb_drives () {

	DetectUSBDrivesResultFile=/tmp/.usbdrives
	DeviceListRAW=$(ls /dev/sd{a..z} 2> /dev/null)
	DeviceListInfoRAW=$(lshw -class disk | sed 's/removable/removeable/g') # sed corrects lshw misspelling
	DeviceListOS=$(df -h | grep -v "/media/")

	# write detect usb devices to file => $DetectUSBDrivesResultFile
	SAVEIFS=$IFS
	IFS=$(echo -en "\n\b")
	for i in $DeviceListRAW ; do
		if [[ -n $( grep $i <<< "$DeviceListOS") ]]; then
			printf "Systemdevice detected: $i \n\n" 
		else
			# get USB drive vars
			DeviceInfo=$( grep -m1 -A5 -B5 "$i" <<< "$DeviceListInfoRAW")

			DeviceSize=$(awk -F "size:" '{printf $2 $3 }' <<< "$DeviceInfo")
			DeviceProduct=$(awk -F "product:" '{printf $2 $3 }' <<< "$DeviceInfo")
			DeviceVendor=$(awk -F "vendor:" '{printf $2 $3 }' <<< "$DeviceInfo")
			DeviceCapability=$(awk -F "capabilities:" '{printf $2 $3 }' <<< "$DeviceInfo")

			# set unknown var for unset vars
			DeviceSize=${DeviceSize:- unknown size}
			DeviceProduct=${DeviceProduct:-unknown product}
			DeviceVendor=${DeviceVendor:-unknown Vendor}
			DeviceCapability=${DeviceCapability:-unknown capability}

			printf "%-20s %-8s %-10s %-18s %-10s\n" "USB drive detected:" "$i" "$DeviceProduct" "$DeviceSize" "$DeviceCapability"
		fi
	done | grep USB | nl | sed 's/^ */ /g' > $DetectUSBDrivesResultFile
	IFS=$SAVEIFS

	# select USB drive if more than one usb drive is detected
	USBDriveChoise=1
	DetectedUSBDeviceCount=$( grep -c . $DetectUSBDrivesResultFile)
	if   [[ $DetectedUSBDeviceCount == 0 ]]; then
		usage " no usb drive found"
	elif [[ $DetectedUSBDeviceCount -gt 1 ]]; then
		request_loop () {
			printf "\n select USB drive: \n" 
			cat $DetectUSBDrivesResultFile
			read -s -n 1 USBDriveChoise
			if [[ -z $( grep [[:digit:]] <<< $USBDriveChoise) ]] || [[ $USBDriveChoise -gt $DetectedUSBDeviceCount ]]; then
				printf " invalid number: $USBDriveChoise \n"
				request_loop
			fi
		}
		request_loop
	fi

	# get selected USB device path
	SelectedUSBDrive=$(grep "^ $USBDriveChoise" $DetectUSBDrivesResultFile) 
	USBTargetDevicePath=$( awk -F " " '{printf $5}' <<< "$SelectedUSBDrive")

	printf "\n$(sed 's/detected/selected/' <<< $SelectedUSBDrive)\n"

	# final check for correct device path
	request_loop2 () {
		Request=
		printf "\n${Red} ALL DATA ON THIS DEVICE WILL BE LOST !${Reset} Really use this drive (y/N)? "
		read -n1 -e Request
		if   [[ "$Request" == [yY] ]]; then
			printf ""
		elif [[ "$Request" == [nN] ]]; then
			printf " USB drive creation process canceled\n"
			exit 1
		else
			request_loop2
		fi
		printf ""
	}
	request_loop2
}
#------------------------------------------------------------------------------------------------------------------------------------------------
create_USB_drive_from_ISO () {

	# unmount USB drive if mounted
	umount --force ${USBTargetDevicePath}* 2> /dev/null

	# format USB drive with vFAT filesystem
	printf "\n format USB drive (${USBTargetDevicePath}) with vFAT filesystem\n"
	mkfs -t vfat -I ${USBTargetDevicePath}
	
	# create iso hybrid filesystem for iso 9660
	if   [[ $ISOHybrid == false ]]; then
		
		# copy source ISO
		printf "\n copy ISO file for header update"
		cp ${ISOFileAbsolutePath} ${ISOFileAbsolutePath}-isohybrid

		# prepeare image header for blockdevice copy
		printf "\n change ISO header\n"
		isohybrid ${ISOFileAbsolutePath}-isohybrid --entry 4 --type 0x1c

		# write ISO to USB drive
		ISO2USBSourcefile="${ISOFileAbsolutePath}-isohybrid"
		write_ISO_to_USB

		# delete Isohybrid image
		rm ${ISOFileAbsolutePath}-isohybrid

	elif [[ $ISOHybrid == true ]]; then
		# write ISO to USB drive
		ISO2USBSourcefile=${ISOFileAbsolutePath}
		write_ISO_to_USB
	fi
}
#------------------------------------------------------------------------------------------------------------
write_ISO_to_USB () {

	# write ISO file to USB drive
	printf "\n write ISO file to USB drive\n"
	dd if=${ISO2USBSourcefile} | pv ${ISO2USBSourcefile} | dd of=${USBTargetDevicePath} status=none conv=fdatasync oflag=sync bs=2M 
}
#------------------------------------------------------------------------------------------------------------
############################################################################################################
#############################################   start script   #############################################
############################################################################################################
#------------------------------------------------------------------------------------------------------------

	# check for script information
	if [[ $1 == "-i" ]]; then
		printf "\n"
		script_information
		printf "\n"
	fi

#------------------------------------------------------------------------------------------------------------

	# check for monochrome output
	if [[ -z $Monochrome ]]; then
		load_color_codes
	fi

#------------------------------------------------------------------------------------------------------------

	# check help dialog
	if [[ -n $HelpDialog ]] || [[ -z $1 ]]; then usage "help dialog" ; fi

#------------------------------------------------------------------------------------------------------------

	# option conflict check
	if [[ -n $CreateISOBackup  && -n $ExternalISOFile ]]; then
		usage " option conflict -eISO -cib ( choose one )"
	fi

#------------------------------------------------------------------------------------------------------------

	# check for root permission
	if [ ! "$(whoami)" = "root" ]; then printf "\nAre You Root ?\n\n";exit 1;fi

#------------------------------------------------------------------------------------------------------------

	if [[ -n $CheckForRequiredPackages ]]; then
		check_for_required_packages
	fi

#------------------------------------------------------------------------------------------------------------

	if [[ -n $SSHConnectionCheck ]]; then
		SSH_connection_check
	fi

#------------------------------------------------------------------------------------------------------------

	# create ReaR ISO backup 
	if   [[ -n $CreateISOBackup ]]; then
	
		# create local mountpoint, mount ssh remote host and create iso backup target dir, create rear TMPDIR
		if [[ $DirectoryOverride == true ]]; then
			directory_override -e
		fi

		create_ISO_Backup

		# set source iso for USB creation
		SourceISO="${RearOutputDir}/${RearOutputImageName}.iso"
	fi

#------------------------------------------------------------------------------------------------------------

	# check for USB creation or external ISO file
	if [[ -n $CreateUSBDrive ]] || [[ -n $ExternalISOFile ]]; then

		if [[ -n $ExternalISOFile ]]; then
			SourceISO="$ExternalISOFile"
		fi

		# check ISO file
		check_ISO_file "$SourceISO"

		# detect and select usb drives
		detect_and_select_usb_drives

		#TODO check if USB drive size is larger than ISO image file size

		# create bootable usb drive from ISO file
		create_USB_drive_from_ISO
	fi

#------------------------------------------------------------------------------------------------------------

	# revoke temporary created directories
	if [[ $DirectoryOverride == true ]]; then
		directory_override -d &> /dev/null
	fi

#------------------------------------------------------------------------------------------------------------

exit 0

PS: gab es hier nicht mal die Möglichkeit den Code in einem aufklappbaren Auszugsfenster darzustellen ?

Benutzeravatar
Blackbox
Beiträge: 4289
Registriert: 17.09.2008 17:01:20
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Rear (Relax and Recover) - sämtliche Datenpfade auslagern

Beitrag von Blackbox » 06.01.2022 10:51:38

speefak hat geschrieben: ↑ zum Beitrag ↑
21.12.2021 03:44:36
Das Script ist etwas umfangreicher geworden, da die von rear erstellen ISOs keine Hybrid ISOs sind und daher nicht einfach mit dd o.ä. auf den USD Stick geschrieben werden können.
Grundsätzlich sind Hybrid Images für eine Desaster Recovery Lösung nicht wirklich wichtig, weil diese Images in der Praxis auf Groß- bzw. Massenspeichern abgelegt werden.
Aber deine Lösung hybrite Images zu erzeugen ist ein nettes Feature.
Denn Debianrear ist als Desaster Recovery Lösung gedacht und umgesetzt und diesen Job macht es ziemlich gut.
speefak hat geschrieben: ↑ zum Beitrag ↑
21.12.2021 03:44:36
Auch ist es nicht möglich mit ReaR ein Hybrid image zu erstellen in dem das backup TAR Archiv enthalten ist.
Gewöhnlich wird Desaster Recovery im Unternehmensumfeld eingesetzt, dort sollte genügend Speicher zur Verfügung stehen, die Images ohne Komprimierung ablegen zu können.
Deswegen werden die Images in einem nachgelagertem Prozess auf dem Massenspeicher komprimiert, wenn nötig.
speefak hat geschrieben: ↑ zum Beitrag ↑
21.12.2021 03:44:36
Rear kann mit includiertem Backup Archiv nur direkt am Rechner ein bootfähigen USB Stick erstellen oder eben eine bootfähige ISO 9660. Mit dem Script wird eine Bootfähige ISO 9660 incl. Systembackup erstellt und auf einem Remote Host via sshfs abgelegt.
Wie bereits erwähnt, weicht dein Szenario vom reinen Desaster Recovery ab.
Ich bin mir auch sicher, dass ich Desaster Recovery und Backup nicht verbinden wollte.
Das sind 2 getrennte Prozesse auf verschiedenen Ebenen.
speefak hat geschrieben: ↑ zum Beitrag ↑
21.12.2021 03:44:36
Auf dem Quellsystem verbleiben keine Daten.
Wenn die Notwendigkeit von Desaster Recovery eintritt, sollten die Daten bereits im Backup liegen.
Das unterscheidet deine Anforderung, von einem reinem Desaster Recovery.
speefak hat geschrieben: ↑ zum Beitrag ↑
21.12.2021 03:44:36
ReaR kann zwar auch via sshfs u.a. plugins auf Remote Hosts zugreifen, allerdings erfodert jeder sshfs Aufruf in der config einen erneuten Login mit Passworteingabe am Remote Host.
Ein möglicher Lösungsansatz dieses Problem zu umgehen, wäre an sicherer Stelle, Credentials zu hinterlegen, ober mit einem Zertifikat, ohne Kennwort zu arbeiten, oder den ssh Agent zu verwenden.
Aber beachte, damit ist es auch möglich, den Host leichter zu übernehmen, wenn die Chain of Trust gebrochen ist.
speefak hat geschrieben: ↑ zum Beitrag ↑
21.12.2021 03:44:36
Ursprpünglich fand ich keine Option den Dateinamen der ReaR ISO Ausgabedatei anzupassen und hatte daher einen sshfs mount programiert, auf dem der ISO Output und die Umbennenung erfolgt. ReaR hat eine Option den Ausgabedateinamen anzupassen, aber keine Option ein Backupverzeichnis auf dem Remote Host anzulegen.
Externe ISOs ( 9660 ) und Hybrid ISOs ( also auch jene die nicht von ReaR erstellt wurden ) können mit dem Script ebenfalls in bootfähige USB Sticks konvertiert werden. Geht auch alles mit Terminal Befehlen aber das Script bietet eine Auswahl der angeschlossenen USD Sticks ( die Systempartitionen sind vor dd sicher 8) ) und eine schnelle Auswahl der ISO Dateien nach dem genauen oder Teilen des Dateinamen oder als wildcard ( ISO ) alle verfügbaren ISOs im System.
Ich denke, hier liegt ein Missverständnis vor.
Da Debianrear eine reine Desaster Recovery Lösung ist, du diese aber auch um ein Backup erweitert möchtest, ist es (wohl fast) zwangsläufig, dass du beispielsweise ein automatischen ssh mount vermisst, denn gewöhnlich liegen solche Images auf einem NFS Share, die bereits im Host des Desaster Recovery Kandidaten hängen.

Anmerkung: Deine einführenden Worte hätten besser strukturiert sein können, dass hätte mir das Lesen erleichtert.

Möglicherweise habe ich auch noch einen kleinen Fehler in deinem Skript gefunden.

Code: Alles auswählen

		BACKUP_PROG_COMPRESS_OPTIONS=( --use-compress-program=pigz )
		REQUIRED_PROGS+=( pigz )
Sollte das ein "gzip" werden?
speefak hat geschrieben: ↑ zum Beitrag ↑
21.12.2021 03:44:36
gab es hier nicht mal die Möglichkeit den Code in einem aufklappbaren Auszugsfenster darzustellen ?
Meines Wissens nach noch nie, einzig die Möglichkeit der Nutzung von NoPaste, um die Übersichtlichkeit der Beiträge zu erhalten.
Eigenbau PC: Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Desktop PC: Dell Inspiron 530 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Notebook: TUXEDO BU1406 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Alles Minimalinstallationen und ohne sudo/PA/PW.
Rootserver: Rocky Linux 9.3 - Kernel: 5.14

Freie Software unterstützen, Grundrechte stärken!

Benutzeravatar
beLI3VeR
Beiträge: 535
Registriert: 30.08.2005 16:56:43
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Re: Rear (Relax and Recover) - sämtliche Datenpfade auslagern

Beitrag von beLI3VeR » 27.03.2022 06:22:29

@speefak, danke für das Script. Hast du das vielleicht irgendwo in einer Git Repo? Würde gerne was dazu beitragen :-)
Lieben Gruß
beLI3VeR

Benutzeravatar
speefak
Beiträge: 449
Registriert: 27.04.2008 13:54:20

Re: Rear (Relax and Recover) - sämtliche Datenpfade auslagern

Beitrag von speefak » 27.03.2022 15:24:27

Blackbox hat geschrieben: ↑ zum Beitrag ↑
06.01.2022 10:51:38
Ich denke, hier liegt ein Missverständnis vor.
Da rear eine reine Desaster Recovery Lösung ist, du diese aber auch um ein Backup erweitert möchtest, ist es (wohl fast) zwangsläufig, dass du beispielsweise ein automatischen ssh mount vermisst, denn gewöhnlich liegen solche Images auf einem NFS Share, die bereits im Host des Desaster Recovery Kandidaten hängen.
NFS habe ich nie genutzt und immer SSH verwendet, denn 1. ist es eine verschlüsselte Verbindung, 2. Es muss ein Port weniger durchgeleitet werden wenn ich nfs nicht nutze und 3. denke ich das ssh einfach sicherer und besser gewartet, entwickelt wird als nfs.

Man könnte versch. SSH Lösungen verwenden aber alle habe ein Sicherheitsrisiko außer die manuelle Paßworteingabe. Darum verwende ich auf dem BackupNAS keine Keys bzw. nur paßwortgeschützte Keys und da muss eben auch bei jeder Verbindung das Passwort eingeben werden. Sinnvoller ist es einmalig das Remoteverzeichnis einzuhängen, die Prozesse abzuarbeiten und dann wieder das Remoteverzeichnis auszuhängen. SSHFS mounts wären für REAR da auch sicher nützlich.

#-------------------

Moin, noch habe ich es nicht bei GIT eingestellt, kann es aber in den nächsten 48H dort einstellen ;)

EDIT https://github.com/speefak/ReaR-folder-and-output-MOD - DONE ;)

Antworten