Skip to main content

rsync

https://wiki.ubuntuusers.de/rsync/ 

Installation

sudo apt install rsync

Parameter

-z für komprimieren

-e für ssh-key

Kommandos

Einfaches Backup

rsync -av /srv/app-data /srv/app-data-backup-$(date "+%d-%m-%G")

Sync zu entfernten Rechner (-z Komprimierung; bei langsamen Verbindungen sinnvoll)

rsync --numeric-ids -avz --progress QUELL-ORDNER BENUTZER@ZIEL-PC:/Pfad/

löschen alter Dateien im Ziel-Ordner

rsync --numeric-ids -avz --progress --delete QUELL-ORDNER BENUTZER@ZIEL-PC:/Pfad/

Ausnahmen

rsync --numeric-ids -avz --progress --delete --exclude 'file1.txt' --exclude 'dir1/*' --exclude 'dir2' QUELL-ORDNER BENUTZER@ZIEL-PC:/Pfad/

Ausnahmen als Liste

rsync --numeric-ids -avz --progress --delete --exclude={'file1.txt','dir1/*','dir2'} QUELL-ORDNER BENUTZER@ZIEL-PC:/Pfad/

mit SSH-Key

rsync --numeric-ids -avz --progress -e "ssh -i /home/benutzer/.ssh/id_rsa" QUELL-ORDNER BENUTZER@ZIEL-PC:/Pfad/

Dateien von entfernten Host holen

-z für komprimieren -e für ssh-key

rsync --numeric-ids -avz --progress --delete "ssh -i /home/benutzer/.ssh/id_rsa" root@backup.network:/srv/backup/rsync-gitlab /tmp/

mit SSH-KEY und SSH-Passwort

Es gibt keine Möglichkeit(?) einen SSH-Benutzer mit Key UND Passwort per rsync zu verwenden.

Folgender Befehl hilft nur temporär. Mit sshpass auch kein Erfolg gehabt. Ansonsten nur als rsync Daemon.

eval `ssh-agent` && ssh-add /home/benutzer/.ssh/dupli_id_rsa

Beispiel:

vim /srv/cron/gitlab_data_sync.sh

#!/bin/sh


## ssh-Passwort einmalig wie folgt auf QuellHost hinzufügen

## Passwort im keepass

## Kommando:

# eval `ssh-agent` && ssh-add /root/.ssh/dupli_id_rsa 


## Daten des Quellsystem

REMOTE_HOST=10.95.178.69
REMOTE_USER=dupli
REMOTE_USER_KEY=/home/benutzer/.ssh/id_rsa
GITLAB_DATA_DIR_LOCAL=/srv/gitlab-data
GITLAB_DATA_DIR_REMOTE=/srv/backup/rsync-gitlab-data

#Sync Optionen

#bwlimit begrenzt Bandbreite

RSYNC_OPTS="-avh --delete --numeric-ids --bwlimit=10000"

SSH_CMD="/usr/bin/ssh -i $REMOTE_USER_KEY -l $REMOTE_USER"

/usr/bin/rsync $RSYNC_OPTS -e "$SSH_CMD" $GITLAB_DATA_DIR_LOCAL/ $REMOTE_USER:$REMOTE_USER_PW@$REMOTE_HOST:$GITLAB_DATA_DIR_REMOTE/

Skript ausführbar machen

chmod a+x gitlab_data_sync.sh

Crontab für regelmäßige Ausführung bearbeiten:

crontab -e

0 5 * * * /srv/gitlab/cron/gitlab_app_sync.sh >> /srv/gitlab/logs/gitlab_app_sync.log 2>&1