RSync'i nasıl yavaşlatabilirim?


35

Arızalı bir USB flaş sürücünün içeriğini kopyalamaya çalışıyorum. Verileri çok hızlı okursam, sürücünün denetleyici yongası aşırı ısınır ve sürücü sistemden kaybolur. Bu olduğunda, sürücüyü çıkarmam, soğuması, tekrar takması ve kopyayı yeniden başlatması için bir dakika kadar beklemem gerekiyor.

Sürücünün içeriğiyle ilgili eski bir yedeğim var, bu nedenle verilerin geri kalanını elde etmenin en açık yolu rsync, yedeği güncellemek için kullanmaktır , ancak bu, "okuma çok hızlı bir şekilde başlar, sürücü kaybolur ve baştan başlamak gerekiyor "sorunu. rsyncDakikada yalnızca X megabayt veri okumayı söylemenin bir yolu var mı ? Alternatif olarak, sürücü kaybolduğunda işlemleri askıya almasını ve tekrar takıldığında devam etmesini söylemek mümkün müdür?


24
Sürücüyü soğutmayı düşündünüz mü?
AEonAX

3
Sürücü ne kadar dolu? Sürücü% 50'den fazla doluysa, önce arızalı sürücüyü sadece aynaya yansıtıp sonra aynadaki daha karmaşık şeylerle başa çıkmanız daha iyi olur.
kasperd

1
@AEonAX: Serin (sic!) Kullanıma hazır bir fikir olsa da, bunu tavsiye etmem: cihaza ek termal baskı uygularsınız ve bu tamamen başarısız olabilir.
Piskvor

Yanıtlar:


46

DopeGhoti'nin deneyiminden farklı olarak, --bwlimitbayrak rsync (v3.1.2) ile veri aktarımını sınırlandırıyor.

Ölçek:

$ dd if=/dev/urandom bs=1M count=10 of=data
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.0871822 s, 120 MB/s

$ du -h data
10M     data

$ time rsync -q data fast
0.065 seconds

$ time rsync -q --bwlimit=1M data slow
10.004 seconds

(not: Çıktım timeçoğu timeçağrıdan farklı görünüyor ( zshözellik), bu zamanlar benim tarafımdan değiştirilmedi)

Bir çift çizgisinde Else, belki bir şey -execin find. Ben inanıyorum o rsync -Roluşturmak ve üst klasörleri kopyalamak gerekir, ancak bunları yapmazsa, o zaman cp --parentsgerekir.

$ find /failing/usb -exec rsync -R {} /somewhere/safe/ \; -exec sleep 1 \;

Not : ayrıca ddrescue sitesine bakın , aradığınız şey doğru olabilir :)


1
Evet. DG, "bant genişliği" sözcüğü ile karıştırılmış olabilir - ancak bu, yalnızca ağ için değil, veri taşıma kanalı için de geçerlidir. Adam sayfa özellikle diyor ki: --bwlimit=KBPS limit I/O bandwidth; KBytes per secondağın hiç söz. Rasgele kod taramak, bu hedeften bağımsız olarak okuma hızını sınırlar . Ayrıca, fıkra: Bu seçeneği yıllardır yerelden yerele yazma hızını sınırlandırmak için kullanıyorum . linux.die.net/man/1/rsync
Piskvor

1
Tamam, ikinci bakışta, aslında yazılan bayt sayısını sayar ve hesaplanan bir süre boyunca uyur. io.c, satır 832-3: if (bwlimit_writemax) sleep_for_bwlimit(n);Her halükarda, bu muhtemelen beklendiği gibi çalışır, kısa aralıklarla okumak ve aralarında uyumak. Düşük bir değerle başlamanızı ve dikkatlice arttırmanızı öneririm, ya da yavaş transferin gece boyunca çalışmasına izin verin.
Piskvor

25

Biraz MacGyver çözümü, ancak geçmişte iyi bir başarı elde ettim:
Çubuk ve bilgisayar arasına eski bir USB 1 hub yerleştirin. Cehennemde bu şekilde hızlı kopyalamak için gidiyor :-)

Diğer olasılık: Kullanabileceğiniz başka bir çubuk varsa, aynı kök hub'a bağlı başka bir USB portuna takın (bu yüzden sorun çubuğunuzla bant genişliğini paylaşır).
Şimdi ekstra çubuğa büyük bir yazma işlemi başlatın, böylece her iki çubuk da bant genişliği için rekabet ediyor. Daha fazla kontrol için, sorun çubuğundaki önceliği daha da azaltmak için ionice kullanabilirsiniz .


1
Muhtemelen USB çekirdek modülüne seçenekler vererek bir yazılım çözümü yoluyla bağlantı noktalarının USB 1.1 olarak çalışmasını sağlayacak bir yol olması gerektiğinden eminim.
André Borie

@ AndréBorie: Var - bbs.archlinux.org/viewtopic.php?pid=1342593#p1342593 , ancak SW'de etkili engeller olduğu için bu biraz kaba kuvvetli bir çözüm.
Piskvor

@Piskvor, tıpkı bir USB 1 hub kullanmak gibi, cihazla daha düşük bir aktarım hızı sağlar. Bunun hakkında "kaba kuvvet" göremiyorum.
André Borie,

Tamam, kötü söz seçimi, kabul ediyorum. Ancak IMHO cihazlarını yeniden yapılandırma özel ayrıcalıklar gerektirecek (root veya en az% adm), işlem başına okuma hızını kontrol etmek daha basit olacaktır. (Ayrıca, USB 2.0 dışında çalışamayan cihazlar da var - özelliklere aykırı olarak)
Piskvor

13

rsync --bwlimit=RATEAşağıdaki yorumlara dayanarak, aslında tam olarak aradığınız şey olan verilerin okuma hızını düşürerek işe yarayan görünen dosya aktarım hızını kısmak için kullanabilirsiniz .



3
Ionice sadece öncelik verir, eğer iki şey okuyorsa, varsayılan olarak 50/50 alırlar. Ionice bunu ayarlayabilir, ancak yalnızca bir okuma varsa,% 100 alacaktır.
coteyr

@coteyr Haklısınız ve bu yüzden aynı USB kök hub'ındaki 2. bant genişliği yeme süreciyle birleştirmeniz gerekiyor. Cevabımı gör.
Tonny

2
Neyse ki, cevabınız yanlış: --bwlimitmutlaka bir sınırı değil, G / Ç limitini belirler. Çeşitli senaryolarda birçok kez test edilmiştir: bu seçenek , hedef ne olursa olsun, rsync sınırını okuma sırasında kendini sınırlar . (Bunu, yavaş bir yerel cihaza hızlı yazma işleminin başarısız olmasına neden olduğu benzer bir senaryoda
buldum

1
@piskvor - Bunun için teşekkürler! Burası hakkında sevdiğim şey bu; Yeni şeyler öğrenmeye devam ediyorum (:
DopeGhoti 29:16

8

rsync --bwlimit=100100KiB / s için ek olarak daha fazla çözüm .

  1. Tam disk kopyalama seçeneği ddrescueile kullanın --max-read-rate. Bu, bir hatanın ardından kaldığı yerden tam bir disk kopyasını yeniden başlatmanıza izin verecektir.

    ddrescue --max-read-rate=100K /failing/usb output.img output.logfile
    

ddrescueayrıca veri kurtarma ile ilgili birçok seçenek var, buradaki kılavuza bakın .

  1. Kullanım pvile ( "boru izleyici") --rate-limitseçeneği ya da throttlehız limiti borular aletin. pvayrıca ilerleme gösterebilir. Bu işlemi, boru kullanan veya boru kullanan herhangi bir alet için yapabilirsiniz:

    tar -cf - /failing/usb | throttle -K 100 | tar -C /your/outputfolder/ -xvf -
    

    veya

    tar -cf - /failing/usb | pv --rate-limit 100k | tar -C /your/outputfolder/  -xvf -
    

    Bir göz atın pv manpage daha ayarlara ve örnekler için. İçin throttle, ayrıca denemek isteyebilirsiniz -whız nasıl hesaplandığını belirler, seçeneğini görüyorsanız kelebeği manpage .


Şimdi bu yararlı bir araç, bunu bilmiyordum, teşekkürler! pvmanpage, çeşitli kullanımlara ilişkin daha fazla örneklere sahiptir.
Piskvor

Ben pvkaset şakacı günlerimi geri keşfettikten sonra tekrar tekrar tekrar buldum. Tar, teyp sürücülerine yazdığında. :)
Dan Garthwaite
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.