Rsync yang menangani bergerak dengan masuk akal


10

Saya telah berhasil menggunakan rsync untuk menyinkronkan direktori home saya antara laptop dan netbook saya (keduanya menggunakan ext4 dengan Linux). Satu-satunya masalah dengan itu adalah bahwa kadang-kadang saya ingin sepenuhnya mengatur ulang direktori tertentu, dan rsync melihat ini sebagai penghapusan dan pembuatan file baru, yang membuatnya sangat lambat dan tidak efisien.

Apakah ada yang tahu perangkat lunak yang menangani file bergerak dengan baik?

Saya telah menemukan bahwa serempak harus mampu melakukan ini, tetapi tampaknya tidak berhasil dalam praktiknya. Saya menguji serentak dengan menyinkronkan dua direktori lokal, masing-masing dengan file besar di dalamnya, dan masih mendeteksi langkah saya sebagai penghapusan + kreasi dan berlaku bahkan lebih lambat daripada rsync .

Terlebih lagi, jika saya mengingat dengan benar dari melihat kode sumber serentak beberapa bulan yang lalu, ia mencoba melakukan sesuatu seperti melakukan jumlah sha — dan saya tidak ingin solusi ideal saya melakukan jumlah sha — itu terlalu lambat pada umumnya file / direktori. Saya ingin sesuatu yang memperhatikan hal-hal seperti:

"Mitra sumber terakhir dari file ini tampaknya telah dihapus dan ada file baru di tempat lain di pohon direktori sumber yang memiliki nomor mdate, ukuran, dan inode yang sama, jadi saya hanya akan berasumsi bahwa ini adalah langkah dan pindahkan mitra targetnya dengan sesuai alih-alih melakukan delete + copy. "

Penting bagi saya bahwa saya dapat menyinkronkan mesin ini dengan cepat.

Ada saran?

Jawaban:


6

Anda harus melihat rdiff-backup yang ada di rsyncbawahnya, tetapi dengan kecerdasan tambahan yang Anda butuhkan (dan itu membuat backup tambahan yang mampu memutar kembali, tetapi Anda dapat mengonfigurasi untuk mematikannya).

Rilis terbaru sudah tua (2009), tetapi itu adalah tanda stabilitas.


2
Adakah yang mencobanya?
Kabut

3

Serentak melakukan apa yang Anda inginkan, tetapi hanya untuk sinkronisasi jarak jauh. Coba gunakan ssh://localhost/path/to/dirsebagai salah satu akarnya.

Unison memang mendasarkan keputusannya pada konten file, itu tidak melacak nomor inode.


1

Anda dapat menangani file yang dipindahkan dan diganti namanya dengan rsync jika sistem file pada direktori sumber dan target memiliki dukungan untuk tautan keras. Idenya adalah membiarkan rsync merekonstruksi tautan keras sebelum transfer nyata. Anda dapat menemukan penjelasan yang bagus di sini

Kami berakhir dengan solusi sederhana yang membuat pohon tautan keras yang tersembunyi di dalam direktori sumber / target, skrip dasarnya bisa seperti ini:

# Name of hidden directory
Shadow=".rsync_shadow"

# do real sync
rsync -ahHv --stats --no-inc-recursive --delete --delete-after "$Source"/ "$Target"

# update/create hidden dir of hard links in source
rsync -a --delete --link-dest="$Source" --exclude="/$Shadow" "$Source"/ "$Source/$Shadow"

# update/create hidden dir of hard links in target
rsync -a --delete --link-dest="$Target" --exclude="/$Shadow" "$Target"/ "$Target/$Shadow"

Saya punya contoh skrip di GitHub . Tetapi saya menyarankan Anda untuk melakukan sejumlah besar pengujian sebelum menggunakan metode ini pada produksi.


0

Jika Anda ingin menyinkronkan file antara beberapa mesin, maka Anda mungkin ingin menggunakan sistem kontrol versi terpusat seperti Subversion (atau FSVS, yang menggunakan SVN sebagai backend). Bagian yang bagus adalah bahwa semua yang ada di / home Anda (yang Anda tambahkan ke kontrol versi) kemudian diversi dan dapat dengan mudah disinkronkan ke mesin lain, atau digulirkan kembali.


0

lsyncd juga menangani file yang dipindahkan dengan perilaku rsync + ssh, meskipun agak buggy (saya mendapatkan sekitar 15% gerakan yang ditangani sebagai delete / copy, belum menemukan alasannya). Sebagian besar waktu itu berhasil.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.