Mam 5 milionów plików, które zajmują około 1 TB przestrzeni dyskowej. Muszę przenieść te pliki na stronę trzecią.
Jak najlepiej to zrobić? Próbowałem zmniejszyć rozmiar pliku .tar.gz, ale mimo że mój komputer ma 8 GB pamięci RAM, pojawia się błąd „brak pamięci systemowej”.
Czy najlepszym rozwiązaniem jest przesłanie plików pocztą elektroniczną?
memory
tar
compression
out-of-memory
oshirowanen
źródło
źródło
.tar.gz
lub KOPIOWANIEM wynikowego skompresowanego pliku? Tak czy inaczej, coś jest dziwne, ponieważ żadna operacja nie powinna zajmować więcej pamięci tylko dlatego, że pliki są duże. Oznacza to, że obie operacje powinny być przesyłane strumieniowo. Podaj więcej informacji o tym, które polecenia nie działają.tar
powinien po prostu archiwizować pliki przyrostowo podczas ich wyświetlania, nigdy nie budując listy w pamięci. Ale ponownie pokaż dokładne polecenie, którego używasz. Czy wszystkie pliki znajdują się w tym samym katalogu, czy struktura katalogów jest bardzo głęboka?Odpowiedzi:
Dodatkowe informacje podane w komentarzach ujawniają, że OP używa metody GUI do utworzenia
.tar.gz
pliku.Oprogramowanie GUI często zawiera znacznie więcej wzdęć niż równoważne równoważne oprogramowanie wiersza poleceń lub wykonuje dodatkowe niepotrzebne zadania ze względu na pewne „dodatkowe” funkcje, takie jak pasek postępu. Nie zaskoczyłoby mnie, gdyby oprogramowanie GUI próbowało zebrać listę wszystkich nazw plików w pamięci. Nie trzeba tego robić, aby utworzyć archiwum. Dedykowane narzędzia
tar
i zgzip
pewnością zostały zaprojektowane do pracy ze strumieniowym wejściem i wyjściem, co oznacza, że mogą poradzić sobie z wejściami i wyjściami znacznie większymi niż pamięć.Jeśli unikniesz programu GUI, najprawdopodobniej możesz wygenerować to archiwum przy użyciu zupełnie normalnego codziennego
tar
wywołania, takiego jak to:gdzie
foo
jest katalog zawierający wszystkie 5 milionów plików.Inne odpowiedzi na to pytanie dają kilka dodatkowych alternatywnych
tar
poleceń do wypróbowania na wypadek, gdybyś chciał podzielić wynik na wiele części itp.źródło
„pięć milionów” plików i łącznie 1 TB? Twoje pliki muszą więc być bardzo małe. Po prostu spróbuję
rsync
:Jeśli tego nie masz - lub twoja skrzynka nie pozwala na użycie
rsync
, sprawdziłbym przynajmniej, czy7z
działa z twoimi danymi. Może nie, ale myślę, że nadal warto spróbować:Lub jeśli nie czujesz się komfortowo,
7z
przynajmniej spróbuj utworzyć.tar.xz
archiwum:(należy zauważyć, że starsze wersje
tar
nie tworzą.tar.xz
archiwów, ale.tar.lzma
archiwa podczas korzystania zJ
przełącznika. Nawet starsze wersjetar
nie obsługująJ
flagi całkowicie).Ponieważ używasz programu GUI do tworzenia tych plików, zakładam, że czujesz się trochę nieswojo przy użyciu interfejsu wiersza poleceń.
Aby ułatwić tworzenie, zarządzanie i wyodrębnianie archiwów z interfejsu wiersza poleceń, istnieje małe narzędzie o nazwie
atool
. Jest dostępny dla praktycznie każdej popularnej dystrybucji, którą widziałem, i działa prawie na każde archiwum, na które natknąłem się, chyba że te beznadziejnie niejasne.Sprawdź, czy Twoja dystrybucja ma
atool
swoje repozytorium, lub poproś administratora, aby zainstalował ją, gdy jest w środowisku pracy.atool
instaluje do siebie kilka dowiązań symbolicznych, więc pakowanie i rozpakowywanie staje się dziecinnie proste:Tworzy archiwum.
Rozszerza archiwum.
Wyświetla zawartość pliku.
Jaki rodzaj archiwum jest tworzony,
atool
rozpoznaje to po rozszerzeniu nazwy pliku archiwum w wierszu polecenia.źródło
rsync
tego jest to, że jeśli (kiedy) połączenie zostanie zerwane,rsync
może odebrać tam, gdzie zostało przerwane.O ile nie można wykonać kompresji lepszej niż 25: 1, prawdopodobnie nie zyska się na kompresji przed przesłaniem ślimaka, chyba że istnieje jakiś sprzętowy format taśmy, który można wymienić na stronie trzeciej.
Największym wspólnym miejscem do przechowywania jest Blue Ray, który z grubsza da ci 40 Gb. Będziesz potrzebował kompresji 25 do 1 danych, aby dopasować się do tego. Jeśli Twoja strona trzecia ma tylko DVD, potrzebujesz 125: 1 (z grubsza).
Jeśli nie możesz dopasować tych numerów kompresji, po prostu użyj zwykłego dysku, skopiuj go i wyślij pocztą elektroniczną do innej firmy. W takim przypadku wysyłanie czegoś mniejszego niż dysk 1 TB, który wymagałby kompresji, jest szaleństwem.
Musisz tylko porównać to z użyciem
ssh -C
(kompresja standardowa) lub najlepiejrsync
z kompresją do kopiowania plików przez sieć, bez konieczności kompresji i tarowania z góry. 1 TB nie jest niemożliwe, aby przejść przez sieć, ale zajmie to trochę czasu.źródło
Czy rozważałeś torrent? Peer-to-Peer może być najlepszą opcją dla transferu przez Internet:
Nie powiedziałeś, jakiego systemu operacyjnego używasz, ale kiedy mówisz o kompresji tar.gz, założę się, że używasz systemu operacyjnego typu GNU / Linux. W tym celu zasugeruję transmisję . Jest to oprogramowanie torrentowe typu open source działające na komputerach Mac i Linux. Podoba mi się, ponieważ programiści starają się, aby był natywny dla wszystkich obsługiwanych klientów GUI: brak języka międzyplatformowego.
Możesz połączyć tę metodę z kompresją, ale stracisz możliwość ustalania priorytetów części transferu.
źródło
7z będzie moim wyborem. Umożliwia automatyczne dzielenie archiwów i obsługuje kompresję wielowątkową. Nie,
xz
nie, pomimo tego, co mówi komunikat pomocy. Spróbuj z:Wyjście jest podzielone na 100 MB bloków (zmień to
-v
przełącznikiem).Jedynym minusem jest to, że 7z nie zachowuje metadanych uniksowych (np. Uprawnień i właściciela). Jeśli trzeba, że rury
tar
wyjścia do7za
zamiast (patrzman 7za
kilka przykładów).źródło
The only real downside
ale co za minus!split
w pliku .tar.gz i zachować metadane.tar
podejście do określonego pliku musi być dostępne .Tak, powodzenia w pakowaniu. Narzędzie GUI spróbuje to zrobić na tym samym woluminie, co oznacza, że a) potrzebujesz jeszcze 1 TB wolnego miejsca ib) przewrotne czytanie jednego pliku i dołączanie go do archiwum nie będzie zbyt zdrowe dla dysku.
Widzę dwie możliwości:
1) rsync z komputera na stronę trzecią. Jeden lub drugi będzie potrzebował globalnego adresu IP, który nie zmienia się często. Ogromna zaleta rsync jest jeśli masz przerwany z jakiegokolwiek powodu, można go odebrać w którym zostało przerwane. Kopiowanie tarballa 1 TB albo zakończy się sukcesem, albo niepowodzeniem
2) kup dysk zewnętrzny o pojemności 1 TB, skopiuj na niego pliki i dostarcz dysk. Duże opóźnienia, ale naprawdę dobra przepustowość, gdy przybywa. Różne usługi tworzenia kopii zapasowych online tego do początkowej kopii zapasowej.
źródło
Proponuję użyć czegoś takiego:
który utworzy 10 plików o maksymalnej wielkości 100 GB. Ale to nie rozwiązałoby problemu z „OOM”, ponieważ tar ma przesyłać strumieniowo swoje dane do odczytu / zapisu, więc wąskie gardło jest oczywiście gzip.
źródło
Co ty na to:
find
przeszukuje listę drzewa katalogówtar -T -
czyta listę ze standardowego wejścia-czf -
tworzy archiwum i zapisuje na standardowe wyjście,z
zgzipuje strumieńssh remotehost
zaloguj się do zdalnego hosta za pomocąssh
cd /target/dir/
przejdź do katalogu docelowegotar xzf -
wyodrębnij strumień przychodzący ze standardowego wejściaźródło
Dzięki fexsend możesz przesyłać pliki o dowolnej liczbie i rozmiarze do dowolnego odbiorcy w locie, patrz:
http://fex.rus.uni-stuttgart.de:8080/usecases/downunder.html
Oczywiście potrzebujesz serwera F * EX, ale jest bezpłatny:
http://fex.rus.uni-stuttgart.de:8080/
źródło