dosya kopyalama linux devam


9

Linux'ta büyük bir dosyanın kopyasını nasıl devam ettirebilirim? Kısmen bir ağ sürücüsüne kopyalanan büyük bir dosya var (serveral gigabyes) ve uzun zaman aldı ve çoğunlukla şu anda bir ağ sorunu nedeniyle kopyalama işlemi durmadan önce yapıldı. Dosya kopyasını nasıl devam ettiririm? Verimsiz bir komut dosyası istemiyorum ve ecp işe yaramadı (büyük dosyalar için çalışmıyor gibi görünüyor).

Yanıtlar:


4

Denerdim rsync -a /from/file /dest/file.


1
Biz rsync bahsediyoruz ederken ve not rsync -az -e ssh / den / dosyasına user@dest.ation kullanarak herhangi uzak makine [destekleyici SSH] doğrudan kopyalayabilirsiniz: / tam / dest / yol
Mikeage

2
vay. herhangi bir seçenek olmadan rsync çalıştırmak / dest / dosya siler ve her şeyi yeniden iletir. Bu nasıl oylandı?
Justin

1
Dosya özniteliklerini (-a) korumak nasıl yardımcı olur? Bu - eklemeli mi?
Malvineous

3

Sadece yerel dosyaya eklemeniz gerektiğini ve rsync'i kullanmak istemiyorsanız (bu, sağlama toplamlarını hesaplamak uzun sürebilir), curl kullanabilirsiniz. Örneğin, yavaş çıkarılabilir bir USB çubuğunda büyük bir dosyanız varsa /media/CORSAIR/somefile.datve bunun sadece yarısı geçerli dizinde ise, devam etmek için:

curl -C - -O "file:///media/CORSAIR/somefile.dat"


Bahşiş için teşekkürler, bu bağlantıyı kullanmak zorunda kaldım çünkü yavaş bağlantı kesildiğinde bir Windows SMB sunucusundan (yani rsync yok) kopyalama yapıyordum ve en başından 500MB'yi indirmek istemedim.
MiKy

2

Evet rsync gidilecek yoldur. Benim için rsync + ssh üzerinden 100 + GB veri aktardık. Gerçek bir yedek kopya arıyorsanız, -adosya özniteliklerini (süreler, sahipler, izinler vb.) Korumak için (arşiv) seçeneğini kullandığınızdan emin olun .

host1> rsync -aP file user@host2:/path/to/new/dir/

Taşıma işlemi sırasında değişebilecek büyük dosyaları kopyalamak için de yararlıdır. Sen edebilirsiniz önceden yükleyecektir , hedefe ve son kopya için hazır bir kez veri bu zamanın bir kısmı için tekrar ama sadece yok. Rsync'i tam potansiyeline kullanarak gerçek kesinti süresinden tasarruf edebilirsiniz.

PS v(ayrıntılı) kullanımı birçok dosyanın aktarımını yavaşlatabilir.


2

İstediğiniz komut şöyle bir şey olacak

rsync -v --append /path/to/afile /mnt/server/dest/afile

sunucuya ssh üzerinden erişemez ve rsync'i bu şekilde çalıştıramazsanız, bu durumda FlyingFish'in verdiği komut en iyisidir.


0

rsync yalnızca hedef sunucuda rsync varsa iyidir. Bu durumda, gerçekten en iyi çözümdür.

Ama başka türlü değil. Rsync'in amacı sadece değiştirilmiş parçaları büyük dosyalara kopyalamak olduğundan, değiştirilen bu parçaların dosyanın herhangi bir yerinde olabileceğini varsayar. Bu, kopyalanmış olan tüm blokların toplamını kontrol edeceği anlamına gelir. Uzak uçta rsync yoksa, yerel rsync'iniz daha önce aktarılmış olan her şeyi okuyarak başlayacaktır.

Kaynak makinenizde bir web veya ftp sunucusu varsa, "--continue" seçeneğiyle wget'i hedef sunucudan kullanabilirsiniz. (veya "--continue-at [- | size]" seçeneğiyle kıvırın).

Hedef makinenizin bir FTP sunucusu varsa, --append seçeneğiyle kaynak makinede kıvrılma kullanabilirsiniz.

Son çare olarak, "bs =" (blok boyutu), "skip =" ve "seek =" bağımsız değişkenleriyle dd'yi kullanabilirsiniz. Örneğin:

2048 baytlık blokları kullanabileceğinizi varsayalım. Hedef dosyanız şu anda 2'048'000'000 bayt (2 GB) ise, 1'000'000 blok 2048 bayttır. Kaynak dosyanızın geri kalanını hedefe eklemek için

gg if = kaynak_dosyası = hedef_dosya bs = 2048 atlama = 1000000 arama = 1000000

Aktarım hızını artırmak için daha büyük bir blok boyutu kullanabilirsiniz. Blok boyutunu bs = ile belirtmeyi ve atlamak ve aramak için verilen değerin bayt cinsinden değil bloklar halinde olduğunu unutmayın.


Rsync hakkında söyledikleriniz yanlış. adam rsync, --append seçeneğinin ne yaptığını okuyun.
Justin
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.