Pada dasarnya saya mencari untuk melihat apakah ada alat atau skrip yang dapat mendeteksi file yang dipindahkan atau diganti nama sehingga saya bisa mendapatkan daftar file yang diubah namanya / dipindahkan dan menerapkan operasi yang sama di ujung lain jaringan untuk menghemat bandwidth.
Pada dasarnya penyimpanan disk murah tetapi bandwidth tidak, dan masalahnya adalah bahwa file sering akan ditata ulang atau dipindahkan ke dalam struktur direktori yang lebih baik sehingga ketika Anda menggunakan rsync untuk melakukan pencadangan, rsync tidak akan melihat bahwa itu berganti nama atau memindahkan file dan mengirim ulang melalui jaringan lagi meskipun memiliki file yang sama di ujung lainnya.
Jadi saya bertanya-tanya apakah ada skrip atau alat yang dapat merekam di mana semua file berada dan namanya, maka sebelum cadangan, itu akan memindai ulang dan mendeteksi file yang dipindahkan atau diubah namanya, maka saya dapat mengambil daftar itu dan mendaftar ulang operasi pindah / ganti nama di sisi lain.
Berikut adalah daftar fitur "umum" dari file:
- File besar tidak berubah
- Mereka dapat diubah namanya atau dipindahkan
[Sunting:] Ini semua adalah jawaban yang baik, dan apa yang akhirnya saya lakukan pada akhirnya adalah melihat semua jawaban dan akan menulis beberapa kode untuk mengatasinya. Pada dasarnya apa yang saya pikirkan / kerjakan sekarang adalah:
- Menggunakan sesuatu seperti AIDE untuk pemindaian "awal" dan memungkinkan saya untuk menyimpan checksum pada file karena mereka seharusnya tidak pernah berubah, sehingga akan membantu mendeteksi korupsi.
- Membuat daemon inotify yang akan memonitor file / direktori ini dan merekam setiap perubahan yang berkaitan dengan penggantian nama & memindahkan file ke file log.
- Ada beberapa kasus tepi di mana inotify mungkin gagal mencatat bahwa sesuatu terjadi pada sistem file, sehingga ada langkah terakhir menggunakan find untuk mencari sistem file untuk file yang memiliki perubahan waktu lebih lama daripada cadangan terakhir .
Ini memiliki beberapa manfaat:
- Checksums / etc dari AIDE untuk dapat memeriksa / memastikan bahwa beberapa media tidak rusak
- Inotify menjaga penggunaan sumber daya tetap rendah dan tidak perlu memindai ulang sistem file berulang kali
- Tidak perlu menambal rsync; Jika saya harus menambal hal-hal yang saya bisa, tetapi saya lebih suka menghindari menambal hal-hal untuk menjaga beban lebih rendah, (IE tidak perlu menambal kembali setiap kali ada pembaruan).
- Saya telah menggunakan Unison sebelumnya dan ini sangat bagus, namun saya bisa bersumpah bahwa Unison menyimpan salinan di sistem file dan bahwa file "arsip" -nya dapat tumbuh menjadi agak besar?
Ini sedikit solusi yang aneh, tapi ... git mendeteksi gerakan dan penggantian nama berdasarkan konten file, jadi jika Anda ingin menyimpan direktori yang dipertanyakan di bawah kontrol versi maka git akan dapat mendeteksi gerakan dan semacamnya dan menghindari mentransfer konten (karena sudah ada di kedua sisi kawat) sementara masih bergerak di pohon.
Hanya pemikiran saja.
sumber
saran menarik di sini. Juga berpikir untuk menggunakan kemampuan filesystem yaitu ZFS. Rasanya aneh bahwa tidak ada alat yang melakukan hal sederhana itu. Opsi serentak tidak berfungsi dalam banyak kasus seperti yang dilaporkan orang, tidak untuk saya juga.
Saya ingin fitur untuk menyimpan cadangan koleksi film saya di hard disk kedua dalam sinkronisasi ketika mengatur ulang folder.
Sekarang saya menemukan skrip C sederhana ini http://sourceforge.net/projects/movesync/
Tampaknya bekerja dengan baik. Jalankan dan kemudian sinkronkan secara normal dengan mis.
sumber
Anda mungkin dapat menggunakan IDS berbasis host seperti AIDE dan menulis skrip wrapper menggunakan outputnya. Anda mungkin harus menulis logika yang lebih kompleks mengingat checksum.
Jika tidak, sistem file berbasis jaringan mungkin masuk akal, karena perubahan akan tercermin di semua lokasi. Namun demikian, saya menduga Anda mentransfer melalui Internet, yang akan membatasi opsi di sini.
sumber
Anda mungkin mencoba berbarengan ; terutama
opsi yang disebutkan dalam dokumen sebagai
Sepertinya itu mungkin melakukan apa yang Anda inginkan.
sumber
Syrep melakukan apa yang Anda butuhkan. Itu membuat pesan intisari pada pohon file up to date; menjaga pencernaan di sekitar membuatnya lebih efisien daripada rsync. Itu dirancang untuk sneakernet sehingga Anda mungkin ingin menambahkan pembungkus yang melakukan pembaruan / membuat / menggabungkan sekaligus.
sumber
Saya tidak yakin apakah ada alat yang ada yang melakukan ini untuk Anda, tetapi Anda bisa menulis skrip sederhana yang hanya menjalankan
find
pada direktori basis di manamtime
lebih baru dari cadangan terakhir. Ini akan memberi Anda daftar semua file yang telah dimodifikasi . Jika suatu file hanya dipindahkan, itu tidak akan muncul dalam daftar. Sayangnya, daftar ini akan menyertakan direktori tempat file dipindahkan, karena direktori diperbarui ketika file ditambahkan / dihapus.Dengan daftar file itu, Anda dapat menggunakan rsync untuk hanya menyinkronkan file-file itu. rsync memiliki opsi untuk membaca dalam daftar file. Berikut tes yang menunjukkan contoh ini:
Harap dicatat bahwa saya menunggu sekitar 1 menit antara menjalankan setiap
find
perintah. Dari ini, itu menunjukkan bahwa ketika membuat file awalnya, itu terdaftar olehfind
. Jika saya memindahkan file ke direktori lain dan menjalankan kembalifind
perintah, itu hanya menampilkan direktori tempat saya memindahkan file, dan bukan file itu sendiri. Anda dapat menggunakan kombinasifind
danrsync
perintah untuk hanya mencantumkan file yang Anda inginkan, itu mungkin dapat mencapai tujuan Anda.Saya harap ini membantu.
sumber
Dengan alur kerja Anda, saya ingin tahu apakah bekerja di tingkat file (seperti apa yang telah diusulkan orang lain sejauh ini) adalah solusi terbaik. Anda bisa bekerja ...
Pada level sistem file
Idenya adalah untuk membuat sistem file melacak operasi antara cadangan. Alih-alih membuat cadangan sistem file, buat cadangan jurnal sistem file (dan pilih untuk memutar ulang perubahan pada mesin cadangan, jika Anda menginginkan cadangan yang siap digunakan). Jurnal filesystem secara alami mengekspresikan gerakan dan penghapusan dalam beberapa byte.
Fuse membuatnya relatif mudah untuk merancang sistem file dengan persyaratan khusus yang berada di atas "sistem file nyata". Saya tidak pernah menggunakannya, tetapi LoggedFS terlihat menjanjikan.
Dengan solusi ini, akan bermanfaat untuk memiliki beberapa bentuk kompresi jurnal. Misalnya, jika file telah ditimpa 10 kali, hanya perbarui terakhir dalam jurnal. Optimalisasi lain yang bermanfaat adalah mengenali operasi penyalinan, dan bahkan lebih baik, pengeditan (yaitu, membuat file yang sebagian besar tetapi tidak sepenuhnya identik dengan file lain). Saya tidak tahu apakah ada yang menerapkan ini. Untuk alur kerja Anda, saya pikir itu tidak akan menjadi masalah.
Di tingkat volume
Idenya adalah untuk membuat manajer volume melacak operasi antara cadangan. Alih-alih membuat cadangan sistem file, ambil snapshot dengan pengelola volume dan buat cadangan snapshot yang dinyatakan sebagai berbeda dari snapshot sebelumnya.
Ini akan bekerja dengan baik jika semua yang Anda lakukan adalah membuat file, mengubah nama file dan menghapusnya. Akan jauh lebih sulit untuk mendeteksi hal-hal seperti salinan dan pengeditan, atau untuk mengoptimalkan pembuatan file diikuti dengan penghapusannya.
sumber
Serempak baik untuk ini, tetapi masih perlu menyalin file secara lokal dan tidak dapat mendeteksi pemindahan / penggantian nama jika konten file juga berubah sedikit.
Saya membuat skrip Python sederhana untuk mendeteksi nama / memindahkan file dan direktori menggunakan nomor inode (* nix saja) dan memutar ulang perubahan ini pada mesin yang disinkronkan. Anda dapat menggunakannya dengan sendirinya atau sebagai "mengubah nama preprocessor" untuk Unison atau rsync. Itu dapat ditemukan di sini
sumber