wznowić kopiowanie plików linux

9

Jak wznowić kopię dużego pliku w systemie Linux? Mam ogromny plik (gigabajty serwerowe) częściowo skopiowany na dysk sieciowy, i zajęło to dużo czasu, i było to w większości zrobione, zanim operacja kopiowania została zatrzymana z powodu problemu sieci, który został naprawiony. Jak wznowić kopiowanie pliku. Nie chcę nieefektywnego skryptu, a ecp nie działał (wydaje się, że nie działa w przypadku dużych plików).


źródło

Odpowiedzi:

4

Spróbowałbym rsync -a /from/file /dest/file.

Gonzalo
źródło
1
a gdy mówimy o rsync, pamiętaj, że możesz skopiować bezpośrednio na dowolną zdalną maszynę [obsługującą SSH] za pomocą rsync -az -e ssh / from / file [email protected]: / full / dest / path
Mikeage
2
łał. uruchomienie rsync w ten sposób bez żadnych opcji spowoduje usunięcie / dest / file i retransmisję całą rzecz. Jak to się zagłosowało?
Justin
1
Jak pomaga zachowanie atrybutów pliku (-a)? Czy powinno to być - dołączać?
Malvineous,
3

Jeśli wiesz, że po prostu musisz dołączyć do pliku lokalnego i nie chcesz używać rsync (co może zająć dużo czasu przy obliczaniu sum kontrolnych), możesz użyć curl. Na przykład, jeśli masz duży plik na wolno wyjmowanej pamięci USB zamontowanej w, /media/CORSAIR/somefile.data tylko połowa jest w bieżącym katalogu, aby wznowić:

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

użytkownik48985
źródło
Dzięki za wskazówkę, musiałem skorzystać z tej wskazówki, ponieważ kopiowałem z serwera Windows SMB (więc nie rsync), gdy utracono wolne połączenie, i nie chciałem pobierać 500 MB od początku.
MiKy,
2

Tak, rsync jest właściwą drogą. Dla mnie przesłaliśmy 100+ GB danych przez rsync + ssh. Jeśli szukasz prawdziwej kopii zapasowej, upewnij się, że korzystasz z opcji -a(archiwizuj), aby zachować atrybuty plików (czasy, właścicieli, perms itp.)

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

Przydaje się również do kopiowania dużych plików, które mogą ulec zmianie podczas migracji. Możesz wstępnie załadować dane do miejsca docelowego i po przygotowaniu do ostatecznej kopii zrób to jeszcze raz, ale tylko przez ułamek czasu. Możesz zaoszczędzić na faktycznym przestoju, używając rsync do pełnego potencjału.

Korzystanie z PS v(pełne) może spowolnić przesyłanie wielu plików.

Latająca ryba
źródło
2

Polecenie, które chcesz, będzie podobne

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

chyba że możesz uzyskać dostęp do serwera przez ssh i uruchomić rsync w ten sposób, w takim przypadku polecenie FlyingFish jest najlepsze.

Justin
źródło
0

rsync jest dobry tylko wtedy, gdy masz rsync na serwerze docelowym. W takim przypadku jest to rzeczywiście najlepsze rozwiązanie.

Ale nie inaczej. Ponieważ rsync ma na celu kopiowanie tylko zmienionych części w dużych plikach, zakłada, że ​​te zmienione części mogą znajdować się w dowolnym miejscu pliku. Oznacza to, że suma kontrolna wszystkich bloków, które zostały już skopiowane. Jeśli nie masz rsync na zdalnym końcu, lokalny rsync zacznie od odczytu wszystkiego, co zostało już przesłane.

Jeśli twój komputer źródłowy ma serwer WWW lub ftp, możesz użyć wget z serwera docelowego z opcją „--continue”. (lub zwiń za pomocą opcji „--continue-at [- | size]”).

Jeśli twój komputer docelowy ma serwer FTP, możesz użyć curl na maszynie źródłowej z opcją --append.

W ostateczności możesz użyć dd z argumentami „bs =” (rozmiar bloku), „skip =” i „seek =”. Na przykład:

Załóżmy, że będziesz w stanie używać bloków 2048 bajtów. Jeśli plik docelowy ma obecnie 2'048'000'000 bajtów (2 GB), to znaczy 1'000'000 bloków po 2048 bajtów. Aby dołączyć resztę pliku źródłowego do miejsca docelowego, możesz

dd if = plik_źródłowy = plik_docelowy bs = 2048 pomiń = 1000000 szukaj = 1000000

Możesz użyć większego rozmiaru bloku, aby poprawić szybkość transferu. Pamiętaj tylko, aby podać rozmiar bloku za pomocą bs = i że wartość podana do pomijania i szukania jest w blokach, a nie w bajtach.


źródło
To, co powiedziałeś o rsync, jest fałszywe. man rsync, przeczytaj, co robi opcja --append.
Justin