xz vs. gzip – kompresja logów
Katalog z logami zawiera ponad 100.000 plików średniej wielkości 40kB każdy. Po spakowaniu każdego z tych plików gzip’em, wielkość spakowanego katalogu wynosiła ~1,9GB (jak zeznało du).
Zrobiłem eksperyment. Każdy z plików rozpakowałem:
# find . -type f -name "*.gz" -exec gunzip -v {} \;
a następnie spakowałem xz:
# find . -type f -name "*.txt" -exec xz -v {} \;
Spakowane w ten sposób plilki zajmują 818MB. Odzyskałem połowę miejsca zużytego przez te pliki. Właśnie robię test z plikami ~60kB w stanie bez kompresji i zobaczymy jak wyjdzie. Oczywiście, zdaję sobie sprawę, że ~800MB to w dzisiejszych czasach przestrzeń która nie powala na kolana, ale jeśli liczyć więcej plików i przestrzenie w TB, to różnica będzie na prawdę zauważalna.
Dla logrotate wystarczy w /etc/logrotate.conf
wpisać:
compresscmd /usr/bin/xz
i cieszyć się oszczędnością przestrzeni. Wadą xz jest jak na razie brak wielo-wątkowości, co jest niestety dość boleśnie odczuwalne :(
Inna maszyna. 364 plików z logami, przed kompresją: 2GB, po kompresji
xz -9
: 80MB. Następnie rozpakowane i spakowanegzip -9
zajmują 105MB. Różnica niewielka, 1.3125 (jakieś 23,81%). Czas pakowania xz był kilkukrotnie większy niż w przypadku gzip’a.Te same ponad 100.000 plików po 40kB każdy (jak w pierwszym doświadczeniu) po rozpakowaniu zajmują 4,1GB. Każdy z nich zostanie spakowany
xz -9
, jako że domyślny stopień kompresji dla xz (podobnie jak i dla gzip) to 6. Zajęte miejsce: 818M. Warto zatem korzystać z domyślnej wartości.A jak z czasem kompresji ? bzip2 też pakuje lepiej niż gzip z default-a, ale czas jest nieporównywalnie dłuższy szczególnie przy gigabajtowych plikach (np. z logami).
bzip2 będę męczył po weekendzie, teraz mam wyjazd na tapecie :) Jeśli chodzi o czas, to dobrze jest uwzględnić nie tylko czas pakowania, ale i czas rozpakowywania. Będę miał to na uwadze robiąc testy. xz o wiele bardziej się wlecze przy kompresji.
Odnośnie gigabajtowych plików – nie byłoby Ci wygodniej rotować logi codziennie (daily)? Plików jest więcej, ale czas ich obsługi znacznie się skraca, szczególnie jak potrzebujesz wyłuskać kilka danych z konkretnej godziny danego dnia.