rsync - aktarım sırasında geçici bir dosya oluşturuyor mu?


36

Görebildiğim kadarıyla rsync, tamamlanana kadar dosyayı hedef dizinde oluşturmuyor.

Bu, dosyayı temp dizininde bir yerde yarattığı ve tamamlandığında dosyayı hedef dizine kopyaladığı anlamına gelmelidir.

Öncelikle, bu doğru mu?

Doğruysa, rsync'in temp dizini kullanmamasını ve bunun yerine dosyayı hedef dizinde yaratmasını ve tamamlanana kadar yazmaya devam etmesini sağlamak mümkün mü?

Yanıtlar:


45

Evet, geçici bir dosya oluşturur.

Man sayfasına göre temp dosyasının saklandığı dizini -T parametresiyle olduğu gibi belirleyebilirsiniz.

-T, --temp-dir = DIR, DIR dizininde geçici dosyalar oluşturur.

Sorunuzun ikinci bölümüne cevabını burada da bulabilirsiniz:

--inplace

Bu seçenek, dosyanın verileri güncellenmesi gerektiğinde rsync'in bir dosyayı aktarma şeklini değiştirir: varsayılan dosyanın yeni bir kopyasını oluşturmanın ve tamamlandığında yerine getirmesinin varsayılan yöntemi yerine, yerine, güncelleştirilmiş verileri doğrudan hedefe yazar dosya.


4
Önemli Not! Soru, rsync'in "dosyayı yerine kopyaladığını" varsayıyor, oysa rsync belgeleri, rsync'in aslında "yerine taşımak" olduğunu belirterek , önemli bir fark olduğunu söylüyor . Bu, dosyanın hedef konumda atomik bir şekilde görünmesini sağlar . Bu, başka bir uygulamanın hedef dosyanın görünmesini beklediği ve derhal okumak için açtığı yarış koşullarını önlemek için kullanışlıdır, ancak dosya kopyalanmamıştır.
Ogre Psalm33

15

Hedef dizinde varsayılan olarak adlandırılmış ve adlandırılmış bir geçici dosya oluşturur .<FILE_NAME>.<RANDOM_STRING>. Bu nedenle, kopyalıyorsanız foo.txt, adında bir tmp dosyası oluşturacaktır .foo.txt.GV4H3( GV4H3her çalıştırdığınızda farklı olacak rasgele dizedir). Bu rsyncseçeneği aşağıdaki seçenekleri kullanarak kontrol edebilirsiniz :

   --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.

Lütfen rsyncman sayfasının ilgili kısımlarını okuyun (aşağıda, nasıl kullanılacağına ilişkin büyük bölümün yalnızca küçük bir özeti verilmiştir --partial-dir).


5

rsync, hedef dizinde geçici dosyalar oluşturur. Bu dosya kaynak gibi ancak uzantı olarak adlandırılmış. Bu gibi olabilir:

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

Uzantı, dosyanın kaynağın tam bir kopyası olduğu doğrulandıktan sonra kaldırılır. Yeniden adlandırma işlemi sahipliği sırasında, izinler ve değiştirme süresi ayarlanır. Bu nedenle, izinler nedeniyle dosyayı görmemeniz mümkündür. Geçici dosyaları görmek için, tüm dosyaları ve size ait olmayanları görmek için yeterli izniniz olduğundan emin olun.



@ ЯрославРахматуллин rsync daemon modunda da çalıştırılabilir. Veya bir cronjob olarak planlanmış olabilir. Her iki durumda da, rsync'nin çalıştığı kullanıcının temp dosyasını görmek isteyen kullanıcı olmaması mümkündür. Bu durumda bunun bir izin sorunu olması mümkündür.
Simon,

1
Temp dosyası "." İle başlayabilir. Bu durumda, .foo.bar.hzmkjt7'dir.
interskh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.