Menyalin berkas dari satu tempat ke tempat lain adalah salah satu pekerjaan paling dasar di sistem operasi. Untuk keperluan sekali jalan, perintah cp di Linux atau scp untuk menyalin ke server lain sudah memadai. Keduanya bekerja dengan cara yang lugas: baca seluruh isi berkas di sumber, lalu tulis seluruhnya di tujuan.
Cara itu mulai terasa mahal ketika pekerjaannya berulang. Bayangkan Anda menyalin folder website berukuran 5 GB ke server cadangan setiap malam. Kalau yang berubah hari itu hanya beberapa berkas konfigurasi, scp tetap mengirim 5 GB penuh melewati jaringan. Waktu, bandwidth, dan beban server terpakai untuk memindahkan data yang sebenarnya sudah ada di tujuan.
Rsync adalah jawaban atas persoalan itu, dan sudah menjalankan tugasnya sejak tiga dekade lalu.
Apa Itu Rsync?
Rsync adalah utilitas baris perintah untuk menyalin dan menyinkronkan berkas, baik di dalam satu komputer maupun antar-komputer melalui jaringan. Namanya merupakan singkatan dari remote sync (sinkronisasi jarak jauh). Rsync tersedia hampir di semua distribusi Linux, BSD, dan macOS, serta bisa dijalankan di Windows melalui beberapa cara yang dibahas di bagian akhir artikel ini.
Yang membedakan rsync dari cp maupun scp adalah caranya menentukan apa yang perlu dikirim. Rsync membandingkan berkas di sumber dengan berkas di tujuan lebih dulu, lalu hanya mengirimkan bagian yang benar-benar berbeda. Pada penyalinan pertama, rsync tetap mengirim semuanya. Namun pada penyalinan kedua dan seterusnya, lalu lintas yang dihasilkan bisa menyusut drastis.
Rsync pertama kali dikembangkan oleh Andrew Tridgell bersama Paul Mackerras dan dipublikasikan pada 1996 sebagai bagian dari riset di Australian National University. Sampai sekarang rsync dirilis di bawah lisensi GPL dan masih aktif dikembangkan. Versi stabil terbaru adalah 3.5.0 yang dirilis pada 13 Agustus 2026.
Perlu diperhatikan sejak awal: rsync bekerja satu arah. Ia menyalin dari sumber ke tujuan, bukan menggabungkan perubahan dari kedua sisi. Untuk sinkronisasi dua arah, Anda membutuhkan alat lain seperti Unison atau Syncthing.
Cara Kerja Rsync: Algoritma yang Hanya Mengirim Selisih
Memahami pengertian rsync saja belum cukup untuk memakainya dengan percaya diri. Kemampuan rsync mengirim selisih berasal dari sebuah algoritma yang dijelaskan Tridgell dan Mackerras dalam laporan teknis mereka. Cara paling mudah memahaminya adalah lewat perumpamaan naskah.
Bayangkan Anda mengirim naskah 500 halaman ke editor yang sudah memegang versi lama naskah tersebut. Mengirim ulang seluruh naskah jelas boros. Sebagai gantinya, editor memotong naskah miliknya menjadi potongan seukuran satu halaman, lalu mengirimkan "sidik jari" tiap potongan kepada Anda. Anda menelusuri naskah baru sambil mencocokkan sidik jari itu. Halaman yang cocok cukup Anda sebut nomornya, sedangkan halaman yang tidak cocok Anda kirim utuh.
Persis begitulah rsync bekerja. Sisi penerima memecah berkas lamanya menjadi blok berukuran tetap, lalu menghitung dua macam checksum untuk tiap blok. Sisi pengirim kemudian menelusuri berkas barunya byte demi byte untuk mencari blok yang cocok.
Dua lapis checksum
Penelusuran byte demi byte itu berpotensi sangat lambat. Rsync menyiasatinya dengan dua lapis pemeriksaan yang berbeda ongkos.
Lapis pertama adalah rolling checksum (checksum bergulir), yaitu checksum lemah yang sangat murah dihitung. Nilainya tersusun dari penjumlahan byte dalam satu blok, ditambah penjumlahan berbobot posisi, keduanya dihitung modulo 2^16. Angka 2^16 dipilih Tridgell demi kesederhanaan dan kecepatan.
Sifat "bergulir" inilah kuncinya. Saat jendela pemeriksaan bergeser satu byte ke kanan, rsync tidak menghitung ulang dari nol. Ia hanya mengurangi kontribusi byte yang keluar dan menambahkan byte yang masuk. Akibatnya, memeriksa blok di setiap posisi byte yang mungkin dalam satu berkas besar menjadi pekerjaan yang ringan.
Lapis kedua adalah checksum kuat yang jauh lebih mahal, dan hanya dihitung ketika checksum lemah menunjukkan kecocokan. Fungsinya memastikan kecocokan tadi bukan kebetulan. Rsync modern memakai MD5 sejak protokol 30, lalu menambahkan xxHash sejak versi 3.2.0 yang jauh lebih cepat bila kedua sisi mendukungnya.
Rsync menyaring lima blok dengan checksum lemah, dua blok lolos ke checksum kuat, dan hanya satu yang dikirim.
Seberapa besar penghematannya
Tridgell dan Mackerras menguji algoritma ini pada dua arsip kode sumber kernel Linux berukuran sekitar 24 MB, yang terpisah beberapa tingkat patch. Dari 2.441 berkas di dalamnya, 291 berkas berubah, 19 dihapus, dan 25 ditambahkan.
Dengan ukuran blok 500 byte, data yang benar-benar ditransfer hanya 1.091.900 byte, sekitar 1,09 MB. Angka itu setara 4,5% dari ukuran arsip, atau penghematan sekitar 95,5%. Sebagai pembanding, berkas diff (daftar perbedaan) yang dihasilkan GNU diff untuk pasangan arsip yang sama berukuran 2,1 MB. Rsync mengirim sekitar separuh dari itu, tanpa perlu mengetahui format berkas yang disalinnya.
Algoritma delta ini tidak selalu dipakai. Secara default rsync menyaring dulu berkas mana yang perlu diperiksa berdasarkan ukuran dan waktu modifikasi. Berkas yang keduanya sama akan dilewati sepenuhnya. Untuk penyalinan yang sumber dan tujuannya ada di mesin yang sama, rsync justru menyalin berkas secara utuh. Membaca disk dua kali lebih mahal daripada sekadar menulis ulang.
Cara Install Rsync Linux dan Mengecek Versinya
Sebagian besar distribusi Linux sudah menyertakan rsync sejak pemasangan awal, jadi langkah pertama sebaiknya memeriksa dulu apakah ia sudah ada:
rsync --versionPerintah itu menampilkan nomor versi sekaligus daftar kemampuan yang dikompilasi ke dalamnya. Bila yang muncul justru pesan command not found, pasang lewat package manager distribusi Anda.
Rsync Ubuntu dan Debian
Pada Ubuntu, Debian, dan turunannya, paket rsync tersedia di repositori resmi:
sudo apt update && sudo apt install rsyncRsync Fedora dan RHEL
Pada Fedora, RHEL, AlmaLinux, dan Rocky Linux, pemasangannya memakai dnf:
sudo dnf install rsyncAda satu syarat yang sering terlewat: rsync harus terpasang di kedua sisi. Saat menyalin ke server lain, rsync di komputer Anda akan memanggil rsync di server tujuan melalui SSH. Bila server tujuan belum memilikinya, transfer gagal meskipun perintah Anda sudah benar.
Perlu diperhatikan juga bahwa repositori distribusi kerap tertinggal beberapa versi dari rilis resmi. Cocokkan angka yang muncul dengan batas aman yang dibahas di bagian keamanan artikel ini, dan pasang dari sumber resmi bila versi di repositori terlalu lama.
Sintaks Dasar Rsync dan Jebakan Garis Miring
Struktur perintah rsync selalu sama dan mudah diingat. Dalam dokumentasi berbahasa Inggris, bentuk ini disebut rsync command:
rsync [opsi] [sumber] [tujuan]Contoh paling sederhana, menyalin isi folder proyek ke folder cadangan di komputer yang sama:
rsync -av proyek/ cadangan/Opsi -a dan -v akan dibahas sebentar lagi. Yang lebih dulu perlu Anda perhatikan adalah tanda garis miring di akhir path sumber, karena inilah sumber kebingungan yang paling sering menimpa pengguna baru.
Perbedaannya nyata dan mudah dibuktikan. Berikut hasil pengujian pada folder src yang berisi tiga berkas:
# TANPA garis miring — folder src ikut terbawa ke dalam tujuan
rsync -av src d1/
# hasil: d1/src/a.txt, d1/src/b.txt, d1/src/sub/c.txt
# DENGAN garis miring — hanya ISI src yang disalin
rsync -av src/ d2/
# hasil: d2/a.txt, d2/b.txt, d2/sub/c.txtAturannya sederhana: garis miring di akhir path sumber berarti "salin isi folder ini", sedangkan tanpa garis miring berarti "salin folder ini beserta namanya". Garis miring pada path tujuan tidak berpengaruh.
Perintah rsync -av src d1/ menaruh folder src di dalam d1, sedangkan rsync -av src/ d2/ menaruh isinya langsung di d2.
Kekeliruan kecil ini terasa akibatnya ketika digabungkan dengan opsi --delete. Menyalin src tanpa garis miring ke folder yang seharusnya menerima isinya menghasilkan struktur bersarang. Opsi --delete kemudian bisa membersihkan berkas yang sebenarnya masih dibutuhkan.
Opsi Rsync yang Paling Sering Dipakai
Rsync memiliki lebih dari seratus opsi, tetapi pekerjaan sehari-hari umumnya selesai dengan segelintir saja.
| Opsi | Fungsi |
|---|---|
-a | Mode arsip: rekursif sekaligus mempertahankan izin, waktu, pemilik, dan symlink |
-v | Menampilkan berkas yang sedang diproses |
-z | Mengompresi data selama pengiriman |
-P | Menampilkan progres sekaligus menyimpan berkas yang transfernya terputus |
-n | Mode simulasi, tidak menulis apa pun |
--delete | Menghapus berkas di tujuan yang sudah tidak ada di sumber |
--exclude | Mengecualikan berkas atau folder tertentu |
--itemize-changes | Merinci perubahan apa yang terjadi pada tiap berkas |
Opsi -a adalah yang paling sering Anda pakai. Ia sebenarnya gabungan dari beberapa opsi lain, dan tanpanya rsync tidak akan menelusuri subfolder maupun mempertahankan izin akses. Untuk menyalin data website atau isi home directory, -a hampir selalu jadi pilihan yang tepat.
Opsi -z berguna pada koneksi lambat, tetapi tidak selalu menguntungkan. Pada jaringan lokal yang cepat, ongkos kompresi di CPU justru bisa memperlambat transfer. Data yang memang sudah terkompresi seperti gambar JPEG, video, atau arsip ZIP juga hampir tidak menyusut lagi.
Kebiasaan yang sebaiknya Anda bangun sejak awal adalah menjalankan -n terlebih dahulu, terutama saat perintah mengandung --delete. Digabungkan dengan --itemize-changes, rsync akan melaporkan rencananya tanpa menyentuh berkas apa pun:
rsync -avn --itemize-changes --delete proyek/ cadangan/Pada pengujian dengan satu berkas yang diubah dari tiga berkas yang ada, keluarannya hanya satu baris: >f.s..... a.txt. Dua berkas lain tidak disebut sama sekali, karena rsync memang tidak berencana menyentuhnya.
Kebutuhan rsync exclude muncul ketika ada folder yang tidak perlu ikut disalin. Opsi --exclude bisa ditulis berulang kali dalam satu perintah:
rsync -av --exclude 'node_modules' --exclude '*.log' proyek/ cadangan/Rsync Lewat SSH untuk Transfer Antar-Server
Kemampuan rsync yang paling banyak dimanfaatkan adalah menyalin berkas antar-server. Caranya cukup menuliskan tujuan dalam format pengguna@host:/path:
rsync -avz proyek/ root@203.0.113.10:/var/www/cadangan/Arah sebaliknya juga bisa, yaitu menarik berkas dari server ke komputer lokal:
rsync -avz root@203.0.113.10:/var/www/html/ ./salinan-lokal/Perlu dipahami bahwa rsync tidak punya lapisan enkripsi sendiri. Perintah di atas berjalan aman karena rsync menumpang SSH sebagai sarana pengangkutnya, persis seperti yang dilakukan SFTP. Karena itu lalu lintasnya melewati port 22 milik SSH, bukan port khusus rsync.
Rsync sebenarnya memiliki mode lain berupa daemon (layanan latar belakang) yang mendengarkan di port 873 dan dipanggil dengan skema rsync://. Port 873 inilah yang biasanya dimaksud ketika orang menyebut rsync port. Mode ini masih dipakai untuk keperluan seperti mirror repositori publik. Namun lalu lintasnya tidak terenkripsi, sehingga tidak layak dipakai untuk memindahkan data pribadi melalui internet terbuka.
Rsync lewat SSH memakai port 22 dan terenkripsi, sedangkan mode daemon memakai port 873 tanpa enkripsi.
Kalau server Anda memakai port SSH non-standar, tunjuk lewat opsi -e:
rsync -avz -e 'ssh -p 2222' proyek/ root@203.0.113.10:/var/www/cadangan/Rsync membutuhkan akses shell dan izin memasang paket. Karena itu kemampuannya umumnya tersedia di lingkungan dengan hak akses penuh seperti VPS. Di hosting bersama yang shell-nya dibatasi, rsync jarang bisa dipakai.
Menjadwalkan Rsync sebagai Backup Otomatis
Rsync menjadi jauh lebih berguna ketika dijalankan otomatis. Menggabungkannya dengan cron job menghasilkan mekanisme pencadangan yang sederhana namun andal. Contoh berikut menjalankan pencadangan setiap hari pukul 02.30 dini hari:
30 2 * * * rsync -az --delete /var/www/ root@203.0.113.10:/backup/www/Perhatikan hilangnya opsi -v pada perintah terjadwal. Keluaran verbose hanya akan memenuhi log atau kotak surat Anda tanpa memberi manfaat, karena tidak ada yang membacanya setiap malam.
Kelemahan pendekatan di atas adalah tujuan selalu ditimpa. Kalau sebuah berkas rusak di sumber lalu ikut tersalin, versi baiknya di tujuan sudah hilang. Solusinya adalah --link-dest, yang membuat rsync menautkan berkas tak berubah ke salinan sebelumnya alih-alih menyalinnya lagi:
rsync -a --delete --link-dest=/backup/2026-08-21/ /var/www/ /backup/2026-08-22/Pola rsync backup bertingkat seperti ini sudah lama dipakai di banyak server. Hasilnya adalah folder yang tampak berisi salinan utuh untuk setiap tanggal, padahal berkas yang tidak berubah hanya disimpan sekali di disk. Anda memperoleh riwayat versi dengan ongkos ruang yang mendekati pencadangan inkremental.
Satu hal yang perlu diingat, menyalin ke server lain dengan rsync baru memenuhi sebagian dari strategi backup yang layak. Aturan 3-2-1 menuntut tiga salinan pada dua jenis media, dengan satu salinan berada di lokasi terpisah.
Kelemahan Rsync yang Perlu Anda Pertimbangkan
Rsync bukan alat yang cocok untuk segala keadaan. Beberapa keterbatasan berikut sebaiknya Anda ketahui sebelum menjadikannya tumpuan.
- Sinkronisasi hanya satu arah: Rsync menyamakan tujuan dengan sumber. Perubahan yang terjadi di sisi tujuan tidak akan dibawa balik, dan justru bisa tertimpa pada eksekusi berikutnya.
- Tidak ada riwayat versi bawaan: Tanpa
--link-destatau alat tambahan, Anda hanya memiliki satu salinan terakhir. Berkas yang rusak lalu tersalin akan menimpa versi baiknya. - Melambat pada jumlah berkas yang sangat banyak: Sebelum memindahkan data, rsync menyusun daftar berkas dan membandingkan metadata satu per satu. Pada direktori berisi ratusan ribu berkas kecil, tahap ini bisa memakan waktu lebih lama daripada transfernya sendiri.
- Algoritma delta menuntut kerja CPU dan disk: Kedua sisi harus membaca berkas dan menghitung checksum. Pada berkas berukuran puluhan gigabyte, ongkos ini kadang melampaui penghematan bandwidth yang diperoleh.
- Penghematan mengecil pada berkas terkompresi: Perubahan kecil di dalam arsip ZIP atau berkas terenkripsi biasanya mengubah hampir seluruh isinya. Rsync akhirnya mengirim ulang berkas itu nyaris seutuhnya.
- Opsi
--deletetidak memaafkan: Salah menulis path sumber dapat membuat rsync menganggap tujuan berisi berkas yang seharusnya tidak ada, lalu menghapusnya.
Keterbatasan pertama dan kelima itulah yang membuat sebagian orang membandingkan rclone vs rsync. Keduanya memang bertugas memindahkan berkas, tetapi sasarannya berbeda. Rclone dirancang untuk berbicara dengan layanan penyimpanan awan seperti Google Drive, Amazon S3, atau Dropbox lewat API masing-masing. Rsync bekerja pada sistem berkas dan berjalan di atas SSH. Untuk menyalin antar-server Linux, rsync lebih tepat; untuk menyinkronkan ke penyimpanan awan, rclone yang lebih cocok.
Keamanan: Kenapa Versi Rsync Anda Harus Baru
Rsync sering dianggap perkakas sederhana yang tidak perlu diperbarui. Dua peristiwa dalam dua tahun terakhir menunjukkan anggapan itu keliru.
Pada Januari 2025, enam kerentanan diumumkan sekaligus. Yang terparah adalah CVE-2024-12084, sebuah heap buffer overflow (penulisan data melebihi batas memori yang dialokasikan) dengan skor CVSS 9.8 dari maksimum 10. Celah itu ternyata sudah ada sejak versi 3.2.7 yang dirilis Oktober 2022. Pada daemon rsync yang dikonfigurasi untuk akses baca publik, celah ini dapat dieksploitasi tanpa autentikasi. Seluruhnya diperbaiki di versi 3.4.0 yang terbit 15 Januari 2025.
Peristiwa kedua jauh lebih besar. Versi 3.5.0 yang dirilis 13 Agustus 2026 memperbaiki 33 kerentanan sekaligus, hasil audit terfokus pada penanganan path dan protokol daemon. Sebagian besarnya berkaitan dengan symlink (tautan simbolik) yang bisa dimanfaatkan untuk membaca atau menulis berkas di luar direktori yang diizinkan. Rilis ini juga memperkenalkan opsi baru --confine-root untuk membatasi path yang boleh disentuh.
Angka yang muncul dari rsync --version menjadi penentu di sini. Kalau versinya di bawah 3.4.0, perbarui lewat package manager distribusi Anda sebelum memakainya untuk data penting. Selain itu, hindari mengekspos daemon rsync di port 873 ke internet terbuka. Untuk kebutuhan sehari-hari, menjalankan rsync di atas SSH sudah lebih dari cukup dan jauh lebih aman.
Rsync di Windows dan macOS
Rsync lahir di lingkungan Unix, sehingga pemakaiannya di sistem operasi lain punya beberapa catatan.
Kebutuhan menjalankan rsync Windows umumnya muncul saat Anda mengelola server Linux dari komputer kerja. Cara termudah adalah lewat WSL (Windows Subsystem for Linux) yang menjalankan distribusi Linux lengkap beserta rsync di dalamnya. Alternatif lain adalah Cygwin atau MSYS2 yang menyediakan rsync sebagai paket. Bila Anda lebih nyaman dengan antarmuka grafis, WinSCP dapat menangani sinkronisasi folder tanpa perlu menghafal opsi baris perintah.
Kasus macOS berbeda, dan akibatnya nyata bagi skrip yang sudah berjalan. Perintah rsync memang tersedia di macOS, tetapi sejak macOS Sequoia yang dijalankan bukan lagi rsync asli. Apple menggantinya dengan openrsync yang berlisensi ISC, karena rsync 3.x memakai lisensi GPLv3 yang tidak dapat dipenuhi Apple. Sebelum penggantian itu, macOS bertahan pada rsync 2.6.9 keluaran 2006 selama hampir dua puluh tahun.
Anda bisa membuktikannya sendiri. Menjalankan rsync --version di macOS terkini menghasilkan keluaran seperti ini:
openrsync: protocol version 29
rsync version 2.6.9 compatibleKonsekuensinya nyata: openrsync hanya menerima sebagian argumen rsync, sehingga skrip yang mengandalkan opsi modern bisa gagal berjalan. Bila Anda membutuhkan rsync penuh di macOS, pasang versi resminya lewat Homebrew atau MacPorts.
FAQ Seputar Rsync
Apa beda rsync vs scp dan cp?
Ketiganya menyalin berkas, tetapi hanya rsync yang memeriksa kondisi tujuan sebelum mengirim. Perintah cp bekerja di dalam satu mesin, scp menyalin antar-mesin, dan keduanya selalu memindahkan berkas secara utuh. Rsync melewati berkas yang sudah sama dan mengirim hanya bagian yang berbeda pada berkas yang berubah.
Rsync memakai port berapa?
Rsync tidak memiliki port sendiri pada pemakaian yang lazim. Karena berjalan di atas SSH, lalu lintasnya melewati port 22. Port 873 hanya dipakai bila rsync dijalankan dalam mode daemon dengan skema rsync://, dan mode itu tidak terenkripsi.
Bisakah rsync melanjutkan transfer yang terputus?
Bisa, dengan opsi --partial yang membuat rsync menyimpan potongan berkas yang sudah terkirim. Opsi -P menggabungkannya sekaligus dengan tampilan progres, sehingga banyak dipakai untuk berkas berukuran besar di koneksi yang tidak stabil.
Kenapa muncul pesan permission denied (publickey)?
Pesan itu berasal dari SSH, bukan dari rsync. Artinya proses autentikasi ke server gagal, umumnya karena SSH key belum terpasang di server tujuan atau nama pengguna yang dipakai keliru. Menguji ssh pengguna@host secara terpisah adalah cara tercepat memastikan sumber masalahnya.
Apakah rsync bisa menyinkronkan dua arah?
Tidak. Rsync hanya menyamakan tujuan dengan sumber. Menjalankannya bolak-balik dari kedua sisi bukan solusi, karena eksekusi kedua akan mengembalikan berkas yang baru saja dihapus. Untuk kebutuhan dua arah, pertimbangkan Unison atau Syncthing.
Kesimpulan
Rsync adalah perkakas sinkronisasi berkas yang bekerja dengan membandingkan sumber dan tujuan lebih dulu, lalu mengirim hanya selisihnya. Pendekatan itu membuatnya sangat hemat pada pekerjaan berulang. Uji aslinya menunjukkan arsip 24 MB yang cukup dikirim sekitar 1,09 MB, atau 4,5% dari ukuran penuhnya.
Rsync paling tepat dipakai untuk pencadangan terjadwal, penyalinan data antar-server, dan pemindahan folder besar yang isinya jarang berubah seluruhnya. Sebaliknya, rsync kurang cocok bila Anda membutuhkan sinkronisasi dua arah, riwayat versi yang rapi, atau menangani direktori berisi ratusan ribu berkas kecil.
Bila Anda baru mulai, biasakan tiga hal. Pertama, pahami arti garis miring di akhir path. Kedua, jalankan -n sebelum perintah yang mengandung --delete. Ketiga, pastikan versi rsync Anda tidak lebih lama dari 3.4.0. Ketiganya cukup untuk menghindari sebagian besar kesalahan yang umum terjadi.
Semoga artikel ini membantu.




