Rabu, 20 Februari 2019

Pertanyaan rsync

Pertanyaan Bagaimana cara saya membuat rsync menghapus file yang telah dihapus dari folder sumber?


Saya baru-baru ini membuat mesin dengan Ubuntu Server untuk meng-host server game. Saya menginstal plugin cadangan untuk setiap server game yang sering membuat cadangan file dunia game di folder tertentu pada mesin. Saya juga mendirikan sebuah cron tugas untuk secara otomatis menyalin cadangan tersebut ke folder Dropbox saya setiap malam menggunakan rsync dengan -a pilihan.
Setelah beberapa bulan, akun Dropbox saya mencapai batas penyimpanannya dan saya menyadari bahwa saya tidak akan dapat menyimpan begitu banyak cadangan, jadi saya mengonfigurasi plugin cadangan server game untuk tidak menyimpan begitu banyak cadangan, lalu menunggu beberapa hari untuk melihat apakah itu akan hapus cadangan lama seperti yang dijadwalkan dilakukan setiap minggu. Plugin cadangan akhirnya melakukan tugasnya dan menghapus cadangan lama, jadi saya mengharapkan rsync tugas cron untuk menghapus cadangan lama dari folder Dropbox saya untuk mencocokkan folder sumber, tetapi belum melakukannya. Jadi saya punya beberapa pertanyaan:
  • Secara default, tidak rsync hanya menambahkan file ke folder tujuan yang telah ditambahkan ke folder sumber dan perubahan file itu telah diubah dalam folder sumber tetapi BUKAN menghapus file yang dihapus dari folder sumber?
  • Jika itu masalahnya, apa cara terbaik untuk membuatnya rsync melakukan hal ini? saya ingin folder tujuan memantulkan folder sumber dengan sempurna, dan itu berarti menghapus semua file yang telah dihapus dari sumbernya map.
Saya melihat beberapa opsi yang tercantum di halaman manual untuk rsync yang mungkin melakukan trik, tapi karena saya tidak terbiasa.

 128
 2018-06-03 03:53


asal




Jawaban:


Untuk menghapus file dalam target, tambahkan --delete pilihan untuk perintah Anda. Sebagai contoh:
rsync -avh source/ dest/ --delete

 146
 2017-08-26 07:14



Mungkin menggunakan -aqr sebaliknya juga akan menjadi ide :) - TheBicentennialMan
Pastikan sumbernya adalah direktori. Menggunakan source/* dest/ tidak akan berfungsi. - Tom Saleeba
Saya menemukan acara itu dengan --delete atau --delete-after itu tidak akan menghapus karena beberapa kesalahan: "IO error encounter - skipping file deletion". Untuk mengatasi ini tambahkan --ignore-errors opsi dan debug kesalahan secara terpisah - MHT
Bekerja dengan sempurna! Meskipun bekerja, saya akan merekomendasikan untuk SELALU menggunakannya -n, --dry-run pilihan, sebelum menjalankan rsync, khususnya ketika datang ke opsi seperti ini (--delete). Ini akan menghindari kemungkinan sakit kepala :). - ivanleoncz
@MHT: Sepertinya tidak ada jawaban yang lengkap tanpa komentar Anda. - Lonnie Best


Itu rsync perintah tidak akan menghapus file apa pun saat Anda menggunakan beberapa opsinya delete dalam perintah itu. Jadi jika ada file atau folder yang ditambahkan di sumber, itu akan disinkronkan ke target tanpa penghapusan.
Saya menyarankan Anda untuk menggunakannya rsync untuk membuat cadangan dari file sumber dan penggunaan find ... rm untuk file penghapusan untuk jangka waktu atau ukuran file:
rsync [options] SOURCE TARGET
find TARGET -maxdepth 1 -type f -mtime +60 -exec rm -f {} \;
Blok kode di atas, membuat cadangan dari sumber dan kemudian menghapus setiap file yang terakhir kali diubah lebih dari 2 bulan.
MEMPERBARUI
Seperti yang saya temukan bahwa delete pilihan hanya untuk TARGET bahwa jika beberapa file dihapus dari sumber, rsync --delete menghapusnya dari TARGET. Dan itu delete opsi oleh after dan before, seperti yang disebutkan di halaman manualnya:
--delete-before         receiver deletes before transfer, not during
Maksudnya:
  1. rsync menghapus file dari TARGET yang dihapus dari SOURCE.
  2. rsync mulai menyinkronkan file.
--delete-after receiver deletes after transfer, not during
Maksudnya:
  1. rsync mulai menyinkronkan file.
  2. rsync menghapus file dari TARGET yang dihapus dari SOURCE setelah menyinkronkan.
CATATAN: the --delete-{before/after} terapkan hanya di TARGET.

 32
 2018-06-03 04:13



Terima kasih balasannya!! Apakah Anda mengacu pada opsi "hapus" untuk rsync? Mengapa saya tidak bisa menggunakan opsi "hapus" untuk rsync? - user254251
@ user254251, Jika Anda menggunakan delete, perintah rsync segera menghapus file. Namun dalam hal ini ada lebih banyak waktu untuk kesalahan apa pun. - shgnInc
Jika saya mengerti dengan benar, Anda mengatakan saya harus memisahkan tugas penghapusan dari tugas rsync untuk menghindari kesalahan. Saya punya pertanyaan. Halaman manual untuk rsync mencantumkan beberapa opsi yang tampaknya melayani tujuan memisahkan tugas penghapusan dengan menjalankannya sebelum atau setelah tugas penyalinan. Sebagai contoh, saya melihat dua opsi yang disebut --delete-before dan --delete-after. Apakah rsync dengan opsi-opsi ini memiliki efek yang sama dengan metode yang Anda gambarkan? Saya membaca deskripsi lengkap setiap opsi pada halaman buku panduan tetapi ada beberapa informasi dalam deskripsi yang saya tidak mengerti. - user254251
@ user254251, Jawaban telah diperbarui. Saya tidak tahu apakah ada cara untuk menghapus file dari TARGET berdasarkan batasan waktu rsync. - shgnInc
Terima kasih! Jadi, menurut Anda saya aman dari kesalahan jika saya hanya menggunakan opsi --delete-before? Saya tidak menentukan batas waktu sehingga saya tidak perlu khawatir jika tahap penghapusan rsync menunda tahap transfer. rsync berjalan satu kali per hari dan itu adalah banyak waktu untuk menyinkronkan file cadangan sebelum sinkronisasi berikutnya, jadi saya tidak perlu membatasi waktu sinkronisasi juga. - user254251


Perintah ini akan menyalin data tambahan dan menjaganya tetap sinkron dengan server jarak jauh.
  1. Ini hanya akan menyalin data inkremental.
  2. Ini akan menghapus jika ada data yang dihapus dari sumber.
  3. Ini akan menyalin lagi dari sumber jika ada data yang dihapus di tempat tujuan.
  4. pada dasarnya perintah ini akan menjaga kedua lingkungan tetap sinkron.
rsync -avWe ssh --delete-before (source) root@localhost:(destination) rsync -avW --delete-before -e ssh (source) root@localhost:(destination)
Contoh:
rsync -avWe ssh --delete-before /data root@192.168.254.254:/backup
rsync -avW --delete-before -e ssh /data root@192.168.254.254:/backup

Tidak ada komentar:

Posting Komentar