Dosyaları dizinler arasında taşımak (kopyalamamak) için rsync kullanmak?


54

Bir süredir dosyaları kopyalamak için rsync kullanıyorum . Benim anlayış olduğunu rsync daha hızlıdır cp (yani "deltalar") bazı dosyaların sadece artan fark transfer, hedef dizinde zaten vardır aktarmak için.

Bu doğru ise, kullanmanın herhangi bir avantajı olacağını rsync'i bir klasör içeriğini hareketli için A , demek, bir klasör B ile B boş olan?

A klasörü 1 TB'a yakın veriye (ve içindeki milyonlarca dosyaya) sahiptir. Transfer yerel üzerinden yapılması olacaktır ( A ve B olmak farklı dosya sistemleri, her ikisi de monte edilmiş bir süper bilgisayar, örneğin, ilgili bir olduğunu NFS ve B bir parıltı ).

Bunun dışında ne bayraklar sormak için kullanması gereken rsync dan (kopyalamaz) dosyaları taşımak için bir karşı B (yani silmek için bir aktarma başarıyla tamamlandığında)?


7
Yerine rsyncgeçebileceğini sanmıyorum mv. mvKaynak ve hedef aynı dosya sistemi içerisindeyken çoğu dosya sistemi türünde daha hızlı olmasını beklerdim , çünkü rsyncne olursa olsun bir kopya çıkarmak zorunda kalacaklardı ve mvmuhtemelen birkaç dizin girdisini değiştirmekten kurtulabilirlerdi. Bir bulabileceğiniz en yakın şey rsync mvolduğunu --remove-source-fileskomut, ama bu dizinleri kaldırmaz.
jw013

1
@ Jw013 teşekkür ederiz! Sadece açıklığa kavuşturmak için, dosyalar farklı dosya sistemlerinde ve aktarım bir üzerinde yapılacaktı . Bunun hala mvdaha hızlı olacağını biliyor musunuz ?
Amelio Vazquez-Reina

1
Peki, mvbir ağ üzerinden çalışamaz - yerel bir bağa (örneğin NFS) bağlı kalacaktır. Darboğaz ağ ise rsyncmuhtemelen daha hızlı olacaktır mv, çünkü rsyncsıkıştırma yapabilir.
jw013

2
Bu arada cpbulunur -ubu hedef dosyaya veya hedef dosyası eksik daha yeniyse kaynak dosyasını kopyalama seçeneği
acele

Yanıtlar:


69

--remove-source-filesDosyaları kopyalamak yerine taşımak için rsync'e geçebilirsiniz .

Ancak sizin durumunuzda, hedef boş olduğundan, rsync kullanmanın bir anlamı yoktur. Bir ova mvişini olabildiğince hızlı yapacak.

Sizin durumunuzda, NFS, Samba, sshfs, sftp, ssh üzerinden rsync, ssh içine katranlı tarh vb. Arasında bir seçeneğiniz varsa, performansta fark yaratabilecek olan şey, ağ protokolünün seçimidir. dosya boyutlarında, ağ ve disk bant genişliğinde ve diğer faktörlerde, genel tavsiye vermenin bir yolu yoktur, kendi kıyaslamalarınızı yapmanız gerekir.


6
Sadece Caleb’in söylediklerini yinelemek için, örneğin bir lapa lapa ağ nedeniyle yolsuzluktan endişe duyuyorsanız, rsync mantıklı olabilir, yazdığı her dosyayı doğrularken blokları yazarken kontrol ederek.
Daniel S. Sterling

5
--remove-source-filesSadece kaynakta dosyaları siler. Eğer kaynağımızı silmek istiyorsanız, rsync başarılı bir şekilde çalıştıktan sonra kaynak üzerinde bir rm -rf (veya findtüm dizinleri ve geçişi -delete) yapmak zorunda kalmaz mıydınız ?
Trevor Boyd Smith

1
@ DanielS.Sterling rsync, yazdıktan sonra blokları sağlama toplamı sağlamaz (mevcut dosyaların hangi bölümlerinin güncellendiğini ve senkronize edilmesi gerektiğini bulmak için sağlama toplamı kullanır). --checksumİlk senkronizasyonun sonuçlarını doğrulamasını söylemek için ikinci bir senkronizasyon yapabilirsiniz .
Clément

19

Yana --remove-source-filesdizinleri kaldırmaz, ben aşağıdaki komutları taşımak ssh üzerinden dosya:

rsync -avh --progress --remove-source-files /home/user/mystuff/* user@external.server:/home/user/backup
find . -type d -empty -delete

--progressBu aktarımı manuel olarak yaptığım için şahsen bu özelliği seviyorum . Bir komut dosyası kullanıyorsanız kaldırın. Transferleri marjinal olarak yavaşlattığını umuyorum. findKomutunun silme seçeneği yalnızca boş dizinleri siler - kullanmayın rm -rfbir dosya transfer değildi durumda boş olmayan dizinleri silmek olabileceğinden. -deleteSeçenek açar -depthboş dizin ağaçları "alt" yukarı silinir böylece seçeneği.


3
-deleteçok daha hoş -exec rmdir {} +vb
lkraav

1
Yıldız işaretini atlardım çünkü yerel olarak bunu yaparsanız sadece iz eğik çizgileri / izleri var. Yıldız kullanırsanız rsync .htaccess veya .htpasswd gibi gizli dosyaları atlar (eğer varsa)
Svetoslav Marinov

16

Gilles, genel olarak aynı işi daha kolay yapacağı rsynczaman dosyaları taşımak için kullanmanın hiçbir avantajı olmadığını mvve sıradan dosya sistemleri arasında potansiyel bir hız kazanımı olmadığını söylediği gibi .

Ancak bir avantaj olduğunda bazı zamanlar vardır. Özellikle, kaynağın, hedefin veya işi yapan makinenin stabilitesi hakkında herhangi bir şüpheniz rsyncvarsa, kullanımı devam ettirme yeteneği verir. Aktarım çok büyükse ve örneğin, elektrik şebekeniz güvenilmez ise, bu önemli bir avantaj olabilir. Bir hata durumunda veri bozulmasını önlemek ve kaldığınız yerden devam etmeyi önlemenin daha kararlı bir yolu olacaktır.


4
Bunun çok büyük bir avantaj olduğunu söyleyebilirim. Aslında, mvyalnızca hedef ve kaynak aynı bölümdeyse daha iyidir, bu nedenle mvyalnızca kopya yapmak yerine dosyanın meta verilerini düzenler.
nomen

2
Bir kere rsyncmv yerine ihtiyacım var (eğer kullanıyorsanız --relative) klasör yapısını korumak istiyorum .
Sridhar Sarnobat

14

Bir klasör A'nın içeriğini hareket ettirmek için rsync kullanmanın bir avantajı var mıdır, yani B boşken, bir B klasörü var mı?

Kendimi rsync'nin mv'den daha hızlı olduğu bir durumda buldum, çünkü mv dizindeki dosya sayısını idare edemiyor. 20 gün süren bir güvenlik kamerasından 1.8 milyon fotoğrafım var ve mv komutu kaynak ayırmadığı için hata veriyor.

Ancak rsync, tüm dosyaları sorunsuzca ele alıyor gibi görünüyor.


1

Dizinleri yinelemeli olarak birleştirmek istiyorsanız, bir dizini potansiyel olarak yinelenen dizin adlarıyla başka bir dizine taşıyın , sonra cevabımı burada serverfault.com adresinde görebilirsiniz. mvDizinler aynı ada sahip olduklarında kötü bir iş rsyncçıkarır ve sadece taşımak yerine her dosyayı kopyalar (tüm verileri okur + yazar) (sadece meta verileri oku ve yaz).


0

Dosyaları aslında Linux mv komutunun yapacağı gibi rsync kullanarak taşımanın bir yolu yoktur. --Remove-source-files kullanarak, dosyaları hedefe kopyalar ve sonra dosyaları (dizinler hariç) kaynaktan silersiniz. Bu, dosyaları taşıma amacınızı başarabilir ancak zamandan veya i / o işleminden tasarruf edemezsiniz.

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.