Rsync (Remote Sync) adalah perintah yang paling umum digunakan untuk menyalin dan menyinkronkan file dan direktori dari jarak jauh maupun secara lokal di sistem Linux/Unix.

Dengan bantuan perintah rsync, Anda dapat menyalin dan menyinkronkan data Anda dari jarak jauh dan lokal di seluruh direktori, disk, dan jaringan, melakukan pencadangan data, dan mirror antara dua mesin Linux.

Artikel ini menjelaskan 10 penggunaan dasar dan lanjutan dari perintah rsync untuk mentransfer file Anda dari jarak jauh dan lokal di mesin berbasis Linux. Anda tidak perlu menjadi pengguna root untuk menjalankan perintah rsync.

Beberapa Keuntungan dan Fitur Perintah Rsync

  1. Ini secara efisien menyalin dan menyinkronkan file ke atau dari sistem jarak jauh.
  2. Mendukung penyalinan tautan, perangkat, pemilik, grup, dan izin.
  3. Ini lebih cepat daripada scp (Salin Aman) karena rsync menggunakan protokol pembaruan jarak jauh yang memungkinkan transfer hanya perbedaan antara dua set file. Pertama kali, ia menyalin seluruh isi file atau direktori dari sumber ke tujuan tetapi dari waktu berikutnya, ia hanya menyalin blok dan byte yang diubah ke tujuan.
  4. Rsync mengkonsumsi lebih sedikit pemanfaatan bandwidth karena menggunakan metode kompresi dan dekompresi saat mengirim dan menerima data di kedua ujungnya.

Sintaks dasar dari perintah rsync

# rsync options source destination

Beberapa opsi umum yang digunakan dengan perintah rsync
-v : verbose
-r : menyalin data secara rekursif (tetapi jangan pertahankan cap waktu dan izin saat mentransfer data.
-a : mode arsip, yang memungkinkan penyalinan file secara rekursif dan juga mempertahankan tautan simbolik, izin file, kepemilikan pengguna & grup, dan cap waktu.
-z : kompres data file.
-h : dapat dibaca manusia, angka keluaran dalam format yang dapat dibaca manusia.

Instal Rsync di Sistem Linux

$ sudo apt-get install rsync   [Di Debian/Ubuntu & Mint] 
$ pacman -S rsync              [Di Arch Linux]
$ emerge sys-apps/rsync        [Di Gentoo]
$ sudo dnf install rsync       [Di Fedora/CentOS/RHEL and Rocky Linux/AlmaLinux]
$ sudo zypper install rsync    [Di openSUSE]

Salin/Sinkronkan File dan Direktori Secara Lokal

Perintah berikut akan menyinkronkan satu file pada mesin lokal dari satu lokasi ke lokasi lain. Di sini, dalam contoh ini, nama file backup.tar perlu disalin atau disinkronkan ke folder /tmp/backups/.

[root@malhuda]# rsync -zvh backup.tar.gz /tmp/backups/

created directory /tmp/backups
backup.tar.gz

sent 224.54K bytes  received 70 bytes  449.21K bytes/sec
total size is 224.40K  speedup is 1.00

Pada contoh di atas, Anda dapat melihat bahwa jika tujuan belum ada, rsync akan membuat direktori tujuan secara otomatis.

Salin/Sinkronkan Direktori di Komputer Lokal

Perintah berikut akan mentransfer atau menyinkronkan semua file dari satu direktori ke direktori lain di mesin yang sama. Di sini, dalam contoh ini, /root/rpmpkgs berisi beberapa file paket rpm dan Anda ingin direktori tersebut disalin ke dalam folder /tmp/backups/.

[root@malhuda]# rsync -avzh /root/rpmpkgs /tmp/backups/

sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 3.47M bytes  received 96 bytes  2.32M bytes/sec
total size is 3.74M  speedup is 1.08

Salin/Sinkronkan File dan Direktori ke atau Dari Server

Perintah ini akan menyinkronkan direktori dari mesin lokal ke mesin jarak jauh. Misalnya, ada folder di komputer lokal Anda "rpmpkgs" yang berisi beberapa paket RPM dan Anda ingin konten direktori lokal itu dikirim ke server jarak jauh, Anda dapat menggunakan perintah berikut.

[root@malhuda:~]# rsync -avzh /root/rpmpkgs root@192.168.0.141:/root/

The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established.
ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts.
root@192.168.0.141's password: 
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 3.74M bytes  received 96 bytes  439.88K bytes/sec
total size is 3.74M  speedup is 1.00

Salin/Sinkronkan Direktori Jarak Jauh ke Mesin Lokal

Perintah ini akan membantu Anda menyinkronkan direktori jarak jauh ke direktori lokal. Di sini, dalam contoh ini, direktori /root/rpmpkgs yang ada di server jauh sedang disalin di komputer lokal Anda di /tmp/myrpms.

[root@malhuda:~]# rsync -avzh root@192.168.0.141:/root/rpmpkgs /tmp/myrpms

root@192.168.0.141's password: 
receiving incremental file list
created directory /tmp/myrpms
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 104 bytes  received 3.49M bytes  997.68K bytes/sec
total size is 3.74M  speedup is 1.07

Rsync Melalui SSH

Dengan rsync, kami dapat menggunakan SSH (Secure Shell) untuk transfer data, menggunakan protokol SSH saat mentransfer data kami, Anda dapat memastikan bahwa data Anda ditransfer dalam koneksi yang aman dengan enkripsi sehingga tidak ada yang dapat membaca data Anda saat sedang ditransfer melalui kabel di internet.

Juga ketika kami menggunakan rsync, kami perlu memberikan kata sandi pengguna/root untuk menyelesaikan tugas tertentu, jadi menggunakan opsi SSH akan mengirim login Anda dengan cara terenkripsi sehingga kata sandi Anda akan aman.

Salin File dari Server Jarak Jauh ke Server Lokal dengan SSH

Untuk menentukan protokol dengan rsync Anda perlu memberikan opsi "-e" dengan nama protokol yang ingin Anda gunakan. Di sini, dalam contoh ini, Kami akan menggunakan "ssh" dengan opsi "-e" dan melakukan transfer data.

[root@malhuda:~]# rsync -avzhe ssh root@192.168.0.141:/root/anaconda-ks.cfg /tmp

root@192.168.0.141's password: 
receiving incremental file list
anaconda-ks.cfg

sent 43 bytes  received 1.10K bytes  325.43 bytes/sec
total size is 1.90K  speedup is 1.67

Salin File dari Server Lokal ke Server Jarak Jauh dengan SSH

[root@malhuda:~]# rsync -avzhe ssh backup.tar.gz root@192.168.0.141:/backups/

root@192.168.0.141's password: 
sending incremental file list
created directory /backups
backup.tar.gz

sent 224.59K bytes  received 66 bytes  64.19K bytes/sec
total size is 224.40K  speedup is 1.00

Tampilkan Kemajuan Saat Mentransfer Data dengan rsync

Untuk menunjukkan kemajuan saat mentransfer data dari satu mesin ke mesin yang berbeda, kita dapat menggunakan opsi '–progress'. Ini menampilkan file dan waktu yang tersisa untuk menyelesaikan transfer.

[root@malhuda:/]# rsync -avzhe ssh --progress /root/rpmpkgs root@192.168.0.141:/root/rpmpkgs

root@192.168.0.141's password: 
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
          1.47M 100%   31.80MB/s    0:00:00 (xfr#1, to-chk=3/5)
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
        138.01K 100%    2.69MB/s    0:00:00 (xfr#2, to-chk=2/5)
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
          2.01M 100%   18.45MB/s    0:00:00 (xfr#3, to-chk=1/5)
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
        120.48K 100%    1.04MB/s    0:00:00 (xfr#4, to-chk=0/5)

sent 3.74M bytes  received 96 bytes  1.50M bytes/sec
total size is 3.74M  speedup is 1.00

Penggunaan Opsi –include dan –exclude

Kedua opsi ini memungkinkan kami untuk menyertakan dan mengecualikan file dengan menentukan parameter dengan opsi ini membantu kami menentukan file atau direktori yang ingin Anda sertakan dalam sinkronisasi dan mengecualikan file dan folder yang tidak ingin Anda transfer.

Di sini, dalam contoh ini, perintah rsync hanya akan menyertakan file dan direktori yang dimulai dengan 'R' dan mengecualikan semua file dan direktori lainnya.

[root@malhuda:/]# rsync -avze ssh --include 'R*' --exclude '*' root@192.168.0.141:/var/lib/rpm/ /root/rpm

root@192.168.0.141's password: 
receiving incremental file list
created directory /root/rpm
./
Requirename

sent 61 bytes  received 273,074 bytes  60,696.67 bytes/sec
total size is 761,856  speedup is 2.79

Penggunaan Opsi -delete

Jika file atau direktori tidak ada di sumber, tetapi sudah ada di tujuan, Anda mungkin ingin menghapus file/direktori yang ada di target saat menyinkronkan.

Kita dapat menggunakan opsi '–delete' untuk menghapus file yang tidak ada di direktori sumber. Sumber dan target sinkron. Sekarang buat file test.txt baru di target.

[root@malhuda:~]# cd /root/rpm/
[root@malhuda:~/rpm]# touch test.txt
[root@malhuda:~/rpm]# rsync -avz --delete root@192.168.0.151:/var/lib/rpm/ /root/rpm/

root@192.168.0.151's password: 
receiving incremental file list
deleting test.txt
./
.dbenv.lock
.rpm.lock
Basenames
Conflictname
Dirnames
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Packages
Providename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.001
__db.002
__db.003

sent 445 bytes  received 18,543,954 bytes  2,472,586.53 bytes/sec
total size is 71,151,616  speedup is 3.84

Target memiliki file baru bernama test.txt, saat menyinkronkan dengan sumber dengan opsi '–delete', file test.txt dihapus.

Atur Ukuran Maksimum File yang Akan Ditransfer

Anda dapat menentukan ukuran file Max yang akan ditransfer atau disinkronkan. Anda dapat melakukannya dengan opsi '–max-size'. Di sini, dalam contoh ini, ukuran file Max adalah 200k, jadi perintah ini hanya akan mentransfer file-file yang sama dengan atau lebih kecil dari 200k.

[root@malhuda:~]# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ root@192.168.0.151:/root/tmprpm

root@192.168.0.151's password: 
sending incremental file list
created directory /root/tmprpm
./
.dbenv.lock
.rpm.lock
Conflictname
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Recommendname
Requirename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.002

sent 129.52K bytes  received 396 bytes  28.87K bytes/sec
total size is 71.15M  speedup is 547.66

Secara Otomatis Hapus File sumber Setelah Transfer Berhasil

Sekarang, misalkan Anda memiliki server web utama dan server cadangan data, Anda membuat cadangan harian dan menyinkronkannya dengan server cadangan Anda, sekarang Anda tidak ingin menyimpan salinan cadangan lokal itu di server web Anda.

Jadi, apakah Anda akan menunggu transfer selesai dan kemudian menghapus file cadangan lokal itu secara manual? Tentu tidak. Penghapusan otomatis ini dapat dilakukan dengan menggunakan opsi '–remove-source-files'.

[root@malhuda:~]# rsync --remove-source-files -zvh backup.tar.gz root@192.168.0.151:/tmp/backups/

root@192.168.0.151's password: 
backup.tar.gz

sent 795 bytes  received 2.33K bytes  894.29 bytes/sec
total size is 267.30K  speedup is 85.40

[root@tecmint:~]# ls -l backup.tar.gz

ls: cannot access 'backup.tar.gz': No such file or directory

Lakukan Dry Run dengan rsync

Jika Anda seorang pemula menggunakan rsync dan tidak tahu persis apa yang akan dilakukan perintah Anda. Rsync benar-benar dapat mengacaukan hal-hal di folder tujuan Anda dan kemudian melakukan undo bisa menjadi pekerjaan yang membosankan.

Penggunaan opsi ini tidak akan membuat perubahan apa pun pada file dan menunjukkan output dari perintah, jika output menunjukkan persis sama yang ingin Anda lakukan maka Anda dapat menghapus opsi '–dry-run' dari perintah Anda dan jalankan di terminal.

[root@malhuda:~]# rsync --dry-run --remove-source-files -zvh backup.tar.gz root@192.168.0.151:/tmp/backups/

root@192.168.0.151's password: 
backup.tar.gz

sent 50 bytes  received 19 bytes  19.71 bytes/sec
total size is 267.30K  speedup is 3,873.97 (DRY RUN)

Rsync Atur Batas Bandwidth dan Transfer File

Anda dapat mengatur batas bandwidth saat mentransfer data dari satu mesin ke mesin lain dengan bantuan opsi '–bwlimit'. Opsi ini membantu kita membatasi bandwidth I/O.

[root@malhuda]# rsync --bwlimit=100 -avzhe ssh  /var/lib/rpm/  root@192.168.0.151:/root/tmprpm/
root@192.168.0.151's password:
sending incremental file list
sent 324 bytes  received 12 bytes  61.09 bytes/sec
total size is 38.08M  speedup is 113347.05

Juga, secara default rsync menyinkronkan blok dan byte yang diubah saja, jika Anda ingin secara eksplisit ingin menyinkronkan seluruh file maka Anda menggunakan opsi '-W' dengannya.

[root@malhuda]# rsync -zvhW backup.tar /tmp/backups/backup.tar
backup.tar
sent 14.71M bytes  received 31 bytes  3.27M bytes/sec
total size is 16.18M  speedup is 1.10

Itu saja dengan rsync sekarang, Anda dapat melihat 'man pages' untuk opsi lainnya. Tetap terhubung dengan malhuda.com untuk tutorial yang lebih seru dan menarik di masa mendatang. Jangan tinggalkan komentar dan saran Anda.