Peringatan: Hanya Geeks Lanjutan
Jika Anda duduk di sana berpikir "Apa sih rsync?" Atau "Saya hanya menggunakan rsync untuk tugas-tugas yang sangat sederhana," Anda mungkin ingin memeriksa artikel kami sebelumnya tentang cara menggunakan rsync untuk mem-backup data Anda di Linux, yang memberi pengantar rsync, memandu Anda melalui instalasi, dan menampilkan fungsi-fungsinya yang lebih mendasar. Setelah Anda memahami bagaimana menggunakan rsync (jujur, tidak begitu rumit) dan merasa nyaman dengan terminal Linux, Anda siap untuk melanjutkan ke panduan lanjutan ini.
Menjalankan rsync di Windows
Pertama, mari dapatkan pembaca Windows kami di halaman yang sama dengan para ahli Linux kami. Meskipun rsync dibangun untuk berjalan pada sistem mirip Unix, tidak ada alasan bahwa Anda tidak dapat menggunakannya dengan mudah di Windows. Cygwin menghasilkan API Linux yang luar biasa yang dapat kita gunakan untuk menjalankan rsync, jadi pergilah ke situs web mereka dan unduh versi 32-bit atau 64-bit, tergantung pada komputer Anda.
Instalasi sangat mudah; Anda dapat menyimpan semua opsi pada nilai standarnya sampai Anda masuk ke layar "Pilih Paket".
Memasang Vim:
Perintah rsync: Sederhana hingga Lanjutan
Sekarang pengguna Windows berada di halaman yang sama, mari kita lihat perintah rsync sederhana, dan tunjukkan bagaimana penggunaan beberapa sakelar canggih dapat dengan cepat menjadikannya kompleks.
Katakanlah Anda memiliki banyak file yang perlu dicadangkan - siapa yang tidak belakangan ini? Anda mencolokkan hard drive portabel Anda sehingga Anda dapat membuat cadangan file komputer Anda, dan jalankan perintah berikut:
rsync -a /home/geek/files/ /mnt/usb/files/
Atau, cara itu akan terlihat pada komputer Windows dengan Cygwin:
rsync -a /cygdrive/c/files/ /cygdrive/e/files/
Cukup sederhana, dan pada saat itu benar-benar tidak perlu menggunakan rsync, karena Anda hanya dapat menyeret dan menjatuhkan file. Namun, jika hard drive Anda yang lain sudah memiliki beberapa file dan hanya perlu versi yang diperbarui ditambah file yang telah dibuat sejak sinkronisasi terakhir, perintah ini berguna karena hanya mengirim data baru ke hard drive. Dengan file-file besar, dan terutama mentransfer file melalui internet, itu adalah masalah besar.
Mencadangkan file Anda ke hard drive eksternal dan kemudian menyimpan hard drive di lokasi yang sama dengan komputer Anda adalah ide yang sangat buruk, jadi mari kita lihat apa yang akan diperlukan untuk mulai mengirim file Anda melalui internet ke komputer lain ( yang Anda sewa, anggota keluarga, dll.)
rsync -av --delete -e 'ssh -p 12345’ /home/geek/files/ [email protected]:/home/geek2/files/
Perintah di atas akan mengirim file Anda ke komputer lain dengan alamat IP 10.1.1.1. Ini akan menghapus file asing dari tujuan yang tidak lagi ada di direktori sumber, menampilkan nama file yang ditransfer sehingga Anda memiliki gagasan tentang apa yang terjadi, dan tunnel rsync melalui SSH di port 12345.
Itu
-a -v -e --delete
switch adalah beberapa yang paling dasar dan umum digunakan; Anda seharusnya sudah tahu banyak tentang mereka jika Anda membaca tutorial ini. Mari membahas beberapa tombol lain yang terkadang diabaikan tetapi sangat berguna:
--progress
- Switch ini memungkinkan kita untuk melihat perkembangan transfer dari setiap file. Ini sangat berguna ketika mentransfer file besar melalui internet, tetapi dapat menghasilkan jumlah informasi yang tidak masuk akal ketika hanya mentransfer file kecil di seluruh jaringan yang cepat.
Perintah rsync dengan
--progress
beralih sebagai cadangan sedang berlangsung:
--partial
- Ini adalah saklar lain yang sangat berguna ketika mentransfer file besar melalui internet. Jika rsync terputus karena alasan apa pun di tengah transfer file, file yang ditransfer sebagian disimpan di direktori tujuan dan transfer dilanjutkan kembali setelah perintah rsync dijalankan lagi. Ketika mentransfer file besar melalui internet (katakanlah, beberapa gigabyte), tidak ada yang lebih buruk daripada memiliki beberapa pemadaman internet kedua, layar biru, atau kesalahan manusia dalam perjalanan transfer file Anda dan harus mulai dari awal lagi.
-P
- switch ini menggabungkan
--progress
dan
--partial
jadi gunakan saja dan itu akan membuat perintah rsync Anda sedikit lebih rapi.
-z
atau
--compress
- Switch ini akan membuat data file kompres rsync saat ditransfer, mengurangi jumlah data yang harus dikirim ke tujuan. Ini sebenarnya adalah saklar yang cukup umum tetapi jauh dari penting, hanya benar-benar menguntungkan Anda pada transfer antara koneksi lambat, dan tidak melakukan apa pun untuk jenis file berikut ini: 7z, avi, bz2, deb, g, z iso, jpeg, jpg, mov, mp3, mp4, ogg, rpm, tbz, tgz, z, zip.
-h
atau
--human-readable
- Jika Anda menggunakan
--progress
beralih, Anda pasti ingin menggunakan yang ini juga. Yaitu, kecuali Anda ingin mengonversi byte ke megabyte dengan cepat. Itu
-h
switch mengkonversi semua nomor yang dikeluarkan ke format yang dapat dibaca manusia, sehingga Anda dapat benar-benar memahami jumlah data yang ditransfer.
-n
atau
--dry-run
- Switch ini penting untuk mengetahui saat Anda pertama kali menulis skrip rsync dan mengujinya. Ini menjalankan uji coba tetapi sebenarnya tidak membuat perubahan apa pun - perubahan yang diinginkan tetap dikeluarkan sebagai normal, sehingga Anda dapat membaca semuanya dan memastikan semuanya terlihat baik sebelum meluncurkan skrip Anda ke dalam produksi.
-R
atau
--relative
- Saklar ini harus digunakan jika direktori tujuan belum ada. Kami akan menggunakan opsi ini nanti dalam panduan ini sehingga kami dapat membuat direktori pada mesin target dengan cap waktu dalam nama folder.
--exclude-from
- Switch ini digunakan untuk menautkan ke daftar pengecualian yang berisi jalur direktori yang tidak Anda inginkan untuk dicadangkan. Itu hanya membutuhkan file teks biasa dengan direktori atau path file di setiap baris.
--include-from
- Mirip dengan
--exclude-from
tetapi tautan ke file yang berisi direktori dan jalur file data yang ingin Anda cadangkan.
--stats
- Tidak benar-benar sebuah tombol penting dengan cara apa pun, tetapi jika Anda seorang sysadmin, itu bisa berguna untuk mengetahui statistik rinci dari setiap cadangan, supaya Anda dapat memantau jumlah lalu lintas yang dikirim melalui jaringan Anda dan semacamnya.
--log-file
- Ini memungkinkan Anda mengirim output rsync ke file log. Kami sangat menyarankan ini untuk pencadangan otomatis di mana Anda tidak ada di sana untuk membaca sendiri hasilnya. Selalu berikan file log sekali lagi di waktu luang Anda untuk memastikan semuanya berfungsi dengan benar. Selain itu, ini adalah tombol penting untuk digunakan sysadmin, jadi Anda tidak perlu bertanya-tanya bagaimana cadangan Anda gagal saat Anda meninggalkan magang yang bertanggung jawab.
Mari kita lihat pada perintah rsync kita sekarang setelah kita memiliki beberapa tambahan yang ditambahkan:
rsync -avzhP --delete --stats --log-file=/home/geek/rsynclogs/backup.log --exclude-from '/home/geek/exclude.txt' -e 'ssh -p 12345' /home/geek/files/ [email protected]:/home/geek2/files/
Perintahnya masih cukup sederhana, tetapi kami masih belum membuat solusi cadangan yang layak. Meskipun file kami sekarang berada di dua lokasi fisik yang berbeda, pencadangan ini tidak melakukan apa pun untuk melindungi kami dari salah satu penyebab utama kehilangan data: kesalahan manusia.
Snapshot Backup
Jika Anda tidak sengaja menghapus file, virus merusak file Anda, atau sesuatu yang lain yang mengubah file Anda secara tidak diinginkan, dan kemudian Anda menjalankan skrip cadangan rsync Anda, data yang dicadangkan akan ditimpa dengan perubahan yang tidak diinginkan. Ketika hal seperti itu terjadi (bukan jika, tetapi ketika), solusi cadangan Anda tidak melakukan apa pun untuk melindungi Anda dari kehilangan data Anda.
Pencipta rsync menyadari hal ini, dan menambahkan
--backup
dan
--backup-dir
argumen sehingga pengguna dapat menjalankan cadangan diferensial. Contoh pertama di situs web rsync menunjukkan skrip tempat cadangan penuh dijalankan setiap tujuh hari, dan kemudian perubahan ke file tersebut dicadangkan dalam direktori terpisah setiap hari. Masalah dengan metode ini adalah bahwa untuk memulihkan file Anda, Anda harus secara efektif memulihkannya tujuh kali berbeda. Selain itu, sebagian besar geek menjalankan cadangannya beberapa kali sehari, sehingga Anda dapat dengan mudah memiliki lebih dari 20 direktori cadangan yang berbeda pada waktu tertentu. Anda tidak hanya memulihkan file Anda sekarang, tetapi hanya dengan melihat data yang dicadangkan dapat sangat memakan waktu - Anda harus tahu kapan terakhir kali file diubah untuk menemukan salinan cadangan yang terbaru. Di atas semua itu, tidak efisien untuk hanya menjalankan pencadangan inkremental mingguan (atau bahkan lebih jarang dalam beberapa kasus).
Snapshot backup untuk menyelamatkan! Snapshot backup tidak lebih dari incremental backup, tetapi mereka menggunakan hardlink untuk mempertahankan struktur file dari sumber aslinya. Mungkin sulit untuk memusingkan kepala Anda pada awalnya, jadi mari kita lihat contohnya.
Anggap kami memiliki skrip cadangan yang secara otomatis mencadangkan data kami setiap dua jam. Kapan pun rsync melakukan ini, nama setiap cadangan dalam format: Backup-bulan-hari-tahun-waktu.
Jadi, pada akhirnya hari-hari biasa, kami akan memiliki daftar folder di direktori tujuan kami seperti ini:
--link-dest=DIR
argumen.
Tentu saja, untuk memiliki nama-nama direktori yang bagus dan rapi ini, kita harus memperkuat skrip rsync kita sedikit. Mari kita lihat apa yang diperlukan untuk menyelesaikan solusi cadangan seperti ini, lalu kami akan menjelaskan skrip secara lebih detail:
#!/bin/bash
#copy old time.txt to time2.txt
yes | cp ~/backup/time.txt ~/backup/time2.txt
#overwrite old time.txt file with new time
echo `date +”%F-%I%p”` > ~/backup/time.txt
#make the log file
echo “” > ~/backup/rsync-`date +”%F-%I%p”`.log
#rsync command
rsync -avzhPR --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r --delete --stats --log-file=~/backup/rsync-`date +”%F-%I%p”`.log --exclude-from '~/exclude.txt' --link-dest=/home/geek2/files/`cat ~/backup/time2.txt` -e 'ssh -p 12345' /home/geek/files/ [email protected]:/home/geek2/files/`date +”%F-%I%p”`/
#don’t forget to scp the log file and put it with the backup
scp -P 12345 ~/backup/rsync-`cat ~/backup/time.txt`.log [email protected]:/home/geek2/files/`cat ~/backup/time.txt`/rsync-`cat ~/backup/time.txt`.log
Itu akan menjadi skrip rsync snapshot khas. Jika kami kehilangan Anda di suatu tempat, mari kita membedahnya sepotong demi sepotong:
Baris pertama skrip kami menyalin isi time.txt ke time2.txt. Ya pipa adalah untuk mengkonfirmasi bahwa kami ingin menimpa file. Selanjutnya, kita mengambil waktu sekarang dan memasukkannya ke dalam time.txt. File-file ini akan berguna nantinya.
Baris berikutnya membuat file log rsync, menamakannya rsync-date.log (di mana tanggal adalah tanggal dan waktu aktual).
Sekarang, perintah rsync kompleks yang telah kami tegaskan kepada Anda tentang:
-avzhPR, -e, --delete, --stats, --log-file, --exclude-from, --link-dest
- Hanya tombol yang kita bicarakan sebelumnya; gulir ke atas jika Anda membutuhkan penyegaran.
--chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r
- Ini adalah izin untuk direktori tujuan. Karena kami membuat direktori ini di tengah-tengah skrip rsync kami, kami perlu menentukan izin sehingga pengguna kami dapat menulis file ke dalamnya.
Penggunaan tanggal dan perintah kucing
Kami akan membahas setiap penggunaan tanggal dan perintah kucing di dalam perintah rsync, sesuai urutannya. Catatan: kami sadar bahwa ada cara lain untuk menyelesaikan fungsi ini, terutama dengan penggunaan mendeklarasikan variabel, tetapi untuk tujuan panduan ini, kami memutuskan untuk menggunakan metode ini.
File log ditetapkan sebagai:
~/backup/rsync-`date +”%F-%I%p”`.log
Alternatifnya, kita bisa menetapkannya sebagai:
~/backup/rsync-`cat ~/backup/time.txt`.log
Either way, the
--log-file
perintah harus dapat menemukan file log tanggal yang dibuat sebelumnya dan menulis ke sana.
File tujuan tautan ditetapkan sebagai:
--link-dest=/home/geek2/files/`cat ~/backup/time2.txt`
Ini berarti bahwa
--link-dest
perintah diberikan direktori dari cadangan sebelumnya. Jika kami menjalankan cadangan setiap dua jam, dan ini adalah pukul 16.00 pada saat kami menjalankan skrip ini, maka itu
--link-dest
perintah mencari direktori yang dibuat pada 2:00 PM dan hanya mentransfer data yang telah berubah sejak saat itu (jika ada).
Untuk mengulangi, itulah sebabnya time.txt disalin ke time2.txt di awal skrip, jadi
--link-dest
perintah bisa referensi waktu itu nanti.
Direktori tujuan ditentukan sebagai:
[email protected]:/home/geek2/files/`date +”%F-%I%p”`
Perintah ini hanya menempatkan file sumber ke dalam direktori yang memiliki judul tanggal dan waktu saat ini.
Akhirnya, kami memastikan bahwa salinan file log ditempatkan di dalam cadangan.
scp -P 12345 ~/backup/rsync-`cat ~/backup/time.txt`.log [email protected]:/home/geek2/files/`cat ~/backup/time.txt`/rsync-`cat ~/backup/time.txt`.log
Kami menggunakan salinan aman pada port 12345 untuk mengambil rsync log dan letakkan di direktori yang tepat. Untuk memilih file log yang benar dan memastikannya berakhir di tempat yang tepat, file time.txt harus dirujuk melalui perintah cat. Jika Anda bertanya-tanya mengapa kami memutuskan untuk cat time.txt daripada hanya menggunakan perintah tanggal, itu karena banyak waktu bisa terjadi ketika perintah rsync sedang berjalan, jadi untuk memastikan kami memiliki waktu yang tepat, kami hanya kucing dokumen teks yang kami buat sebelumnya.
Otomatisasi
Gunakan Cron di Linux atau Task Scheduler di Windows untuk mengotomatiskan skrip rsync Anda. Satu hal yang harus Anda waspadai adalah memastikan bahwa Anda mengakhiri proses rsync yang sedang berjalan sebelum melanjutkan yang baru. Penjadwal Tugas tampaknya menutup semua instance yang sudah berjalan secara otomatis, tetapi untuk Linux Anda harus sedikit lebih kreatif.
Kebanyakan distribusi Linux dapat menggunakan perintah pkill, jadi pastikan untuk menambahkan yang berikut ini ke awal skrip rsync Anda:
pkill -9 rsync
Enkripsi
Tidak, kami belum selesai. Kami akhirnya memiliki solusi cadangan yang fantastis (dan gratis!) Di tempat, tetapi semua file kami masih rentan terhadap pencurian. Semoga, Anda mencadangkan file Anda ke suatu tempat yang berjarak ratusan mil. Tidak peduli seberapa aman tempat yang jauh itu, pencurian dan peretasan selalu bisa menjadi masalah.
Dalam contoh kami, kami telah menyalurkan semua lalu lintas rsync kami melalui SSH, sehingga itu berarti semua file kami dienkripsi saat transit ke tujuan mereka. Namun, kita perlu memastikan tujuannya sama amannya. Perlu diingat bahwa rsync hanya mengenkripsi data Anda saat ditransfer, tetapi file terbuka lebar setelah mencapai tujuan.
Salah satu fitur terbaik rsync adalah hanya mentransfer perubahan dalam setiap file. Jika Anda memiliki semua file Anda dienkripsi dan membuat satu perubahan kecil, seluruh file harus ditransmisikan sebagai hasil dari enkripsi sepenuhnya mengacak semua data setelah perubahan apa pun.
Karena alasan ini, sebaiknya / gunakan beberapa jenis enkripsi disk, seperti BitLocker untuk Windows atau dm-crypt untuk Linux. Dengan begitu, data Anda terlindungi jika terjadi pencurian, tetapi file dapat ditransfer dengan rsync dan enkripsi Anda tidak akan menghambat kinerjanya. Ada pilihan lain yang tersedia yang bekerja sama dengan rsync atau bahkan mengimplementasikan beberapa bentuknya, seperti Duplicity, tetapi mereka tidak memiliki beberapa fitur yang ditawarkan rsync.
Setelah Anda menyiapkan cadangan snapshot Anda di lokasi offsite dan mengenkripsi hard drive sumber dan tujuan Anda, beri diri Anda tepukan di belakang untuk menguasai rsync dan terapkan solusi backup data yang sangat mudah.