menjaga rsync dari menghapus file sumber yang belum selesai

169

Saya memiliki dua mesin, kecepatan dan massa. speed memiliki koneksi internet yang cepat dan menjalankan crawler yang mengunduh banyak file ke disk. Massa memiliki banyak ruang disk. Saya ingin memindahkan file dari kecepatan ke massa setelah selesai mengunduh. Idealnya, saya hanya menjalankan:

$ rsync --remove-source-files speed:/var/crawldir .

tapi saya khawatir rsync akan memutuskan tautan file sumber yang belum selesai diunduh. (Saya melihat kode sumber dan saya tidak melihat ada yang melindungi dari ini.) Ada saran?

aaronsw
sumber

Jawaban:

10

Menurut saya masalahnya adalah mentransfer file sebelum selesai, bukan karena Anda menghapusnya.

Jika ini adalah Linux, mungkin file dibuka oleh proses A dan proses B dapat memutuskan tautan file tersebut. Tidak ada kesalahan, tapi tentu saja A membuang-buang waktu. Oleh karena itu, fakta bahwa rsync menghapus file sumber tidak menjadi masalah.

Masalahnya adalah rsync menghapus file sumber hanya setelah disalin, dan jika masih ditulis ke disk Anda akan memiliki sebagian file.

Bagaimana dengan ini: Mount masssebagai sistem file jarak jauh (NFS akan berfungsi) di speed. Kemudian langsung merayapi file secara langsung.

Jason Cohen
sumber
9

Berapa banyak kendali yang Anda miliki atas proses pengunduhan? Jika Anda menggulung sendiri, Anda dapat meminta file diunduh masuk ke direktori temp atau memiliki nama sementara hingga selesai diunduh, dan kemudian mv ke nama yang benar ketika selesai. Jika Anda menggunakan perangkat lunak pihak ketiga, maka Anda tidak memiliki banyak kontrol, tetapi Anda masih dapat melakukan hal direktori temp.

Paul Tomblin
sumber
3

Rsync dapat mengecualikan file yang cocok dengan patters tertentu. Bahkan jika Anda tidak dapat memodifikasinya untuk mengunduh file ke direktori sementara, mungkin ia memiliki konvensi penamaan file secara berbeda saat mengunduh (misalnya: foo.downloadingsaat mengunduh untuk file bernama foo) dan Anda dapat menggunakan properti ini untuk mengecualikan file yang masih diunduh dari disalin.

Grey Panther
sumber
3

Jika Anda memiliki kendali atas proses perayapan, atau memiliki hasil yang dapat diprediksi, solusi di atas (menyimpan dalam tempfile hingga selesai, lalu beralih ke tempat unduhan yang selesai, atau mengabaikan file dengan jenis nama '.downloading') mungkin bekerja. Jika semua itu di luar kendali Anda, Anda dapat memastikan bahwa file tersebut tidak dibuka oleh proses apa pun dengan melakukan 'lsof $ filename' dan memeriksa apakah ada hasilnya. Jelas jika tidak ada yang membuka file, aman untuk memindahkannya.

pjz
sumber