Tip dan trik rsync favorit

57

Semakin saya menggunakan rsyncsemakin saya menyadari bahwa itu adalah pisau transfer file swiss tentara. Ada begitu banyak pilihan. Saya baru-baru ini menemukan bahwa Anda dapat pergi --remove-source-filesdan itu akan menghapus file dari sumber ketika sudah disalin, yang membuatnya sedikit lebih bergerak, daripada menyalin program. :)

Apa tips dan trik rsync kecil favorit Anda?

Rory
sumber

Jawaban:

19

Coba gunakan rsync versi 3 jika Anda harus menyinkronkan banyak file! V3 membuat daftar file secara bertahap dan jauh lebih cepat dan menggunakan lebih sedikit memori daripada versi 2.

Tergantung pada platform Anda, ini bisa membuat perbedaan. Pada OSX versi 2.6.3 akan membutuhkan waktu lebih dari satu jam atau crash saat mencoba membuat indeks 5 juta file sementara versi 3.0.2 yang saya kompilasi mulai menyalin segera.

merampok
sumber
Satu hal yang perlu diperhatikan adalah bahwa jika Anda menggunakan beberapa opsi (seperti --delete-beforemisalnya) perilaku "build list first" yang lama digunakan karena diperlukan agar opsi ini bekerja dengan benar - jadi jika Anda tidak melihat perilaku ini periksa apakah opsi lain yang Anda gunakan diketahui menghentikannya. Ini dapat berguna jika Anda menggunakan rsync secara interaktif pada pohon besar dan ingin memaksakan pemindaian awal sehingga output --progressakurat (mis. Jumlah "objek untuk membandingkan" tidak akan pernah naik karena tidak ada objek baru yang akan ditemukan setelah pemindaian awal ).
David Spillett
18

Menggunakan --link-destuntuk membuat cadangan berbasis snapshot yang efisien-ruang, di mana Anda tampaknya memiliki beberapa salinan lengkap dari data yang didukung (satu untuk setiap proses pencadangan), tetapi file yang tidak berubah di antara proses berjalan sulit dikaitkan alih-alih menciptakan ruang penyimpanan salinan baru.

(sebenarnya, saya masih menggunakan metode rysnc-followed-by-cp -al yang mencapai hal yang sama, lihat http://www.mikerubel.org/computers/rsync_snapshots/ untuk menjalankan yang lama tapi masih sangat bagus dari kedua teknik ini. dan masalah terkait)

Salah satu kelemahan utama dari teknik ini adalah bahwa jika sebuah file rusak karena kesalahan disk itu sama korup dalam semua snapshot yang terhubung ke file itu, tapi saya punya backup offline juga yang akan melindungi terhadap hal ini sampai batas yang layak. Hal lain yang perlu diperhatikan adalah filesystem Anda memiliki cukup inode atau Anda akan kehabisan mereka sebelum Anda benar-benar kehabisan ruang disk (walaupun saya tidak pernah memiliki masalah dengan ext2 / 3 default).

Juga, jangan pernah lupakan sangat sangat berguna --dry-rununtuk paranoia yang sedikit sehat, terutama ketika Anda menggunakan --delete*opsi.

David Spillett
sumber
6
+1 untuk --dry-run
David Z
1
Perhatikan bahwa -n adalah jalan pintas untuk --dry-run
ctennis
3
Saya lebih suka menggunakan nama-nama panjang, terutama dalam skrip yang akhirnya dapat dipertahankan oleh orang lain. Itu membuatnya lebih jelas apa yang dimaksudkan tanpa mengacu pada dokumen.
David Spillett
+1 Saya menerapkan solusi cadangan dari banyak TB pada banyak mesin dengan metode --link-dest untuk snapshot yang terhubung seperti dijelaskan di atas - ini bekerja dengan sempurna.
matja
Jika Anda suka --link-dest backup, lihat Dirvish yang menggunakan rsync di bawah tenda
hfs
14

Jika Anda perlu memperbarui situs web dengan beberapa file besar melalui tautan lambat, Anda dapat mentransfer file kecil ini dengan cara:

rsync -a --max-size = 100K / var / www / di sana: / var / www /

kemudian lakukan ini untuk file besar:

rsync -a --min-size = 100K --bwlimit = 100 / var / www / ada: / var / www /

rsync memiliki banyak opsi yang berguna untuk situs web. Sayangnya, ia tidak memiliki cara built-in untuk mendeteksi pembaruan secara simultan, jadi Anda harus menambahkan logika ke skrip cron untuk menghindari tumpang tindih penulisan file besar.

Bob
sumber
10

Saya menggunakan opsi --existing ketika mencoba menyimpan sebagian kecil file dari satu direktori yang disinkronkan ke lokasi lain.

TCampbell
sumber
Terima kasih! Ini baru saja menyelamatkan saya dari beberapa penulisan aturan filter yang tidak menyenangkan.
benzado
8

--rsh milikku.

Saya telah menggunakannya untuk mengubah cipher pada ssh menjadi sesuatu yang lebih cepat ( --rsh="ssh -c arcfour") juga untuk mengatur rantai sshs (merekomendasikan menggunakannya dengan ssh-agent) untuk menyinkronkan file antara host yang tidak dapat berbicara secara langsung. ( rsync -av --rsh="ssh -TA userA@hostA ssh -TA -l userB" /tmp/foobar/ hostB:/tmp/foobar/).

Stephen Paul Lesniewski
sumber
7
--time-limit

Ketika opsi ini digunakan rsync akan berhenti setelah T menit dan keluar. Saya pikir opsi ini berguna ketika melakukan rsyncing sejumlah besar data pada malam hari (jam non-sibuk), dan kemudian berhenti ketika tiba saatnya bagi orang untuk mulai menggunakan jaringan, pada siang hari (jam sibuk).

--stop-at=y-m-dTh:m

Opsi ini memungkinkan Anda menentukan kapan berhenti rsync.

Batch Mode

Mode batch dapat digunakan untuk menerapkan serangkaian pembaruan yang sama ke banyak sistem yang identik.

jftuga
sumber
Berguna! Saya telah menggunakan perintah "at" sebelum untuk membunuh proses
Lionel
Sumber tambalan: rsync.samba.org/ftp/rsync/rsync-patches-3.1.0.tar.gz ; Biner Win32 dengan tambalan termasuk: itefix.no/i2/cwrsync
jftuga
2
Sayangnya opsi ini tidak tersedia di rsync yang didistribusikan dengan distro Redhat / Centos atau Ubuntu.
IanB
@Lionel: Bagaimana Anda menggunakan atuntuk membunuh prosesnya?
IMTheNachoMan
6

Jika Anda bertanya-tanya seberapa jauh rsync yang berjalan lambat, dan tidak menggunakan -v untuk mendaftar file saat ditransfer, Anda dapat mengetahui file mana yang telah dibuka:

 ls -l /proc/$(pidof rsync)/fd/*

pada sistem yang memiliki / proc

Misalnya rsync digantung untuk saya sekarang, meskipun sistem jarak jauh tampaknya memiliki banyak ruang tersisa. Trik ini membantu saya menemukan file besar yang tidak terduga yang saya tidak ingat, yang tidak muat di ujung lainnya.

Itu juga memberi tahu saya informasi yang sedikit lebih menarik - ujung yang lain tampaknya menyerah, karena ada juga tautan soket yang rusak:

/proc/22954/fd/4: broken symbolic link to `socket:[2387837]'
nealmcb
sumber
5

--archive adalah pilihan standar (meskipun bukan default) untuk pekerjaan seperti cadangan, yang memastikan sebagian besar metadata dari file sumber (izin, kepemilikan, dll.) disalin ke seberang.

Namun, jika Anda tidak ingin menggunakannya, seringkali Anda masih ingin memasukkan --times, yang akan menyalin seluruh waktu modifikasi file. Ini membuat rsync berikutnya yang berjalan (dengan asumsi Anda melakukannya berulang kali) jauh lebih cepat, karena rsync membandingkan waktu modifikasi dan melewatkan file jika tidak berubah. Anehnya (bagi saya setidaknya) opsi ini bukan default.

Andrew Ferrier
sumber
4

Yang paling sering saya gunakan adalah --exclude-fromyang memungkinkan Anda menentukan file yang berisi hal-hal yang harus dikecualikan.

Saya juga menemukan --chmodsangat berguna karena memungkinkan Anda memastikan bahwa izin berakhir dalam keadaan yang diinginkan bahkan jika sumber Anda kacau.

innaM
sumber
4

--backup-dir = date +%Y.%m.%d--delete Kami menghapus tetapi membuat salinan ... untuk berjaga-jaga


sumber
4

Milik saya --inplace. Bekerja dengan sangat baik ketika server untuk cadangan menjalankan ZFS atau btrfs dan Anda membuat snapshot asli.

Hubert Kario
sumber
3

Tentu saja, ada juga --deleteyang menghapus barang dari target yang tidak dapat ditemukan di sumbernya.

innaM
sumber
2

cwrsync - Rsync untuk Windows http://www.itefix.no/i2/node/10650

Versi ini termasuk OpenSSH sehingga Anda dapat mengirim file melalui saluran aman.

jftuga
sumber
Saya menggunakan cwrsync, dan itu bagus. Sangat senang seseorang membawa kemampuan luar biasa ini ke Windows.
Andrew Ensley
2
--partial 

Dalam hal terjadi gangguan

--bwlimit=100

Untuk membatasi bandwidth - bagus untuk menyalin file besar, direktori

pemberontak
sumber
Apa unitnya bwlimit? bit per detik, byte per detik?
Timo Kähkönen
@Timo, bwlimit ada di KBytes / detik.
Andrew Ferrier
1

Jika Anda memiliki rsync yang diatur sebagai daemon di server, Anda dapat menelusuri modul bersama seperti daftar direktori lainnya. Kemudian Anda bisa melihat jalur mana yang tersedia dan yang tidak.

sybreon
sumber
1

ketika saya menggunakan GlusterFs kami mengalami hambatan dengan file T dengan ukuran nol, untuk sinkronisasi antara crashed brick atau replika yang harus kami gunakan --min-size=1untuk tidak menyinkronkan file kosong dari server crash.

vakid chakoshy
sumber