Linux rsync: Cara Menyinkronkan File Secara Lokal dan melalui SSH
rsync adalah alat yang menyalin file dan direktori ke sistem lokal atau jarak jauh serta mentransfer perubahan. Perilaku default adalah menyalin satu arah dari sumber ke tujuan, dan file yang hanya ada di tujuan tidak akan dihapus kecuali --delete ditentukan.
Sebelum Memulai
Contoh dijalankan di shell Linux. Pertama, periksa apakah sudah terpasang dengan rsync --version. Di Ubuntu, jika belum terpasang, Anda dapat menginstalnya dengan perintah berikut. Untuk transfer jarak jauh, rsync diperlukan di kedua sistem, dan jika menggunakan SSH (Secure Shell), akses jarak jauh dan izin menulis pada jalur tujuan juga diperlukan.
sudo apt update
sudo apt install rsync
Jika Anda memasukkan jalur sumber dan target secara terbalik, Anda dapat menimpa atau menghapus data yang diinginkan. Sebelum menangani data penting, pastikan untuk mengamankan cadangan terpisah, dan terutama saat menggunakan opsi hapus, pertama-tama periksa perubahan yang diharapkan dengan --dry-run. Sinkronisasi berbeda dari cadangan yang mengembalikan titik sebelumnya karena kesalahan atau kerusakan di sumber juga dapat tercermin di target.
Salinan direktori lokal dan perbedaan tanda garis miring
Berikut adalah contoh membuat folder latihan baru di bawah direktori home dan menyiapkan satu file. Jika sudah ada folder dengan nama yang sama, gunakan nama yang berbeda.
mkdir -p "$HOME/rsync-demo/source" "$HOME/rsync-demo/dest"
printf 'hello\n' > "$HOME/rsync-demo/source/hello.txt"
rsync -av "$HOME/rsync-demo/source/" "$HOME/rsync-demo/dest/"
ls -l "$HOME/rsync-demo/dest/"
Jika hello.txt muncul dalam hasil perintah terakhir, isi dari direktori sumber telah disalin ke target. Menjalankan perintah rsync yang sama lagi biasanya tidak mentransfer ulang file biasa yang belum berubah. Perbandingan dasar menggunakan ukuran file dan waktu modifikasi, sehingga bukan verifikasi lengkap bahwa isinya sama.
/ di akhir sumber berarti isi di dalam direktori, bukan direktori itu sendiri, yang disalin ke target. Jika direktori target sudah ada dan Anda menghilangkan tanda slash, nama direktori sumber akan dibuat di bawah target.
rsync -av "$HOME/rsync-demo/source" "$HOME/rsync-demo/dest/"
Menjalankan perintah ini akan membuat dest/source/hello.txt. dest/hello.txt yang sebelumnya dibuat akan tetap seperti semula. Perbedaan antara kedua jalur ini terutama penting saat menggunakan opsi hapus. Jika ada spasi dalam jalur, bungkus dengan tanda kutip seperti pada contoh.
Opsi yang Sering Digunakan dan Pemeriksaan Sebelumnya
-a: Ini adalah mode arsip. Ini meminta penyalinan secara rekursif dan pelestarian waktu, izin, pemilik, grup, dan tautan simbolik. Pelestarian kepemilikan mungkin terbatas tergantung pada izin dan dukungan sistem file target. ACL dan atribut diperluas tidak termasuk dalam-a.-v: Menampilkan keluaran operasi secara rinci.-natau--dry-run: Menampilkan operasi yang diharapkan tanpa benar-benar melakukan perubahan.-z: Menggunakan kompresi selama transfer. Efektivitasnya bervariasi tergantung pada kondisi jaringan dan jenis file dan tidak selalu diperlukan untuk salinan lokal.
Sebagai contoh, Anda dapat memeriksa sebagai berikut sebelum penyalinan sebenarnya. Output menunjukkan perubahan yang diharapkan, dan jika file berubah atau terjadi kesalahan antara percobaan dan eksekusi nyata, hasil sebenarnya mungkin berbeda.
rsync -avn "$HOME/rsync-demo/source/" "$HOME/rsync-demo/dest/"
Jika Anda perlu memeriksa apakah file dengan ukuran dan waktu modifikasi yang sama sebenarnya memiliki konten yang berbeda, Anda dapat mempertimbangkan perbandingan --checksum, tetapi ini dapat mahal karena kedua file harus dibaca. Untuk makna rinci dari opsi-opsi tersebut, merujuklah ke manual resmi rsync.
Menghapus File yang Hanya Ada di Destinasi
--delete menghapus item dari direktori target sinkronisasi yang tidak ada di sumber. Jika Anda secara tidak sengaja menentukan tujuan atau level direktori yang salah, file yang diperlukan juga dapat terhapus, jadi pertama-tama periksa jalur target dan garis miring di akhir sumber serta tinjau hasil dari percobaan jalannya.
Contoh berikut dapat mencantumkan item yang hanya ada di tujuan, seperti yang dibuat oleh dest/source/ di atas, untuk dihapus. Jalankan hanya ketika tidak ada file yang perlu disimpan di folder latihan.
rsync -avn --delete "$HOME/rsync-demo/source/" "$HOME/rsync-demo/dest/"
Periksa entri deleting dalam output, dan hanya hapus -n untuk menjalankannya secara nyata jika jangkauan penghapusan sudah benar dan cadangan untuk pemulihan sudah siap.
rsync -av --delete "$HOME/rsync-demo/source/" "$HOME/rsync-demo/dest/"
Perintah ini hanya mengubah tujuan dan tidak menghapus file dari sumber. File yang hanya ada di tujuan mungkin tidak dapat dipulihkan tanpa prosedur pemulihan file yang biasa. Siapkan cadangan versi terpisah dan verifikasi pemulihan untuk data operasional.
Mengecualikan File atau Direktori
Untuk mengecualikan direktori cache dari sumber dari target transfer, tentukan sebagai berikut. Karena konten sumber adalah root transfer, garis miring di awal merujuk ke cache di root tersebut. Pertama, jalankan percobaan untuk memastikan hanya item yang diinginkan yang dikecualikan.
rsync -avn --exclude='/cache/' "$HOME/rsync-demo/source/" "$HOME/rsync-demo/dest/"
Jika hasilnya benar, hapus -n dan salin. Aturan pengecualian bawaan umumnya melindungi item pengecualian dari target di --delete, tetapi menggunakan --delete-excluded atau mengubah aturan filter dapat mengubah perilakunya. Periksa pola kompleks di folder terpisah sebelum menerapkannya ke data yang sebenarnya.
Sinkronkan dengan server jarak jauh melalui SSH
Dalam lingkungan yang siap untuk akses SSH, perintah berikut mengirimkan isi dari sumber lokal ke direktori target di server jarak jauh. Ganti user, server.example.com, dan jalur dengan nilai yang sebenarnya, dan siapkan direktori target jarak jauh sebelumnya. Saat menghubungkan untuk pertama kali, verifikasi fingerprint kunci host server melalui saluran yang tepercaya.
rsync -avn -e ssh "$HOME/rsync-demo/source/" user@server.example.com:/home/user/backup/
Setelah meninjau daftar transfer yang diharapkan, hapus -n untuk ditransfer. Sebaliknya, untuk mengambil dari server jarak jauh ke mesin lokal, atur jalur jarak jauh sebagai lokasi sumber.
rsync -avn -e ssh user@server.example.com:/home/user/backup/ "$HOME/rsync-demo/dest/"
Jika port SSH berbeda dari default, misalnya, gunakan -e 'ssh -p 2222'. Untuk akses jarak jauh, disarankan menggunakan akun dengan izin terbatas dan autentikasi kunci SSH. Jangan langsung memasukkan kata sandi dalam perintah karena dapat terekspos dalam informasi proses atau riwayat shell; oleh karena itu, contoh sshpass -p dalam artikel sebelumnya tidak digunakan. Dalam tugas otomatis, kelola perlindungan kunci dan lingkup akses secara bersamaan.




