Jak szybko skopiować 900 000 plików?

9

Muszę skopiować na komputer z systemem Windows niektóre dane, które zawierają 900 000 małych plików o łącznej wielkości około 30 gigabajtów. Jednak trzeba go skopiować i skonfigurować w niecałe półtorej godziny, a kopiowanie dysku twardego USB może potrwać ponad 5 godzin, głównie z powodu szalonej ilości plików. Czy istnieje lepszy / szybszy sposób radzenia sobie z tym, na przykład kopiowanie bloków? Dzięki

Joe Lyga
źródło
8
Będzie to bardzo agresywny cel dla każdej kopii opartej na plikach z jednego dysku innego niż SSD. Samo wyliczenie wszystkich plików i zajęcie się pozycjami systemu plików i metadanymi dla tak wielu plików zajmuje dużo czasu.
afrazier
5
Czy możesz po prostu usunąć dysk twardy i umieścić go w miejscu docelowym? byłaby to najszybsza prędkość, przenoszona przez płytę główną płyty głównej.
iTom
1
xkcd.com/949
user541686,
Chcesz zobaczyć to pytanie na blogu? Pomóż, odpowiadając lub głosując w Meta .
Tamara Wijsman,

Odpowiedzi:

7

Przy dużej liczbie plików najlepiej jest utworzyć archiwum tar, aby mieć mniej plików do czynienia. Jeśli używasz zewnętrznego dysku twardego USB 2.0, powinieneś skorzystać z USB 3.0, eSATA lub skorzystać z szybkiej sieci lokalnej.

Jaki jest twój źródłowy system operacyjny? Jeśli oba systemy operacyjne to Linux, możesz przesyłać pliki przez pliki tar, gzip i ssh do komputera docelowego. Możesz zainstalować cygwin w systemie Windows, aby uzyskać tego rodzaju funkcje również w systemie Windows.

Aktualizacja:
Używanie Tar i SSH do poprawy prędkości SCP ” opisuje polecenia potrzebne do wysyłania zawartości tar przez ssh.

dabest1
źródło
tar nadal będzie odczytywał wszystkie pliki jeden po drugim.
Tomas Andrle,
Tak, ale zrobiłbyś to tylko raz, a inne polecenia, takie jak scp, nie byłyby opóźnione w przypadku pojedynczych plików. Jeśli pliki mogą być przechowywane w archiwum tar na komputerze docelowym, oszczędzasz czas na pisaniu jednego pliku zamiast wielu.
dabest1
Zakładam, że połączenie USB stanowi wąskie gardło. Więc zrobienie surowego obrazu dysku, jak sugeruje @arcyqwerty, wydaje mi się najlepszym rozwiązaniem. Byłbym ciekawy, aby zobaczyć niektóre rzeczywiste wyniki, może całkowicie się mylę!
Tomas Andrle,
1
@TomA - Z mojego doświadczenia związanego z wieloma małymi plikami, wąskim gardłem jest dysk twardy . Każdy odczyt pliku wymaga poszukiwania głowy do mapy bitowej alokacji, a następnie kolejnego poszukiwania głowy do rzeczywistej zawartości pliku. W rezultacie dysk twardy spędza większość czasu na wyszukiwaniu, a bardzo mało czasu na czytanie plików.
Fałszywe imię
2
Na przykład, przy plikach 1K, uzyskuję ~ 1-5 MBps przez moją sieć gigabitową. Przy dużych plikach (każdy gigabajt) uzyskuję ~ 80-90 MBps. Chodzi o sekwencyjne odczyty.
Fałszywe imię
8

Jeśli dysk twardy można usunąć z interfejsu USB na SATA / ATA, zainstalowałbym go na komputerze docelowym. Otrzymasz znacznie szybsze prędkości przesyłania, jak zauważyli inni. Do kopiowania, zakładając, że jesteś w systemie Windows, zrobiłbym prosty ROBOCOPY. Jest tak szybki, jak naprawdę możesz się spodziewać, choć istnieją inne alternatywy.

ROBOCOPY /E /B /MT 'source' 'destination'

Staram się jednak unikać kompresji wszystkich tych plików, istnieje duża szansa, że ​​czas na kompresowanie i przeniesienie przekroczyłby po prostu przeniesienie plików.

* Dodano opcję / MT dla robocopy. Może znacznie przyspieszyć przesyłanie w środowisku wielowątkowym.

Lee Harrison
źródło
Będzie /MTpomagać lokalnych transferów pojedynczego dysku lub spowodować ogromne lanie dysku? Powszechne jest kopiowanie dużych udziałów między serwerami, ale często oba mają dodatkowe opóźnienie z powodu przejścia przez sieć i ulepszone IOPS z macierzy RAID.
afrazier
Nie mogę zbyt mocno komentować tego aspektu. Używam robocopy do tworzenia kopii zapasowych wszystkich moich projektów VS każdego wieczoru, choć jest to warte tylko około 10 GB. Zajmuje tylko chwilę, ponieważ pliki, które już istnieją, nie są kopiowane. Te testy porównawcze Robocopy znalazłem kilka miesięcy temu: demartek.com/Reports_Free/…
Lee Harrison
z mojego doświadczenia wynika, że ​​jeśli adapter USB na SATA w obudowie napędu obsługuje natywne kolejkowanie poleceń, to uzyskuję znaczny wzrost wydajności z przełącznika / MT.
longneck
6

Możesz spróbować zrobić zdjęcie całego folderu / dysku

W systemach Linux możesz użyć ddsurowej kopii systemu plików i skopiować go jako pojedynczy duży plik.

Aby wyodrębnić obraz do systemu Windows, może być konieczne zainstalowanie programu cygwin lub programu, który może przetwarzać ddobrazy.

arcyqwerty
źródło
To jest bilet.
Tomas Andrle,
3

Zainstaluj dysk, na którym znajdują się pliki źródłowe, na konfigurowanym komputerze i przenieś dysk na dysk. Zapomnij o USB. Nawet przesyłanie przewodowe (łączenie maszyn w sieć razem) byłoby szybsze niż USB (przy założeniu, że USB 2.0 i NIC 1 Gb / s). Jeśli jest to zdarzenie cykliczne, zajrzyj do replikacji.

Paul Ackerman
źródło
3

Użyj rsyncz zopcją.

-z,         --compress              compress file data during the transfer
            --compress-level=NUM    explicitly set compression level
            --skip-compress=LIST    skip compressing files with suffix in LIST

Zwiększy to szybkość przesyłania przez sieć. Prawdopodobnie nie jest to przydatne w twoim przypadku.

Po dłuższym czytaniu zdałem sobie sprawę, że nie powinniśmy używać flagi „-z” podczas kopiowania danych z jednego lokalnego dysku twardego na inny, ponieważ zwiększa to obciążenie. Dziękujemy za komentarz od @FakeName.

Sachin Divekar
źródło
1
rsync nie kompresuje dla lokalnych transferów (lub, jak sądzę, przez LAN). Nie przyniosłoby to również korzyści, ponieważ prawdziwym problemem jest czas potrzebny na odczytanie plików, a nie przesłanie ich przewodowo (ponieważ każdy odczyt pliku zajmie co najmniej dwie operacje wyszukiwania).
Fałszywe imię
@FakeName +1 masz rację, po lekturze przeczytałem twój punkt. Zaktualizowałem swoją odpowiedź.
Sachin Divekar,
1

Szybko zbliżasz się do ograniczeń swojego dysku twardego. W rzeczywistości przy obecnych dyskach towarowych niemożliwe jest określenie czasu transferu za pomocą operacji kopiowania poszczególnych plików.

Zakładając, że każdy plik wymaga 1 wyszukiwania HD, a czas wyszukiwania wynosi 7 ms (co jest nieco wyidealizowane, realistycznie, każdy plik będzie wymagał dwóch wyszukiwań , chyba że bitmapa woluminu jest buforowana w pamięci RAM), najlepiej będzie zarządzać ~ 142 plikami / sek. ( \ $ \ frac {1000} {7} = 142,8 ... \ $).

Ze specyfikacjami OP (30 GB, 900 000 plików), co stanowi ~ 33 KB na plik (\ $ \ frac {30 000 000 tys.} {900 000} = ~ 33,3 ... \ $. 33KB * 142 = 4,68 MBps.

minimum czas transferu 30 GB w 5 Mbps, wynosi około 1 godziny, 40 minut (\ $ \ Frac {30000} {5} = = 6,000 \ $ s. \ $ \ Frac {6000} {60} = 100 \ $ minut lub 1:40 godzin)

Dlatego niemożliwe jest osiągnięcie prędkości lepszej niż ~ 5 MBPS, a to przy idealnym dysku (i mniejszej liczbie operacji wyszukiwania. To jest dla jednego wyszukiwania na plik. Realistycznie byłoby to dwa). Jesteś ograniczony całkowicie przez wydajność dysku.


Jedynym sposobem na lepszą wydajność jest skopiowanie całego systemu plików i partycji sekwencyjnie. ddmożna to zrobić na systemie Linux.

Co próbujesz zrobić?

Zmyślone imię
źródło
Czy TeX działa dla kogoś innego? Wydaje mi się, że nie renderuje.
Fałszywe imię
0

Spróbuj 7zip, aby zarchiwizować pliki tylko w jednym pliku. Jeśli to możliwe, użyj sieci WLAN z połączeniem adhoc z notebookiem.

ott--
źródło
1
lub jeszcze lepiej, bezpośrednie połączenie ethernetowe, najlepiej gig-e
Journeyman Geek
0

W związku z odpowiedzią @arcyqwery możesz go skompresować i jednocześnie przekształcić w jeden duży plik. Przyspieszy to proces.

Warto również użyć programu takiego jak TeraCopy , ponieważ zwykle jest on szybszy niż domyślna wydajność kopiowania w systemie Windows. Powinieneś jednak przeprowadzić test w podobnych okolicznościach w swoim przypadku, aby to sprawdzić.

soandos
źródło
0

Miałem podobny przypadek. Wyłączyłem antywirusa, szybkość kopiowania zmieniona z 3 MB / s na 12 MB / s.

wprowadź opis zdjęcia tutaj

Rm558
źródło