Rsync é un sistema de sincronización de arquivos entre dóus puntos, que nos permite ter o mesmo arquivo cos últimos cambios gardados en dóus ou máis sitios a vez

É unha ferramenta moi útil para realizar backups de seguridade, xa ue combina algoritmos que permiten sincronizar só as diferenzas dos arquivos, co cal aforra ancho de banda , se pode dar que se use máis tempos da CPU ao ter que comprobar e procesalos cambios nos arquivos.

Instalando rsync en Fedora

A instalación en Fedora:
sudo dnf install rsync

Usando Rsync

Comprobando se está activo

Cómo calquer outro servizo antes de traballar con él interésanos saber en que estado se atopa:
$ systemctl status rsync
● rsync.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

Uso

Nas rutas de rsync se usas “:” estás a indicar que se use a través da rede entre dúas máquinas, se non se usa “:” será unha copia local.

Parámetro: Uso:
-a, -archive Sincronizar por diferencias entre ficheiros, isto só enviará as partes diferentes, ademáis é como se puséralas opcións “-rlptgoD”.
-r, -recursive Para que a sincronización sexa recursiva e sincronice tamén subdirectorios e os seus ficheiros.
-p, -perms Perserva os permisos.
-t, -times Perserva ás datas de modificación.
-l, -links Preserva os enalces simbólicos.
-g, -group Preserva os grupos.
-o, -owner Preserva o dono.
-D Permite a sincronización de arquivos especiais e arquivos de tipo dispositivo no caso de que a máquina receptora execute rsync coma root.
-v, -verbose amosar máis información do proceso.

Exemplo

Creamos dous directorios AAA e BBB, en AAA creamos un arquivo duns 9 MiB:
$ mkdir -p ./CHERNOBIL/AAA ./CHERNOBIL/BBB
$ cd CHERNOBIL
$ dd if=/dev/urandom of=./AAA/arquivo_en_AAA.del bs=1M count=9
Agora tratamos de sincronizar o contido de AAA e BBB:
$ rsync -av ./AAA/ ./BBB/
sending incremental file list
./
arquivo_en_AAA.del
 
sent 9,439,630 bytes  received 38 bytes  18,879,336.00 bytes/sec
total size is 9,437,184  speedup is 1.00
Podemos comprobar cómo están os mesmos arquivos nos dóus directorios:
$ ls -lhaR
.:
total 0
drwxrwxr-x. 4 usuario usuario 26 Xul  5 04:01 .
drwxrwxr-x. 3 usuario usuario 96 Xul  5 15:27 ..
drwxrwxr-x. 2 usuario usuario 31 Xul  5 14:59 AAA
drwxrwxr-x. 2 usuario usuario 31 Xul  5 14:59 BBB
 
./AAA:
total 9,0M
drwxrwxr-x. 2 usuario usuario   31 Xul  5 14:59 .
drwxrwxr-x. 4 usuario usuario   26 Xul  5 04:01 ..
-rw-rw-r--. 1 usuario usuario 9,0M Xul  5 14:57 arquivo_en_AAA.del
 
./BBB:
total 9,0M
drwxrwxr-x. 2 usuario usuario   31 Xul  5 14:59 .
drwxrwxr-x. 4 usuario usuario   26 Xul  5 04:01 ..
-rw-rw-r--. 1 usuario usuario 9,0M Xul  5 14:57 arquivo_en_AAA.del
Creamos un novo arquivo e o concatenamos ao arquivo de probas:
$ dd if=/dev/urandom of=./AAA/engadido.del bs=1M count=1024
$ cat ./AAA/engadido.del >> ./AAA/arquivo_en_AAA.del 
$ ls -laRh
.:
total 0
drwxrwxr-x. 4 usuario usuario 26 Xul  5 04:01 .
drwxrwxr-x. 3 usuario usuario 54 Xul  5 15:35 ..
drwxrwxr-x. 2 usuario usuario 50 Xul  5 14:59 AAA
drwxrwxr-x. 2 usuario usuario 31 Xul  5 14:59 BBB
 
./AAA:
total 3,0G
drwxrwxr-x. 2 usuario usuario   50 Xul  5 14:59 .
drwxrwxr-x. 4 usuario usuario   26 Xul  5 04:01 ..
-rw-rw-r--. 1 usuario usuario 1,1G Xul  5 15:35 arquivo_en_AAA.del
-rw-rw-r--. 1 usuario usuario 1,0G Xul  5 15:31 engadido.del
 
./BBB:
total 9,0M
drwxrwxr-x. 2 usuario usuario   31 Xul  5 14:59 .
drwxrwxr-x. 4 usuario usuario   26 Xul  5 04:01 ..
-rw-rw-r--. 1 usuario usuario 9,0M Xul  5 14:57 arquivo_en_AAA.del
Voltamos a sincronizalos directorios:
$ rsync -av ./AAA/ ./BBB/
sending incremental file list
arquivo_en_AAA.del
engadido.del
 
sent 2,157,447,631 bytes  received 54 bytes  45,419,951.26 bytes/sec
total size is 2,156,920,832  speedup is 1.00
$ ls -laRh
.:
total 0
drwxrwxr-x. 4 usuario usuario 26 Xul  5 04:01 .
drwxrwxr-x. 3 usuario usuario 96 Xul  5 15:37 ..
drwxrwxr-x. 2 usuario usuario 50 Xul  5 14:59 AAA
drwxrwxr-x. 2 usuario usuario 50 Xul  5 14:59 BBB
 
./AAA:
total 3,0G
drwxrwxr-x. 2 usuario usuario   50 Xul  5 14:59 .
drwxrwxr-x. 4 usuario usuario   26 Xul  5 04:01 ..
-rw-rw-r--. 1 usuario usuario 1,1G Xul  5 15:35 arquivo_en_AAA.del
-rw-rw-r--. 1 usuario usuario 1,0G Xul  5 15:31 engadido.del
 
./BBB:
total 2,1G
drwxrwxr-x. 2 usuario usuario   50 Xul  5 14:59 .
drwxrwxr-x. 4 usuario usuario   26 Xul  5 04:01 ..
-rw-rw-r--. 1 usuario usuario 1,1G Xul  5 15:35 arquivo_en_AAA.del
-rw-rw-r--. 1 usuario usuario 1,0G Xul  5 15:31 engadido.del

Cómo curiosidade indicar que tal cómo o fago aquí non se borran os arquivos se non están noutro directorio.

Vexamos o seguinte exemplo onde creo 2 arquivos de diferente tamaño un en AAA e outro en BBB:
$ dd if=/dev/urandom of=./BBB/BBBBBBBBB.del bs=1M count=123
123+0 records in
123+0 records out
128974848 bytes (129 MB) copied, 7,08548 s, 18,2 MB/s
$ dd if=/dev/urandom of=./AAA/AAAAAAAAA.del bs=1M count=69
69+0 records in
69+0 records out
72351744 bytes (72 MB) copied, 4,03944 s, 17,9 MB/s
$ tree . -hD
.
├── [   70 Jul  5 15:46]  AAA
│   ├── [  69M Jul  5 15:46]  AAAAAAAAA.del
│   ├── [ 1.0G Jul  5 15:35]  arquivo_en_AAA.del
│   └── [ 1.0G Jul  5 15:31]  engadido.del
└── [   70 Jul  5 15:46]  BBB
    ├── [ 1.0G Jul  5 15:35]  arquivo_en_AAA.del
    ├── [ 123M Jul  5 15:46]  BBBBBBBBB.del
    └── [ 1.0G Jul  5 15:31]  engadido.del
Lanzo a sincronización:
$ rsync -av ./AAA/ ./BBB/
sending incremental file list
./
AAAAAAAAA.del
 
sent 72,369,607 bytes  received 38 bytes  144,739,290.00 bytes/sec
total size is 2,229,272,576  speedup is 30.80
$ tree . -hD
.
├── [   70 Jul  5 15:46]  AAA
│   ├── [  69M Jul  5 15:46]  AAAAAAAAA.del
│   ├── [ 1.0G Jul  5 15:35]  arquivo_en_AAA.del
│   └── [ 1.0G Jul  5 15:31]  engadido.del
└── [   90 Jul  5 15:46]  BBB
    ├── [  69M Jul  5 15:46]  AAAAAAAAA.del
    ├── [ 1.0G Jul  5 15:35]  arquivo_en_AAA.del
    ├── [ 123M Jul  5 15:46]  BBBBBBBBB.del
    └── [ 1.0G Jul  5 15:31]  engadido.del

Podemos ver que o ficheiro de AAA se pasou a BBB e non se borrou o ficheiro “BBBBBBBBB.del” de BBB.

Se volvo a lanzar a orde verás que non hai nada novo que sincronizar, logo se executo outra vez rsync mais engado o parámetro “-delete” borrará “BBBBBBBBB.del” do directorio destino:
$ rsync -av ./AAA/ ./BBB/
sending incremental file list
 
sent 157 bytes  received 12 bytes  338.00 bytes/sec
total size is 2,229,272,576  speedup is 13,190,961.99
$ rsync -av --delete ./AAA/ ./BBB/
sending incremental file list
deleting BBBBBBBBB.del
 
sent 157 bytes  received 29 bytes  372.00 bytes/sec
total size is 2,229,272,576  speedup is 11,985,336.43
$ tree . -hD
.
├── [   70 Jul  5 15:46]  AAA
│   ├── [  69M Jul  5 15:46]  AAAAAAAAA.del
│   ├── [ 1.0G Jul  5 15:35]  arquivo_en_AAA.del
│   └── [ 1.0G Jul  5 15:31]  engadido.del
└── [   70 Jul  5 15:46]  BBB
    ├── [  69M Jul  5 15:46]  AAAAAAAAA.del
    ├── [ 1.0G Jul  5 15:35]  arquivo_en_AAA.del
    └── [ 1.0G Jul  5 15:31]  engadido.del
 
2 directories, 6 files

Conclusión, sincroniza o receptor co emisor, mais os arquivos extra do receptor non pasan ao emisor.