know-how:backup
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision | ||
know-how:backup [2020/03/29 14:36] – [borg - hetzner storage] cc | know-how:backup [2024/02/19 09:59] – [borg - generell] cc | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Prinzipien ====== | ||
+ | * Generelle Punkte unabhängig von der eingesetzten Lösung | ||
+ | * Diese Fragen sind essentiell für eine funktionierende Backup/ | ||
+ | |||
+ | * Hast du eine Backup Lösung ? | ||
+ | * Wurde definiert welche Daten das Backup beinhalten soll ? | ||
+ | * Werden bestimmte Zustände deiner Daten zu bestimmten Zeitpunkten festgehalten ? | ||
+ | * Wurde definiert wie lange bestimmte Zustände für ein Restore verfügbar sein müssen ? | ||
+ | * Gibt es gesetzliche Verpflichtungen für die Dauer der Aufbewahrung und Qualität der Backups ? | ||
+ | * Wo liegen die Backup Daten physikalisch ? | ||
+ | * Wie wird der Raum in dem sich die Daten physikalisch befinden gesichert ? | ||
+ | * Sind die Daten gegen Diebstahl / Blitzschlag / Überschwemmungen gesichert ? | ||
+ | * Was passiert bei Ereignissen **" | ||
+ | * Gibt es zumindest einen 2. Standort deiner Backup Daten ? | ||
+ | * Ist es möglich die Integrität des Backups zu überprüfen ? | ||
+ | * Wurde schon einmal ein Restore durchgeführt ? | ||
+ | * Kannst du selbstständig einen Restore durchführen ? | ||
+ | * Wie lange hat der Restore gedauert ? | ||
+ | * Welche Softwarelösungen zB: Betriebssystem / Basis werden für den Restore benötigt ? | ||
+ | * Welche Lizenzen werden benötigt um einen Restore durchzuführen ? | ||
+ | |||
+ | |||
====== Windows ====== | ====== Windows ====== | ||
* Windows Sicherung muss installiert sein | * Windows Sicherung muss installiert sein | ||
* Generiert VHDX Datein die gemountet werden können | * Generiert VHDX Datein die gemountet werden können | ||
+ | |||
+ | |||
===== Externer SAMBA Server rotierend ===== | ===== Externer SAMBA Server rotierend ===== | ||
Zeile 86: | Zeile 110: | ||
exit | exit | ||
</ | </ | ||
+ | |||
===== Hyper-V Guests auf Festplatte rotierend ===== | ===== Hyper-V Guests auf Festplatte rotierend ===== | ||
Zeile 114: | Zeile 139: | ||
echo " | echo " | ||
</ | </ | ||
+ | |||
+ | |||
+ | ===== Restore mit Windows Boardmitteln ===== | ||
+ | * Über zB: Windows 10 iso / reparieren / System Image wiederherstellen / Im Netzwerk suchen | ||
+ | * Windows kann grundsätzlich vhdx Dateien als virtuelle Datenträger einbinden zB: über die " | ||
+ | * **Achtung** | ||
+ | * BIOS/UEFI beachten | ||
+ | * Ziel Datenträger muss mindestens gleich groß /größer sein (think thin Provisioning für restore) | ||
+ | * Format für die Eingabe von Benutzername: | ||
===== Duplicati 2 - verschlüsseltes Cloud Backup ===== | ===== Duplicati 2 - verschlüsseltes Cloud Backup ===== | ||
Zeile 183: | Zeile 217: | ||
append initrd=urbackup/ | append initrd=urbackup/ | ||
</ | </ | ||
+ | |||
+ | |||
+ | * **Migration** von Urbackup Server Installation **ohne Backupdaten** jedoch mit Einstellungen von altem System (2016 Standard) auf neues System (2019 Standard) | ||
+ | * Installation gleiche Serverversion wie auf "altem System" | ||
+ | * Deaktivieren und beenden von Urbackup Server Dienst auf altem und neuem System | ||
+ | * Kopieren von C: | ||
+ | * Verzeichnis / Laufwerk für Backup wie auf altem System auf neuem System erstellen | ||
+ | * Urbackup Server Dienst wieder starten -> sobald die Clients im Web Menü sichtbar werden - vollständige Abbildsicherung auslösen / IP vom alten System muss **nicht** übernommen werden | ||
+ | ===== Altaro ===== | ||
+ | * Altaro 8 - **nw.js** Screen / Windows 2019 Standard (https:// | ||
+ | * **Ausloggen** und neu einloggen / beim Check von **%Temp%** existiert das Verzeichnis nicht mehr | ||
+ | |||
+ | * Bei den Einstellungen VSS Copy beachten bei virtuellen Domain Controllern ! | ||
+ | * Scheduled Test Restores einrichten und die Daten des Backups regelmäßig überprüfen lassen | ||
+ | * Notifications per E-Mail konfigurieren / für den Fall dass sie nicht funktioniert haben | ||
+ | ====== HP Aruba ====== | ||
+ | * Für Cronjob siehe "HP Pro Curve" | ||
+ | * SSH Server Keys müssen bereits " | ||
+ | * **backup-aruba.expect** | ||
+ | < | ||
+ | # | ||
+ | |||
+ | set timeout 60 | ||
+ | |||
+ | log_user 0 | ||
+ | |||
+ | spawn ssh USERNAME@[lindex $argv 0] | ||
+ | |||
+ | |||
+ | expect " | ||
+ | send " | ||
+ | |||
+ | #2021-02-08 cc: think wisely if you want to send password as argument to call | ||
+ | #send " | ||
+ | |||
+ | expect " | ||
+ | |||
+ | send " | ||
+ | |||
+ | expect "#" | ||
+ | |||
+ | send " | ||
+ | |||
+ | expect "#" | ||
+ | |||
+ | log_user 1 | ||
+ | |||
+ | send "show config\r" | ||
+ | |||
+ | expect "#" | ||
+ | |||
+ | |||
+ | send " | ||
+ | |||
+ | expect ">" | ||
+ | |||
+ | send " | ||
+ | |||
+ | expect "?" | ||
+ | |||
+ | send " | ||
+ | |||
+ | expect eof | ||
+ | |||
+ | </ | ||
+ | ====== HPE Comware | ||
+ | * Für Cronjob siehe "HP Pro Curve" | ||
+ | * SSH Server Keys müssen bereits " | ||
+ | * **backup-hp-comware-switches.expect** | ||
+ | |||
+ | < | ||
+ | # | ||
+ | |||
+ | set timeout 60 | ||
+ | |||
+ | spawn ssh admin@[lindex $argv 0] | ||
+ | |||
+ | expect " | ||
+ | send " | ||
+ | #2021-02-08 cc: think wisely if you want to send password as argument to call | ||
+ | #send " | ||
+ | |||
+ | expect ">" | ||
+ | |||
+ | send " | ||
+ | |||
+ | expect " | ||
+ | |||
+ | send " | ||
+ | |||
+ | expect " | ||
+ | |||
+ | send " | ||
+ | |||
+ | expect ">" | ||
+ | |||
+ | send " | ||
+ | |||
+ | expect ">" | ||
+ | |||
+ | send "show current-configuration\r" | ||
+ | |||
+ | expect ">" | ||
+ | |||
+ | send " | ||
+ | </ | ||
+ | |||
====== HP Pro Curve ====== | ====== HP Pro Curve ====== | ||
* **Achtung** Sicherheitsimplikationen bei **telnet** beachten (Übertragung des passworts über plaintext) | * **Achtung** Sicherheitsimplikationen bei **telnet** beachten (Übertragung des passworts über plaintext) | ||
Zeile 201: | Zeile 342: | ||
set ip_address [lindex $argv 0]; | set ip_address [lindex $argv 0]; | ||
set prompt "#" | set prompt "#" | ||
- | set username "USERNAME_SWITCHES\r" | + | set username "USERNAME\r" |
- | set password "PASSWORD_SWITCHES\r" | + | set password "PASSWORD\r" |
log_user 0 | log_user 0 | ||
Zeile 211: | Zeile 352: | ||
send $password | send $password | ||
expect $prompt | expect $prompt | ||
- | | + | send " |
- | | + | |
expect $prompt | expect $prompt | ||
- | | + | set timeout 120 |
log_user 1 | log_user 1 | ||
send "show config\r" | send "show config\r" | ||
expect $prompt | expect $prompt | ||
- | | + | set timeout 20 |
- | # Sending ' | + | |
send " | send " | ||
+ | expect ">" | ||
+ | send " | ||
+ | expect "?" | ||
+ | send " | ||
expect eof | expect eof | ||
+ | |||
</ | </ | ||
Zeile 319: | Zeile 463: | ||
</ | </ | ||
+ | * **backup-lvm-files.sh** | ||
+ | * Um einen LVM Snapshot read only zu mounten und dann per RSYNC mit einem Verzeichnis zu syncen / kann mit rsnapshot backup_exec kombiniert werden | ||
+ | < | ||
+ | #!/bin/bash | ||
+ | |||
+ | |||
+ | function bailout () | ||
+ | { | ||
+ | |||
+ | echo -e " | ||
+ | |||
+ | [ -z " | ||
+ | |||
+ | exit 2 | ||
+ | |||
+ | } | ||
+ | |||
+ | function usage () | ||
+ | { | ||
+ | echo -e " | ||
+ | exit 1 | ||
+ | |||
+ | |||
+ | } | ||
+ | |||
+ | RSYNC_DEFAULT_OPTIONS=" | ||
+ | |||
+ | RSYNC_DEFAULT_OPTIONS_ARRAY=($RSYNC_DEFAULT_OPTIONS) | ||
+ | |||
+ | ARGUMENTS=$# | ||
+ | SIZE_SNAPSHOT=" | ||
+ | BUFFER=" | ||
+ | |||
+ | TMP_MOUNT_POINT="/ | ||
+ | |||
+ | which lvcreate > /dev/null || bailout " | ||
+ | which lvremove > /dev/null || bailout " | ||
+ | which rsync > /dev/null || bailout "rsync not found" | ||
+ | which kpartx > /dev/null || bailout " | ||
+ | which mount > /dev/null || bailout "mount not found" | ||
+ | which mountpoint > /dev/null || bailout " | ||
+ | |||
+ | |||
+ | if [ $ARGUMENTS != 2 ] && | ||
+ | then | ||
+ | |||
+ | bailout " | ||
+ | |||
+ | fi | ||
+ | |||
+ | LVM_PATH=" | ||
+ | BACKUP_DIRECTORY=" | ||
+ | RSYNC_CUSTOM_OPTIONS=" | ||
+ | |||
+ | [ -n " | ||
+ | |||
+ | |||
+ | [ ! -r $LVM_PATH ] && bailout "FAIL: Cannot read $LVM_PATH VOLUME" | ||
+ | |||
+ | [ ! -d $BACKUP_DIRECTORY ] && bailout "FAIL: $BACKUP_DIRECTORY is already here aborting" | ||
+ | |||
+ | [ ! -d $TMP_MOUNT_POINT ] && bailout "FAIL: $TMP_MOUNT_POINT directory not found" | ||
+ | |||
+ | mountpoint -q $TMP_MOUNT_POINT && bailout "FAIL: $TMP_MOUNT_POINT is already mounted FAIL" | ||
+ | |||
+ | LVM_NAME=$(echo ${LVM_PATH## | ||
+ | |||
+ | LVM_NAME_SNAPSHOT=" | ||
+ | |||
+ | LVM_PATH_SNAPSHOT=" | ||
+ | |||
+ | [ -r $LVM_PATH_SNAPSHOT ] && bailout "FAIL: Snapshot: $LVM_PATH_SNAPSHOT already here aborting" | ||
+ | |||
+ | lvcreate -L $SIZE_SNAPSHOT -s -n $LVM_NAME_SNAPSHOT $LVM_PATH > /dev/null || bailout "FAIL: Could not create Snapshot: $LVM_NAME_SNAPSHOT" | ||
+ | |||
+ | |||
+ | [ $? == " | ||
+ | |||
+ | |||
+ | MOUNT_PATH=" | ||
+ | |||
+ | DEVICE_MAPPER_ENTRY=$(kpartx -av $LVM_PATH_SNAPSHOT) | ||
+ | |||
+ | RETURN_SUCCESS=$? | ||
+ | |||
+ | [ $? != " | ||
+ | |||
+ | DEVICE_MAPPER_ENTRY=$(echo $DEVICE_MAPPER_ENTRY | cut -f 3 -d" ") | ||
+ | |||
+ | [ -z $DEVICE_MAPPER_ENTRY ] || MOUNT_PATH="/ | ||
+ | |||
+ | |||
+ | mount -o ro " | ||
+ | |||
+ | |||
+ | rsync " | ||
+ | |||
+ | RETURN_RSYNC=$? | ||
+ | |||
+ | umount $TMP_MOUNT_POINT | ||
+ | |||
+ | kpartx -dv $LVM_PATH_SNAPSHOT > /dev/null | ||
+ | |||
+ | lvremove -q -f $LVM_PATH_SNAPSHOT > /dev/null | ||
+ | |||
+ | exit $RETURN_RSYNC | ||
+ | </ | ||
* **integ.sh** | * **integ.sh** | ||
Zeile 471: | Zeile 722: | ||
===== borg - generell | ===== borg - generell | ||
* Backup Tests mit borg - Achtung **unverschlüsselt** da Testgerät ohnehin **vollverschlüsselt** ist | * Backup Tests mit borg - Achtung **unverschlüsselt** da Testgerät ohnehin **vollverschlüsselt** ist | ||
+ | * Ganze LVM Devices basierend auf Snapshot backupppen - sollte konsistent sein **backup-lvm-drive-borg.sh** | ||
+ | < | ||
+ | #!/bin/bash | ||
+ | |||
+ | function bailout () | ||
+ | { | ||
+ | |||
+ | echo -e " | ||
+ | exit 2 | ||
+ | |||
+ | } | ||
+ | |||
+ | function usage () | ||
+ | { | ||
+ | echo -e " | ||
+ | exit 1 | ||
+ | |||
+ | |||
+ | } | ||
+ | |||
+ | # LVM PATH / generate LVM snapshot name suffix snapshot / compress devices / output PATH | ||
+ | |||
+ | ARGUMENTS=$# | ||
+ | SIZE_SNAPSHOT=" | ||
+ | BORG_NR_TO_KEEP=" | ||
+ | |||
+ | which lvcreate > /dev/null || bailout " | ||
+ | which borg > /dev/null || bailout "borg cannot be found" | ||
+ | which lvremove > /dev/null || bailout " | ||
+ | |||
+ | [ $ARGUMENTS -lt 2 ] && bailout " | ||
+ | |||
+ | BACKUP_REPOSITORY=$(echo $1 | cut -d: -f 1) | ||
+ | |||
+ | [ -r $BACKUP_REPOSITORY ] || bailout "FAIL: $BACKUP_REPOSITORY cannot be read" | ||
+ | |||
+ | [ -w $BACKUP_REPOSITORY ] || bailout "FAIL: $BACKUP_REPOSITORY cannot be written to" | ||
+ | |||
+ | for i in " | ||
+ | |||
+ | LVM_PATH=" | ||
+ | LVM_PATH_SNAPSHOT=" | ||
+ | | ||
+ | [ ! -r $LVM_PATH ] && bailout "FAIL: Cannot read \" | ||
+ | [ -r $LVM_PATH_SNAPSHOT ] && bailout "FAIL: Attention snapshot still there: $LVM_PATH_SNAPSHOT" | ||
+ | done | ||
+ | |||
+ | lvm_snapshots="" | ||
+ | |||
+ | for i in " | ||
+ | |||
+ | LVM_PATH=" | ||
+ | LVM_PATH_SNAPSHOT=" | ||
+ | | ||
+ | lvcreate -L $SIZE_SNAPSHOT -s -n $LVM_PATH_SNAPSHOT $LVM_PATH > /dev/null || bailout "FAIL: Could not create Snapshot: $LVM_NAME_SNAPSHOT" | ||
+ | lvm_snapshots=" | ||
+ | done | ||
+ | |||
+ | borg create --stats --compression=lz4 --read-special " | ||
+ | |||
+ | RET_CODE_BORG=" | ||
+ | |||
+ | for i in " | ||
+ | |||
+ | LVM_PATH=" | ||
+ | LVM_PATH_SNAPSHOT=" | ||
+ | |||
+ | lvremove -q -f $LVM_PATH_SNAPSHOT >/ | ||
+ | done | ||
+ | |||
+ | borg prune --keep-last $BORG_NR_TO_KEEP $BACKUP_REPOSITORY | ||
+ | |||
+ | exit $RET_CODE_BORG | ||
+ | |||
+ | </ | ||
+ | |||
* Durchgeführt auf Kali Linux - Debian Testing | * Durchgeführt auf Kali Linux - Debian Testing | ||
< | < | ||
Zeile 594: | Zeile 921: | ||
export BORG_PASSPHRASE=" | export BORG_PASSPHRASE=" | ||
- | REPOSITORY=" | + | REPOSITORY=" |
DIRECTORIES="/ | DIRECTORIES="/ | ||
Zeile 606: | Zeile 933: | ||
echo -e " | echo -e " | ||
+ | #2020-04-08 cc: Achtung sonst konsumiert er den gesamten Upload und die Leitung steht daher: Rate limit ~6 Mbit upload / bei 10Mbit verfügbarem Upload | ||
- | borg create --compression lz4 --stats | + | borg create --compression lz4 --stats |
Zeile 823: | Zeile 1151: | ||
===== etc ===== | ===== etc ===== | ||
* rsync für blockdevices Kopieren " | * rsync für blockdevices Kopieren " | ||
+ | * **Update** | ||
+ | < | ||
+ | rsync (3.2.0-1) unstable; urgency=low | ||
+ | |||
+ | This latest release changed two parameters which used to be present on the | ||
+ | Debian packaging of rsync as upstream now integrated the patches. | ||
+ | |||
+ | Previous parameter: | ||
+ | --copy-devices: | ||
+ | Is now called: --write-devices | ||
+ | </ | ||
+ | |||
+ | |||
< | < | ||
Zeile 848: | Zeile 1189: | ||
sent 1,009,903 bytes received 505,075 bytes 5,439.78 bytes/sec | sent 1,009,903 bytes received 505,075 bytes 5,439.78 bytes/sec | ||
</ | </ | ||
+ | |||
+ | |||
+ | * rsync - Ausgabe ob etwas geändert werden würde - dry run und count | ||
+ | * **rsync -iaun --delete foo1/ foo2/ | wc -l** | ||
+ | < | ||
+ | 0 | ||
+ | </ | ||
+ |
know-how/backup.txt · Zuletzt geändert: 2024/04/30 13:10 von cc