Zwykle kompresuję za pomocą tar zcvf
i dekompresuję za pomocą tar zxvf
(używając gzip z powodu nawyku).
Niedawno dostałem czterordzeniowy procesor z hyperthreading, więc mam 8 rdzeni logicznych i zauważam, że wiele rdzeni nie jest używanych podczas kompresji / dekompresji.
Czy jest jakiś sposób na wykorzystanie nieużywanych rdzeni, aby przyspieszyć?
Odpowiedzi:
Możesz użyć pigz zamiast gzip, który kompresuje gzip na wielu rdzeniach. Zamiast używać opcji -z, przepuszczasz ją przez pigz:
Domyślnie pigz używa liczby dostępnych rdzeni lub ośmiu, jeśli nie może tego zapytać. Możesz poprosić o więcej za pomocą -pn, np. -P 32. pigz ma te same opcje co gzip, więc możesz zażądać lepszej kompresji za pomocą -9. Na przykład
źródło
Możesz także użyć flagi tar "--use-compress-program =", aby powiedzieć tarowi, jakiego programu do kompresji użyć.
Na przykład użyj:
źródło
tar - dir_to_zip | pv | pigz > tar.file
pv pomaga mi oszacować, możesz to pominąć. Ale nadal łatwiej jest pisać i pamiętać.man tar
tak mówi, podobnie jak to .zstd
Jest najszybszym narzędziem do tego. Zauważalne przyspieszenie podczas kompresji i dekompresji. Służytar -cf --use-compress-program=zstdmt
do tego w przypadku wielowątkowości.Wspólne podejście
Istnieje opcja dla
tar
programu:Możesz użyć wielowątkowej wersji narzędzia archiwizującego lub kompresora.
Najpopularniejszymi wielowątkowymi archiwizatorami są pigz (zamiast gzip) i pbzip2 (zamiast bzip2). Na przykład:
Archiver musi zaakceptować -d. Jeśli narzędzie zastępcze nie ma tego parametru i / lub musisz określić dodatkowe parametry, użyj rur (w razie potrzeby dodaj parametry):
Wejścia i wyjścia jedno- i wielowątkowe są kompatybilne. Możesz kompresować za pomocą wersji wielowątkowej i dekompresować za pomocą wersji jedno-wątkowej i odwrotnie.
p7zip
Do kompresji p7zip potrzebny jest mały skrypt powłoki, taki jak poniżej:
Zapisz go jako 7zhelper.sh. Oto przykład użycia:
xz
Odnośnie obsługi wielowątkowej XZ. Jeśli używasz wersji 5.2.0 lub wyższej XZ Utils, można wykorzystać wiele rdzeni do kompresji przez ustawienie
-T
lub--threads
do odpowiedniej wartości za pośrednictwem XZ_DEFAULTS zmiennych środowiskowych (npXZ_DEFAULTS="-T 0"
).To jest fragment człowieka dla wersji 5.1.0alfa:
Nie będzie to jednak działać w przypadku dekompresji plików, które również nie zostały skompresowane z włączonym wątkiem. Od mana dla wersji 5.2.2:
Ponowna kompilacja z wymianą
Jeśli budujesz tar ze źródeł, możesz ponownie skompilować z parametrami
Po ponownej kompilacji tar za pomocą tych opcji możesz sprawdzić dane wyjściowe pomocy tar:
źródło
pigz
) jest włączona tylko wtedy, gdy czyta z pliku. Przetwarzanie STDIN może faktycznie być wolniejsze.xz
opcję. To najprostsze, ale skuteczne podejście.export XZ_DEFAULTS="-T 0"
przed wywołaniemtar
z opcją-J
kompresji xz działa jak urok.Możesz użyć skrótu
-I
do--use-compress-program
przełącznika tar i wywołaćpbzip2
kompresję bzip2 na wielu rdzeniach:źródło
tar: home/cc/ziptest: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors
`Jeśli chcesz mieć większą elastyczność dzięki nazwom plików i opcjom kompresji, możesz użyć:
Krok 1:
find
find /my/path/ -type f -name "*.sql" -o -name "*.log" -exec
To polecenie wyszuka pliki, które chcesz zarchiwizować, w tym przypadku
/my/path/*.sql
i/my/path/*.log
. Dodaj tyle,-o -name "pattern"
ile chcesz.-exec
wykona następne polecenie, używając wynikówfind
:tar
Krok 2:
tar
tar -P --transform='s@/my/path/@@g' -cf - {} +
--transform
jest prostym parametrem zastępującym ciąg znaków. Spowoduje to usunięcie ścieżki plików z archiwum, dzięki czemu katalog główny tarballa stanie się bieżącym katalogiem podczas rozpakowywania. Pamiętaj, że nie możesz użyć-C
opcji zmiany katalogu, ponieważ stracisz korzyścifind
: wszystkie pliki katalogu zostaną dołączone.-P
każetar
używać ścieżek bezwzględnych, więc nie wywołuje ostrzeżenia „Usuwanie wiodącego` / 'z nazw członków ”. Wiodące „/” należy usunąć--transform
mimo to.-cf -
mówi,tar
aby użyć nazwy tarball, którą określimy później{} +
używa wszystkichfind
znalezionych wcześniej plikówKrok 3:
pigz
pigz -9 -p 4
Używaj tyle parametrów, ile chcesz. W tym przypadku
-9
jest to poziom kompresji i-p 4
liczba rdzeni dedykowanych do kompresji. Jeśli uruchomisz to na mocno obciążonym serwerze internetowym, prawdopodobnie nie chcesz używać wszystkich dostępnych rdzeni.Krok 4: zarchiwizuj nazwę
> myarchive.tar.gz
Wreszcie.
źródło
Stosunkowo nowsze narzędzie do kompresji (de), które warto rozważyć, to standard . Doskonale radzi sobie z wykorzystaniem zapasowych rdzeni i dokonał wielkich kompromisów, jeśli chodzi o stosunek kompresji do czasu (de) kompresji. Jest również wysoce precyzyjny w zależności od potrzeb w zakresie kompresji.
źródło