Najszybszy sposób łączenia wielu plików w jeden (tar czf jest zbyt wolny)


23

Obecnie pracuję, tar czfaby połączyć pliki kopii zapasowych. Pliki znajdują się w określonym katalogu.

Ale liczba plików rośnie. Używanie tzr czfzajmuje zbyt dużo czasu (ponad 20 minut i liczenie).

Muszę łączyć pliki szybciej i skalowalnie.

Znalazłem genisoimage, readomi mkisofs. Ale nie wiem, który jest najszybszy i jakie są ograniczenia dla każdego z nich.


Wątpię, aby tarwprowadziło to znaczne obciążenie, czytanie plików jest tutaj kosztowną operacją. Powinieneś albo zmodyfikować sposób przechowywania plików, albo zastosować zupełnie inne podejście (skopiuj system plików jako całość). Nie możemy ci pomóc bez wiedzy na temat organizacji plików.
Gilles „SO- przestań być zły”

5
Zamontuj FS z opcją „noatime”, może przyspieszyć operacje IO.
Rufo El Magufo

2
+1 za noatime, naprawdę robi znaczącą różnicę. Szczególnie w przypadku zwykłych dysków twardych, a także po prostu w celu ograniczenia zewnętrznego zapisu.
JM Becker,

Odpowiedzi:


25

Powinieneś sprawdzić, czy większość czasu spędzasz na procesorze czy we / wy. Tak czy inaczej istnieją sposoby, aby to poprawić:

Odp .: Nie kompresuj

Nie wspomniałeś o „kompresji” na liście wymagań, więc spróbuj usunąć „z” z listy argumentów: tar cf . Może to trochę przyspieszyć.

Istnieją inne techniki przyspieszenia procesu, takie jak użycie „-N” do pominięcia plików, których kopię zapasową już utworzono.

B: wykonaj kopię zapasową całej partycji za pomocą dd

Alternatywnie, jeśli tworzysz kopię zapasową całej partycji, zamiast tego weź kopię całego obrazu dysku. Zaoszczędziłoby to przetwarzanie i dużo czasu na wyszukiwanie głowicy dysku. tari każdy inny program pracujący na wyższym poziomie ma narzut związany z czytaniem i przetwarzaniem pozycji katalogu i i-węzłów, aby znaleźć miejsce, w którym znajduje się zawartość pliku i wykonać więcej poszukiwań dysku głównego , odczytując każdy plik z innego miejsca niż dysk.

Aby wykonać kopię zapasową podstawowych danych znacznie szybciej, użyj:

dd bs=16M if=/dev/sda1 of=/another/filesystem

(Zakłada się, że nie używasz RAID, co może nieco zmienić)


2
nie kompresuj : lub użyj, pigzjeśli istnieje w systemie więcej niż jednego procesora.
Rufo El Magufo

LZ4 / zstd i podobnie szybkie algorytmy kompresji mogą być nadal warte sprawdzenia, czy mogą przyspieszyć proces, po prostu zapisując mniej danych (jeśli dane w ogóle są kompresowalne), a jednocześnie są o rząd wielkości szybsze w kompresji, ale mniej wydajne w zależności od poziom i algorytm, również man gzip mówi „Domyślny poziom kompresji to -6”, więc jest miejsce na ulepszenia.
LiveWireBT

8

Aby powtórzyć to, co powiedzieli inni: musimy dowiedzieć się więcej na temat plików, których kopie zapasowe wykonujesz. Przyjdę tutaj z pewnymi założeniami.

Dołącz do pliku tar

Jeśli pliki są dodawane tylko do katalogów (tzn. Żaden plik nie jest usuwany), upewnij się, że dołączasz do istniejącego pliku tar, a nie tworzysz go za każdym razem. Możesz to zrobić, określając istniejącą nazwę archiwum w swoim tarpoleceniu zamiast nowego (lub usuwając stary).

Zapisz na innym dysku

Czytanie z tego samego dysku, na którym piszesz, może zabijać wydajność. Spróbuj zapisać na innym dysku, aby rozłożyć obciążenie we / wy. Jeśli plik archiwum musi znajdować się na tym samym dysku co pliki oryginalne, przenieś go później.

Nie kompresuj

Powtarzam tylko to, co powiedział @Yves. Jeśli pliki kopii zapasowej są już skompresowane, nie ma potrzeby ponownego kompresji. Będziesz po prostu marnować cykle procesora.


4

Używanie tar z kompresją LZ4 jak w

tar cvf - myFolder | lz4 > myFolder.tar.lz4

daje to, co najlepsze z obu światów (raczej dobrą kompresję ORAZ szybkość). Oczekuj współczynnika kompresji około 3, nawet jeśli dane zawierają pliki binarne.

Dalsza lektura: porównanie algorytmów kompresji Jak wykonać tar za pomocą lz4


1
StefanQ pozostaje w tym, że musisz wybrać kompresor w zależności od tego, gdzie jest twoje wąskie gardło. Pamiętaj też, że możesz zapisać dane wyjściowe na innym fizycznym urządzeniu magazynującym lub nawet na zdalnym komputerze!
Lester Cheung

2

Dziwi mnie, że nikt nie wspomniał o zrzucie i przywróceniu. Będzie dużo szybciej niż dd, jeśli masz wolne miejsce w systemie plików.

Pamiętaj, że w zależności od systemu plików, którego potrzebujesz, możesz potrzebować różnych narzędzi:

  • ext2 / 3/4 - zrzut i przywracanie ( zrzut pakietu w RH / Debian)
  • XFS - xfsdump i xfsrestore (pakiet xfsdump w RH / Debian)
  • ZFS - zfs send i zfs recv
  • BTRFS - wysyłanie btrfs i odbieranie btrfs

Zauważ, że niektóre programy nie mają wbudowanej kompresji (wszystkie oprócz zrzutu) - potokuj do standardowego i używaj pigz w razie potrzeby. ;-)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.