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"
![Wink ;)](./images/smilies/icon_wink.gif)
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
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
![Thumbs Up :THX:](./images/smilies/thumbup.gif)
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
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 :facepalm:](./images/smilies/icon_ochmann.gif)
)
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 Evil :twisted:](./images/smilies/icon_twisted.gif)
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