rsync - apakah itu membuat file temp selama transfer?

37

Sejauh yang saya lihat rsync tidak membuat file di direktori target sampai selesai.

Ini harus berarti bahwa ia membuat file di direktori temp di suatu tempat dan menyalin file ke direktori target ketika selesai.

Pertama, apakah ini benar?

Jika benar, mungkinkah rsync untuk mengatur tidak menggunakan direktori temp dan malah membuat file di direktori target dan terus menulis sampai selesai?

Cheetah
sumber

Jawaban:

46

Ya, itu memang membuat file temp.

Menurut halaman manual Anda dapat menentukan direktori di mana file temp disimpan dengan parameter -T seperti pada

-T, --temp-dir = DIR membuat file sementara di direktori DIR

Jawaban untuk bagian kedua dari pertanyaan Anda juga dapat ditemukan di sana:

--di tempat

Opsi ini mengubah cara rsync mentransfer file ketika data file perlu diperbarui: alih-alih metode default untuk membuat salinan file baru dan memindahkannya ke tempatnya ketika selesai, rsync sebagai gantinya menulis data yang diperbarui langsung ke tujuan. mengajukan.

superuser0
sumber
4
Catatan penting! Pertanyaannya mengasumsikan rsync "menyalin file ke tempatnya", sedangkan dokumentasi rsync menentukan bahwa rsync sebenarnya "memindahkannya ke tempat", yang merupakan DISTINSISI PENTING . Ini memastikan bahwa file muncul di lokasi tujuan dengan cara atom . Ini berguna untuk mencegah kondisi balapan di mana aplikasi lain sedang menunggu file tujuan muncul dan segera membukanya untuk dibaca, tetapi file tersebut tidak selesai disalin.
Ogre Psalm33
15

Itu membuat file temp, secara default di direktori target dan dinamai .<FILE_NAME>.<RANDOM_STRING>. Jadi, jika Anda menyalin foo.txt, itu akan membuat file tmp disebut .foo.txt.GV4H3( GV4H3adalah string acak yang akan berbeda setiap kali Anda menjalankannya). Anda dapat mengontrol perilaku ini menggunakan rsyncopsi ini :

   --partial
          By default, rsync will delete any partially transferred
          file if the transfer is interrupted.  In  some  circum‐
          stances  it  is more desirable to keep partially trans‐
          ferred files. Using the --partial option tells rsync to
          keep  the  partial  file which should make a subsequent
          transfer of the rest of the file much faster.

   --partial-dir=DIR
          A better way to keep partial files than  the  --partial
          option  is  to  specify a DIR that will be used to hold
          the partial data (instead of writing it out to the des‐
          tination file).  On the next transfer, rsync will use a
          file found in this dir as data to speed up the  resump‐
          tion  of  the  transfer and then delete it after it has
          served its purpose.

Silakan baca bagian-bagian yang relevan dari rsynchalaman manual (berikut ini hanya kutipan kecil dari bagian besar tentang cara menggunakan --partial-dir).

terdon
sumber
5

rsync membuat file sementara di direktori target. File itu dinamai seperti sumber tetapi dengan ekstensi. Bisa jadi seperti itu:

source: foo.bar 
target temp: foo.bar.hzmkjt7 (hzmkjt7 is just an example) 

Ekstensi dihapus setelah file diverifikasi menjadi salinan persis sumber. Selama proses penggantian nama, kepemilikan, izin dan waktu modifikasi ditetapkan. Jadi mungkin saja Anda tidak melihat file karena izin. Pastikan Anda memiliki izin yang cukup untuk melihat semua file dan juga yang tidak Anda miliki untuk melihat file temp.

Simon
sumber
Suatu proses membuat file dengan izin pengguna yang menjalankannya . Tidak mungkin untuk tidak melihat file karena izin dalam kasus ini.
Ярослав Рахматуллин
@ ЯрославРахматуллии rsync juga dapat dijalankan dalam mode daemon. Atau bisa dijadwalkan sebagai cronjob. Either way adalah mungkin bahwa pengguna yang menjalankan rsync bukan pengguna yang ingin melihat file temp. Dalam hal ini mungkin ada masalah izin.
Simon
1
File temp mungkin dimulai dengan "." Dalam hal ini, itu adalah .foo.bar.hzmkjt7.
interskh