Niepoprawne oszacowanie pliku nieskompresowanego?

9

Miałem duży skompresowany plik (~ 60G) ( tar.gz).

Kiedyś splitrozbijałem go na 4 części, a potem catponownie łączyłem.

Jednak teraz, gdy próbuję oszacować rozmiar nieskompresowanego pliku, okazuje się, że jest mniejszy niż oryginał? Jak to jest możliwe?

$ gzip -l myfile.tar.gz 
         compressed        uncompressed  ratio uncompressed_name
        60680003101          3985780736 -1422.4% myfile.tar
pkaramol
źródło
Czy to splitnaprawdę ma znaczenie? Czy problem występuje tylko po podzieleniu ich i ponownym połączeniu?
Barmar

Odpowiedzi:

20

Jest to spowodowane wielkością pola używanego do przechowywania nieskompresowanego rozmiaru w plikach gzip: to tylko 32 bity, więc gzipmożna przechowywać tylko rozmiary plików do 4 GiB. Wszystko większe jest poprawnie skompresowane i nieskompresowane, ale gzip -ldaje niepoprawny rozmiar.

Tak więc podział tarballa i jego rekonstrukcja nie spowodowały tego i nie powinny wpłynąć na plik - jeśli chcesz się upewnić, możesz to sprawdzić gzip -tv.

Zobacz najszybszym sposobem wypracowania nieskompresowanego wielkości dużego pliku zgzipowanego więcej szczegółów i instrukcja :gzip

gzipFormat odpowiada wielkości modulo wejściowego 2³² , tak kompresją i stosunek kompresji są niepoprawnie podane dla skompresowanych plików 4 GiB i większych.

Stephen Kitt
źródło
Tak więc rzeczywista treść może być nienaruszona, prawda?
Ruslan
@ Ruslan tak, wyświetlany rozmiar jest nieprawidłowy, ale zawartość jest w porządku.
Stephen Kitt
+1 Miałem zgadywać, że to błąd UINT32 czy coś w tym rodzaju.
mathreadler