Die Daten-Integrität gehört zur Datensicherung,
denn es macht keinen Sinn sich Müll zu sichern.
Nur beschreiben möchte ich es an dieser Stelle nicht,
denn primär Checksummen
oder Hash-Werte ermöglichen es,
festzustellen, ob Inhalte nicht über die Zeit mutiert sind.
Um mal eben schnell einen Ordner von einen Fremdrechner zu kopieren,
kann scp
analog zu cp
verwendet werden.
Voraussetzung ist, dass
ssh
eingerichtet ist.
Also die Übertragung ist dadurch gesichert und verschlüsselt.
Anbei ein konkretes Beispiel wo der Ordner Steuer
und deren Inhalt -r
rekursiv kopiert wird:
scp -r a1@ab1.fritz.box:/mnt/sda4/a/VBoxShare/Win7/Steuer /home/a1/Downloads/
Bei scp
gibt es die Möglichkeit um von remote zu remote zu kopieren.
Die allgemeine Notation der wichtigsten Optionen:
scp [-BClrvqpP] … [usera@hosta:]filea [userb@hostb:]fileb
Option | Beschreibung |
---|---|
-B | wie Batch (keine Interaktion möglich) |
-C | wie Compressed |
-l 100 | Limit der Bandbreite z.B. auf 100 Kbits/s |
-r | wie rekursiv, kopiert Unterverzeichnisse |
-v | verbose, gesprächiger |
-q | quit der Fortschrittsanzeige |
-p | preserve der Zeit und Mode |
-P 22 | Port 22 ist der Default Port, kann aber ggf. geändert werden. |
Zum Anfang
Professioneller kann man zum Kopieren
oder Synchronisieren ganzer Ordner über das Netz rsync
verwenden.
Die Variante über einen rsync daemon, ist noch einen Tick schneller,
aber betrachte ich hier nicht.
Entweder Start oder Ziel müssen allerding lokal sein.
Von remote zu remote funktioniert laut man-page man rsync
leider nicht.
Dafür ist rsync
im Gegensatz zu scp
effizienter beim Kopieren.
Falls die Dateien bereits vorhanden sind,
werden lediglich die unterschiedlichen Passagen kopiert.
Verschlüsselung und Fortsetzung nach Verbindungsabrüchen
kann rsync
ebenso.
Der allgemeine Aufruf lautet:
rsync [optionen] source [destination]
Entweder "source" oder "destination" können extern sein.
z.B. [benutzer]@host:/pfad/
wichtig ist hier der letzte Slash "/"
Die wichtigsten Optionen habe ich hier raus geschrieben.
Meist führen die Anfangs-Buchstaben zur englischen Bezeichnung.
Option | Beschreibung -a |
---|---|
-a | archvieren, enthält -rlptgoD |
-r | recursiv, kopiert Unterverzeichnisse mit |
-l | symbolische Links werden kopiert |
-p | preserve permission, behält Rechte der Quelldatei bei |
-t | preserve mod. times, behält Zeitstempel der Quelldatei bei |
-g | preserve group, behält Gruppenrechte bei |
-o | preserve owner (nur als root), Name:Gruppe der Quelldatei beibehalten |
-D | preserve device files (root only), Geräte beibehalten z.B. /dev/sda3 |
Option | Datei-Optionen |
---|---|
-u | do not overwrite new with old überschreibt im Ziel nur ältere, aber nicht neuere Dateien. |
--ignore-existing | überschreibt keine exitierenden Dateien, auch wenn sie älter als die Quell-Datei sind. |
--exclude= | z.B. --exclude=Downloads/* aus der Quelle wird Downloads ausgelassen |
--exclude-from= | z.B. --exclude-from=excl.txt In excl.txt steht was ausgelassen wird. |
--delete | löscht im Ziel, was in der Quelle nicht mehr vorkommt |
-b | Backup erstellen, von dem, was mit --delete erfasst wird. Umleitung via Zusatzparameter --backup-dir= |
--link-dest= | Sind im äteren Backup bereits aktuelle Quelldateien vorhanden, wird lediglich ein Hardlink ins Ziel geschrieben. z.B. --link-dest=BackupAlt |
--remove-source-files | wie mv Quelle wird gelöscht |
-z | zip oder compress, meist Sinnvoll bei Übertragung übers Netzwerk |
--bwlimit | reduziert die Bandbreite auf ein definiertes Maß z.B. 100 kbps --bwlimit=100 |
-c | verwendet eine Checksumme, statt statt Dateigrösse & Zeitstempel Diese Option benötigt wesentlich mehr Zeit. |
--iconv local,remote | Konvertierung z.B. NFTS → EXT4 wg. Umlaute z.B. für Windows ISO-8859-1 --ivonv=UTF-8,CP1252 NTFS verwendet Unicode UTF-16, FAT verwendet Code Page 437 wird normalerweise via mounten erledigt. |
Option | Anzeige-Optionen & div. |
---|---|
-v | verbose, gesprächiger - zeigt alle Arbeitsschritte an |
--stats | zeigt einen Report am Ende an |
-P | enthält Fortschrittsanzeige --progress und ermöglicht Fortsetzung bei Abbruch --partial |
--progress | eine Fortschrittsanzeige in der Form … (xfr#185, ir-chk=1617/1803) Hier: 185 fertige Dateien, 1617 noch offene, von 1803 1617/1803 kann sich im Laufe der Zeit noch vergrößern... |
--partial | behalte teilweise übertragene Dateien im Falle eines Verbindungsabruches |
-C | auto-ignore files in the same way CVS does |
-e | remote shell auswählen z.B. ssh verschlüsselte Übertragung |
Es gibt noch weitaus mehr Optionen, aber das sind zumindest die wichtigsten.
Zumindest bei Debian ist es standardmäßig nicht installiert, was schnell nachgeholt werden kann.
su rsync sollte sowohl auf dem Host apt install rsync alsauch auf dem Client installiert sein
Zum Anfang
Da es nicht unbedingt sinnvoll ist sein Backup im gleichen Gebäude zu haben,
sichere ich ab und an (leider zu selten - alle paar Monate),
die wichtigsten selbst erstellten Daten auf eine, via USB angeschlossene, externe Platte.
Da der Vorgang länger dauert, verwende ich rsync -Pa
.
Vor der Kopier-Aktion suche ich mit fdisk
meine Ziel-Partition.
Dann mounte ich die Ziel-Partition via Thunar oder wie folgt.
Bereits beschrieben habe ich weitere
Mount-Möglichkeiten.
su /usr/sbin/fdisk -l Disk /dev/sdb: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors Device Boot Start End Sectors Size Id Type /dev/sdb1 * 2048 25188351 25186304 12G 83 Linux /dev/sdb2 25192446 3907022847 3881830402 1.8T 5 Extended /dev/sdb5 25192448 3907022847 3881830400 1.8T 83 Linux cd /mnt mkdir temp mount -t auto /dev/sdb5 temp rsync -Pa /home/a1 /mnt/temp/ rsync -Pa /mnt/sda3/a0 /mnt/temp/ cd temp mv a1 a1_2021-12-25 mv a0 a0_2021-12-25
In diesem Beispiel sind alle Pfade absolut, relative Pfade sind aber ebenso möglich.
Bei der nächsten Sicherung auf eine externe Platte verwende ich eine zweite.
Und beim folgenden Mal überschreibe ich vollständig wieder die erste.
Das entspricht zwar nicht ganz der 3-2-1 Regel, betrachte ich aber als ausreichend.
Zum Anfang
Im ersten Fall kopiere ich unter den jeweiligen Benutzern a1
und b1
die entsprechenden Home-Verzeichnisse in einen temporären Ordner des neuen Rechners.
Dies ist z.B. Voraussetzung für einen Umzug auf einen neuen Rechner.
Also zwei Verzeichnisse /home/a1
und /home/b1
werden von einem Fremdrecher kopiert.
Auch bei einer Rücksicherung würde ich ähnlich vorgehen.
Also erst einmal in einen temporären Ordner rücksichern und dann
die benögten Ordner verschieben oder kopieren.
su b1 rsync -avze ssh b1@ab1.fritz.box:/home/b1 /home/b1/b1_alt ... sent 634,872 bytes received 13,015,667,422 bytes 2,737,104.89 bytes/sec total size is 27,130,082,588 speedup is 2.08
Da der Slash / am Ende der Quell-Datei vergessen wurde, wird folgendes erzeugt:
/home/b1/b1_alt/b1/Inhalt_von_b1
su a1 rsync -avze ssh a1@ab1.fritz.box:/home/a1/ /home/a1/a1_alt
Ein Slash am Ende der Quell-Datei erzeugt folgendes /home/a1/a1_alt/Inhalt_von_a1,
was wohl eher erwünscht ist.
Im zweiten Fall kopiere ich von einer auf dem Remote-Rechner gemounteten Platte.
Mit den folgenden Zeilen werden vom Fremdrecher die vier Verzeichnisse
/mnt/sda4/a
, /mnt/sda4/b
, /mnt/sda4/ISO
und
/mnt/sda4/_temp2
kopiert.
Da der folgende Vorgang länger dauert, habe ich bzgl. Verbindungsabbrüchen vorgesorgt.
Des weiteren wird über den Fortschritt informiert.
su b1 rsync --progress -avze ssh b1@ab1.fritz.box:/mnt/sda4/b/ /mnt/sda3/b0/b_alt su a1 rsync --progress -avze ssh a1@ab1.fritz.box:/mnt/sda4/a/ /mnt/sda3/a0/a_alt rsync -Pacvze ssh a1@ab1.fritz.box:/mnt/sda4/ISO/ /mnt/sda3/a0/ISO_alt rsync -Pavze ssh a1@ab1.fritz.box:/mnt/sda4/_temp2/ /mnt/sda3/a0/_temp2
Auch wenn hier nur kopiert wurde, so ist rsync
dem klassischen Kopieren via scp
überlegen
und sollte daher bevorzugt werden.
Zum Anfang
Mit entsprechender Option lassen sich auch Daten verschieben.
rsync -acvze ssh --stats --remove-source-files ~/passwortliste2022-04-01.txt m@gj2.fritz.box:~/.ssh/ Enter passphrase for key '/home/a1/.ssh/id_rsa': bash: rsync: command not found rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(235) [sender=3.1.3]
Da ich versäumt habe auf dem remote-System rsync
zu installieren, gibt es eine Fehlermeldung.
Entscheidend ist, das bei Nicht-Erfolg, die Daten-Quelle nicht gelöscht wird.
Nachdem ich rsync
installiert habe, funktioniert es.
rsync -acvze ssh --stats --remove-source-files ~/passwortliste2022-04-01.txt m@gj2.fritz.box:~/.ssh/ Enter passphrase for key '/home/a1/.ssh/id_rsa': sending incremental file list passwortliste2022-04-01.txt Number of files: 1 (reg: 1) Number of created files: 0 Number of deleted files: 0 Number of regular files transferred: 1 Total file size: 111 bytes Total transferred file size: 111 bytes Literal data: 111 bytes Matched data: 0 bytes File list size: 0 File list generation time: 0.001 seconds File list transfer time: 0.000 seconds Total bytes sent: 202 Total bytes received: 43 sent 202 bytes received 43 bytes 28.82 bytes/sec total size is 111 speedup is 0.45
Gefährlich ist rsync
in dem Sinne,
dass ohne Warnung die bereits vorhandene Ziel-Datei überschrieben wurde.
linuxfocus.org
Rsync: Das beste Backupsystem
shellbefehle.de
rsync — remote (und local) file-copying tool
ubuntuusers.de
rsync
ctaas.de
rsync Backup Script
die.net
rsync(1) - Linux man page
samba.org
rsync
linuxhandbook.com
Practical Examples of rsync Command in Linux
Zum Anfang
Um das Backup zu vereinfachen, habe ich mir ein paar Scripte geschrieben.
Die Scripte befindet sich auf dem Backup Rechner und könnten via cron
gestartet werden.
Da es möglichst automatisiert laufen sollte, ist ein Zugriff via
ssh & Public-key
sinnvoll.
#!/bin/sh # backup funktion definieren backup () { # rsync -avze ... 25.11.19 v gelöscht # rsync -PSaHAXxze ssh --exclude-from=exclude.txt --log-file=rsync.log --delete --link… # ZIEL_0 ob nun a.0 oder a.0/ Ergebnis landet in .../a.0/a/... # ZIEL_1 ob nun a.1 oder a.1/ ist egal! # QUELLE ok ist /home/hd1/a nicht ok ist /home/hd1/a/ DATUM=`date "+%F %T"` echo "\n $DATUM --- Start $ZIEL_1 " echo "\n $DATUM --- Start $ZIEL_1 " >> "$LOGFILE" # logfile anhängen rsync -aze ssh --exclude-from="$EXCLUSE" --delete --link-dest="$ZIEL_1" "$QUELLE" "$ZIEL_0" >> "$LOGFILE" 2>&1 if [ $? = 0 ] then rm -rf "$ZIEL_4" mv "$ZIEL_3" "$ZIEL_4" mv "$ZIEL_2" "$ZIEL_3" mv "$ZIEL_1" "$ZIEL_2" mv "$ZIEL_0" "$ZIEL_1" DATUM=`date "+%F %T"` echo "\n $DATUM --- Ende $ZIEL_1 \n ---------" echo "\n $DATUM --- Ende $ZIEL_1 \n ---------" >> "$LOGFILE" else DATUM=`date "+%F %T"` echo "\n $DATUM --- Fehler $ZIEL_0 \n ---------" echo "\n $DATUM --- Fehler $ZIEL_0 \n ---------" >> "$LOGFILE" fi } # ----------------------------------------------------------------- cd /home/m/backup EXCLUSE=/home/m/backup/exclude.txt # touch $EXCLUSE # falls fehlt, anlegen LOGFILE=/home/m/backup/rsync.log # # ohne / abschließen QUELLE=a1@b41:/mnt/sda3/a0 # QUELLE=a1@b41:/home/a1 # QUELLE=b1@b41.fritz.box:/mnt/sda3/b0 # QUELLE=b1@b41.fritz.box:/home/b1 # QUELLE=a1@b41.fritz.box:/mnt/sda3/ISO Ziel=/home/m/backup/a0. # ZIEL_0=/home/m/backup/a0.0 # a1.0 b0.0 b1.0 is0.0 ZIEL_1=/home/m/backup/a0.1 # a1.1 ZIEL_2=/home/m/backup/a0.2 # a1.2 ZIEL_3=/home/m/backup/a0.3 # a1.3 ZIEL_4=/home/m/backup/a0.4 # a1.4 backup
Zunächst definiere ich ein paar Pfade.
Wobei meine externe Quelle
, ein remote erreichbarer Rechner, ist.
Alle übrigen Ziele, Logfile, exclude.txt etc. liegen lokal auf dem Backup-Rechner.
Wie man am Ziel_0..4 erkennen kann, heißt das aktuellste Backup ZIEL_0
und das älteste ZIEL_4
.
In der Datei exclude.txt
steht zur Zeit nicht viel.
Möglich sind reguläre Ausdrücke.
- .local/share/Trash - .cache
Nach den Pfad-Definitionen rufe ich innerhalb des Skriptes die Funktion backup()
auf.
Hier schreibe ich zunächst ins Logfile meine Start-Zeit.
Danach rufe ich den rsync
-Befehl auf, welcher ein inkrementelles Backup erzeugt.
Beim inkrementellen Backup wird in Ziel_1
zunächst geguckt ob der Inhalt bereits vorhanden ist.
Existiert der Inhalt bereits, wird in Ziel_0
ein symbolscher Link auf einen sog. Inode gesetzt.
Existiert der Inhalt noch nicht oder wurde geändert oder verschoben, wird eine neue Datei erzeugt.
Die Inhalte aller nicht veränderten Dateien liegen also nur einmal im Backupsystem und verbrauchen nicht unnötig Platz.
Sollte es mit den sync
Probleme geben, wird das zum Einen in die Logdatei geschrieben
und zum Anderen wird das Script nicht fortgesetzt.
Das bedeutet, ein wiederholter Aufruf des Skriptes, setzt den Vorgang mit ZIEL_0
fort,
bis erfolgreich alle Daten gespeichert wurden.
Erst danach wird das letzte Backup gelöscht und die Namen der Backups geändert.
ZIEL_0 > ZIEL_1 > ZIEL_2 > ZIEL_3 > ZIEL_4
Anbei ein Auszug der Logdatei.
--------- 2022-03-22 08:40:08 --- Start /home/m/backup/a0.1 Warning: Permanently added the ECDSA host key for IP address '2a01:c13:…' to the list of known hosts. 2022-03-22 08:46:11 --- Start /home/m/backup/a1.1 2022-03-22 08:48:15 --- Ende /home/m/backup/a1.1 --------- 2022-03-22 08:50:18 --- Start /home/m/backup/b1.1 2022-03-22 08:51:20 --- Ende /home/m/backup/b1.1 --------- 2022-03-22 08:52:06 --- Start /home/m/backup/b0.1 2022-03-22 09:13:26 --- Ende /home/m/backup/b0.1 --------- 2022-03-22 10:37:11 --- Ende /home/m/backup/a0.1 ---------
Man kann hoffentlich gut erkennen das das erste Skript erst fertig wurde,
nachdem 3 weitere Skripte bereits durchgelaufen waren.
Um die Backup-Scripte nicht immer händisch starten zu müssen,
kann man sie sich via
cron
-Befehl regelmäßig automatisch starten.
Zum Anfang
BackupPC könnte interessant sein, wenn auch Windows-Rechner gesichert werden sollen.
Die Installation über z.B. Synaptic
erfolgt auf dem Rechner, wohin gesichert werden soll.
Über das CLI ist folgendes einzugeben.
apt-get install backuppc apt-get install par2 Datei Überprüfung und Reparatur apt-get install cifs-utils SMB/CIFS Protokoll
Nun wird zunächst alles gestoppt um die Konfiguration richtig zu setzen.
su /etc/init.d/backuppc stop /etc/init.d/backuppc start
BackupPC kann mit seiner Web-Oberfläche verwaltet werden:
Meist funktioniert das bereits über den Namen der unverschlüsselten Seite.
Dafür wurde ein Benutzer namens »backuppc« mit z.B. »JUCJxuPS« als Passwort eingerichtet.
Sie können dieses Passwort durch das Kommando htpasswd /etc/backuppc/htpasswd backuppc
ändern.
su htpasswd /etc/backuppc/htpasswd backuppc New password: Re-type new password: Updating password for user backuppc
Die Sicherung auf dem Host geschieht auf /var/lib/backuppc
.
Daher ist es sinnvoll den Ordner zu verschieben und eine Verküpfung einzurichten.
Alternativ wird ein LVM empfohlen, was ich allerdings nicht mache.
su /home/hd2/backuppc cp -a /var/lib/backuppc/* /home/hd2/backuppc mv /var/lib/backuppc /var/lib/backuppc_old oder rm -rf /var/lib/backuppc mkdir /var/lib/backuppc ln -s /home/hd2/backuppc/ /var/lib/packuppc
Die Hauptkonfiguration befindet sich in /etc/backuppc/config.pl
.
Zu guter Letzt, muß der zuvor gestoppte Service wieder gestartet werden.
/etc/init.d/backuppc restart
howtoforge.de
Sichern von Linux und Windows Systemen mit BackupPC
pro-linux.de
BackupPC als Backupserver im Heimnetzwerk
digitalocean.com
How To Use BackupPC to Create a Backup Server on an Ubuntu 12.04 VPS
kifarunix.com
Install and Configure BackupPC on Debian 10
Zum Anfang
FreeFileSync wäre eine graphische Alternative, welche auf verschiedenen Plattformen wie
Windows, Linux und MAC läuft.
freefilesync.org
FreeFileSync - Open Source File Synchronization
UrBackup wäre ebenso eine graphische Alternative, welche auf verschiedenen Plattformen Läuft.
UrBackup ist primär für Windows ausgelegt, kann aber auch auf Linux verwendet werden.
urbackup.org
UrBackup is an Open Source client/server backup
krausens-online.de
UrBackup: Sicherung über das Internet
heise.de
Linux-Backup anlegen - so klappt's - Back In Time
Es ist gedacht es lokal zu benutzen auf Gnome oder KDE, läuft aber auch mit z.B. Xfce zusammen.
cis.upenn.edu
Unison File Synchronizer
linuxandubuntu.com
Best Linux Backup Software For Desktops And Servers [2022]
Timeshift (For desktops), Cloudberry (For desktops & enterprise servers) $29.99,
Bacula (For enterprise), Rsync (For desktops & servers)
sourceforge.net
luckyBackup
opbyte.it
Grsync
ctaas.de
ntfs_backup
giga.de
Timeshift und Grsync
Zum Anfang