Mümkün olduğunca az CPU ve bant genişliği harcamasıyla büyük bir dosyayı nasıl yeniden denetlerim?


13

Uzaktan yedeklemeyi planladığım 500 GB'lık bir dosyam var. Dosya sık sık değişir. Bir masaüstünden bir sunucuya yeniden senkronize edeceğim. Her ikisi de rsync istemcisi veya sunucusunu çalıştırabilir.

Bunun için doğru komut nedir? Denediğim şey sonsuza dek sürdü ya da sadece garip davrandı.

Örnek ve sonuçlar:

rsync -cv --partial --inplace --no-whole-file /desktop/file1 myserver.com::module/file1 

Çalışıyor gibi görünüyor, ama sadece iki kez yaparsam (?!). Ayrıca, yavaş.

Yukarıdaki komut her iki bilgisayarda veya yalnızca gönderen bilgisayarda sağlama toplamı yapıyor mu? Aksi takdirde doğru mu?


Sık sık değişen büyük bir dosya mı? Rsync ile çok, çok hayal kırıklığı yaratacak sonuçlar elde edeceksiniz ...
Ignacio Vazquez-Abrams

Başka öneriniz var mı? Bazı uygulamalarla yapılabilir olmalı, Dropbox'ın tescilli müşterisi çok iyi yapıyor. Bkz. Forums.dropbox.com/topic.php?id=17631
Johan Allgoth

--inplace
Ray Hulha

Yanıtlar:


12

Asla hızlı olmayacaktır, çünkü rsync tüm dosyayı okumak / kontrol etmek zorunda kalacak ve SSD'lerde veya başka bir şeyde saklanmadığınız sürece 500GB okumak uzun zaman alacaktır.

Deneyin rsync -vhz --partial --inplace <file/server stuff>.

-canlamına gelir, değiştirilip değiştirilmediğini görmek için zaman damgasını kullanmak yerine, herhangi bir aktarım yapmadan ÖNCE tüm dosyayı kontrol eder, yani tüm dosyayı iki kez okumak anlamına gelir. Zaman damgası değiştirilmiyorsa (olması gerekir), o zaman touchrsync'i çalıştırmadan önce sadece dosya olabilir .

Bu komut dosyası yazılmamışsa, çalıştıkça --progressnasıl çalıştığını görebilmeniz için ekleyebilirsiniz .


Evet, biliyorum 'büyük dosya == uzun kullanım'. Ama burada bir şey eksik olduğumu hissediyorum, yukarıdaki açıklamaya bakın. Dropbox yapabilirse biz de yapabiliriz! =) Ben söylemedim, ama ben de -c olmadan denedim, hala yavaş.
Johan Allgoth

2
ayrıca --inplaceima eder--partial

2

Rsync olmasa da, ne yapmaya çalıştığınıza bağlı olarak bu daha iyi sonuç verebilir. Benzer bir yedekleme görevi yapıyordum ve kesinlikle daha hızlıydı.

Bir makineden diğerine katran borusu yapmak için netcat kullanın.

Kaynak makinenizde:

tar -cpv --atime-preserve=system . | nc -q 10 -l -p 45454

Bir tarball oluşturuyorsunuz izinleri ve zamanı koruyor, sonra 45454 numaralı bağlantı noktasında netcat'e bağlıyorsunuz

Yedek makinenizde

nc -w 10 X.X.X.X 45454 | tar -xpv

X.X.X.X = kaynak makinenizin yerel ip adresi.

Benim için bu iyi çalıştı. Rsync ile 2-3 MB / s yerine kablolu LAN üzerinden 25-30 MB / s hızında çalıştı. Dezavantajı: senkronize edilmez, sadece kaynağınızın bir kopyasını oluşturur. Yine de açıkladığınız gibi bir yedekleme için - bir 500GB dosya - çok iyi çalışabilir.

İzin sorunlarından kaçınmak için bunu kök olarak yapmanız gerekebilir veya şanslı olabilirsiniz.

FWIW, başlangıçta bunu burada öğrendim: http://www.screenage.de/blog/2007/12/30/using-netcat-and-tar-for-network-file-transfer/


1
tarrsyncaktarmak için çok sayıda küçük dosyaya sahip olduğunuzdan daha iyidir . Kullanmak ncda hızlı bir bağlantıda iken aktarım hızını artırır, çünkü SSH şifrelemesinin ek yükü yoktur (ki bu bir eşler arası bağlantıda ihtiyacım yok)
jornane

0

Ağ ek yükünü önlemek için SSH yerine rsync protokolünü kullanın. Varsayılan olarak, rsync, hostname: / path gibi bir URL belirtirken SSH kullanır. Daha hızlı rsync protokolünü kullanmak için rsync: // hostname / path komutunu kullanın. Bu şekilde katran / netcat içeren numaralar gerekmez. Rsync delta algoritması çok daha hızlı olmalıdır.

Daha fazla bilgi için ayrıca bkz. Https://gergap.wordpress.com/tag/rsync/ .

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.