Dlaczego miałbym tarować pojedynczy plik?


101

W mojej firmie pobieramy migawkę lokalnej bazy danych rozwoju jako db.dump.tar.gzplik. Kompresja ma sens, ale archiwum zawiera tylko jeden plik ( db.dump).

Czy jest sens archiwizacji pojedynczego pliku, czy jest to .tar.gzpo prostu taki idiom? Dlaczego nie tylko .gz?


5
Moim zdaniem jest to tylko kwestia konwencji. Gdy ludzie widzą plik z rozszerzeniem gz, domyślnie myślą o tym jest użycie tar -zxvf. Ale dla tych, którzy patrzą na nazwę pliku i widzą, że nie ma go .tgzjako rozszerzenia, gzip plik zrzutu bazy danych jest w porządku. Ponieważ nie znam szczegółowo algorytmów kompresji, nie jestem pewien, czy tar wykonuje jakąkolwiek kompresję na rzadkich plikach, takich jak db dump, ale w przypadku zwykłych plików tekstowych bezpośredni gzip pliku ma bardzo małą przewagę wielkości nad tarowaniem pierwszego i gzip ing plik
MelBurslan,

3
Jedyne, co zrobi tarowanie jednego pliku, to dodanie kilku bloków metadanych na początku i na końcu pliku. Rzeczywiste dane pliku przechodzą przez tar do kompresora nietknięte. W przypadku dużego pliku różnica wielkości między zwykłą kompresją a tarowaniem będzie nieistotna.
płukanie

W przeszłości, gdy próbowałem różnych metod kompresji, okazało .tar.gzsię, że jestem lepszy od większości innych powszechnych metod. Pamiętam, że był lepszy niż sprawiedliwy, .tarale nie pamiętam, czy był lepszy niż sprawiedliwy .gz. .cabFormat ironicznie Window był najlepszą z metod, które wypróbowałem, co było bardzo nieoczekiwane.
Pharap,

@Pharap tarnie jest algorytmem kompresji, jest to format archiwizacji
ogrodnik

1
@gardenhead Cóż, to wyjaśnia, dlaczego nie działało to zbyt dobrze.
Pharap

Odpowiedzi:


163

Zalety używania .tar.gzzamiast tego .gzsą takie

  • tarprzechowuje więcej metadanych (uprawnienia UNIX itp.) niż gzip.
  • konfigurację można łatwiej rozbudować w celu przechowywania wielu plików
  • Pliki .tar.gz są bardzo powszechne, tylko pliki spakowane gzipem mogą powodować problemy niektórych użytkowników. (por. komentarz MelBurslans )

Koszty użytkowania tarsą również bardzo małe.

Jeśli nie jest to naprawdę potrzebne, nadal nie polecam tar pojedynczego pliku. Istnieje wiele przydatnych narzędzi, które mogą uzyskać dostęp do skompresowanych pojedynczych plików bezpośrednio (takich jak zcat, zgrepitd. - także dla istniejących bzip2i xz).


35
Nie rozważałem aspektu metadanych. Bardzo dobry punkt
ogrodnik

5
Jeśli widzę a .gz, moim pierwszym instynktem jest tar -zxf foo.gz. Zapamiętywanie, że gzip jest nawet poleceniem, zajmuje kilka sekund.
bgStack15 20.04.16

2
@ bgStack15 FWIW nie potrzebujesz z(lub -o to chodzi), większość nowoczesnych tars automatycznie wykryje, że plik wymaga dekompresji.
Drawbenn,

2
Domyślnie gzipzachowuje oryginalną nazwę pliku i znacznik czasu. Możesz użyć tej -Nopcji podczas dekompresji, aby je przywrócić.
Ross Ridge

@RossRidge dzięki, ponownie usunąłem tekst o oryginalnej nazwie pliku.
jofel

63

Właściwie zadajesz tylko połowę pytania. Drugie pytanie brzmi: „Dlaczego miałbym kompresować plik tar za pomocą gzip?”. Odpowiedź nie tylko gzipsprawia , że plik jest mniejszy (w większości przypadków):

tar:

  • przechowuje nazwę pliku i inne metadane : tryb, identyfikator właściciela, identyfikator grupy, rozmiar pliku, czas modyfikacji
  • przechowuje sumę kontrolną (tylko dla nagłówka)

gzip:

  • może przechowywać oryginalną nazwę pliku, ale jest to opcjonalne
  • ma sumę kontrolną CRC-32 względem oryginalnych danych
  • kompresuje plik

Tylko tarTy nie możesz być pewien, że Twoje dane nie zostały uszkodzone. Tylko gzipTy nie możesz przywrócić identyfikatora użytkownika / grupy, czasu modyfikacji i możliwe, że nie oryginalna nazwa pliku.

Kombinacja jest bardziej wydajna niż poszczególne polecenia / formaty, ponieważ uzupełniają się wzajemnie .


Dzięki za wyjaśnienie! Kiedy czytałem tarstronę wikipedii, źle zrozumiałem opis, co oznacza, że ​​suma kontrolna dotyczyła całego pliku.
ogrodnik

To wydaje mi się poprawną odpowiedzią. Dodałbym również kilka innych powodów, które możesz chcieć edytować, jeśli się zgadzasz. 1) Administrator nie pobiera żadnych dodatkowych opłat za sam plik .tgz nad .tar lub .gz: wszystkie są tylko jednym poleceniem 2) Administratorzy wykonują kopie zapasowe, kopiują, przenoszą, przenoszą DUŻO plików z wielu różnych powodów; Kopie zapasowe DB to tylko jedna z nich. Mogą korzystać z tego samego przepływu pracy, narzędzi i poleceń, niezależnie od tego, czy tworzy kopię zapasową jednego czy wielu plików; po co więc specjalnie używać składni polecenia gzip, w przypadku gdy istnieje jeden plik?
Dewi Morgan

30

Jest to dość duża zaletą korzystania tylko-skompresowane pliki tekstowe - zawartość może być bezpośrednio dostępne z narzędzi wiersza polecenia, takich jak less, zgrep, zcat.


interesujący punkt, ale pytanie dotyczy migawki bazy danych, która raczej nie będzie plikiem tekstowym, a nie tylko spakowana gzipem.
underscore_d

9
@underscore_d wszystkie moje zrzuty bazy danych (głównie mysql i pgsql) są zrzutami tekstowymi, częściowo dlatego, że są one łatwiejsze do odzyskania, jeśli coś zdarzy się częściowo uszkodzić zrzut, a częściowo dlatego, że mogę wstępnie przetworzyć dowolne przywracanie za pomocą zwykłych narzędzi (sed , awk, perl itp.), jeśli trzeba. tzn. bardziej niezawodny i bardziej użyteczny niż zrzuty binarne. Kompromis polega na tym, że zrzuty tekstu są zwykle większe (kogo to obchodzi? Miejsce na dysku jest tanie i mamy dobrą kompresję), a przywracanie jest znacznie wolniejsze (ale mniej, jeśli przywrócisz transakcję).
cas

1
Jaka jest przewaga tych narzędzi nad prostym podłączeniem wyjścia dekompresora do zwykłych narzędzi?
CodesInChaos

21

Powiedziałbym, że ludzie prawdopodobnie nie zdają sobie sprawy, że mogą używać gzip / bzip2 / xz bez tar. Być może dlatego, że pochodzą z tła DOS / Windows, gdzie normalna jest kompresja i archiwizacja w jednym formacie ( ZIP , RAR itp.).

Chociaż w niektórych sytuacjach używanie tar może mieć niewielkie zalety ze względu na przechowywanie metadanych lub możliwość dodawania dodatkowych plików, istnieją również wady. Za pomocą zwykłego pliku gzip / bzip2 / xz można go zdekompresować i przesłać zdekompresowane dane bezpośrednio do innego narzędzia (takiego jak baza danych) bez konieczności przechowywania zdekompresowanych danych jako pliku na dysku. Z tarballem jest to trudniejsze.


2
W przypadku GNU tar, wystarczy przełączyć przełącznik -O na wyjście na standardowe wyjście, więc nie powiedziałbym, że jest to o wiele trudniejsze!
hyde

5
Pierwszy akapit wydaje się wystarczająco wiarygodny dla plików korzystających z tgzrozszerzenia. Jednak w przypadku OP używa się tar.gz- a jeśli ci hipotetyczni byli użytkownicy Win / DOS są podobni do mnie, pierwszą rzeczą, jaką mówią, patrząc na taki plik, jest: „Dlaczego ma 2 rozszerzenia?”. Następnie google go i szybko uzyskać odpowiedź, co wyraźnie wyjaśnia, że tari kompresja są różne. ;-)
underscore_d

17

Istnieje ważna różnica, która może sprawić, że użycie będzie tarważne w pewnych okolicznościach: Oprócz „metadanych”, o których wspomniał @jofel w swojej odpowiedzi, tar zapisuje nazwę pliku w archiwum. Po wyodrębnieniu otrzymujesz oryginalną nazwę pliku, niezależnie od tego, jak nazywa się archiwum.

W twoim przypadku archiwum tar i plik zawiera ona mieć podobnych nazw db.dump.tar.gzi db.tar, ale przypuśćmy, zmienić nazwę pliku tar do 20-Apr-16.dump.tgz, lub cokolwiek. Rozwiąż to z tar xvfz, a otrzymasz db.dump. Dla porównania rozpakuj 20-Apr-16.dump.gzi masz 20-Apr-16.dump. (Edycja: jak wskazano w komentarzach, gzip zapisuje również nazwę pliku, ale zwykle nie jest używany podczas rozpakowywania). tarArchiwum może zawierać także względną ścieżkę, która stawia rozpakowany plik w podkatalogu.

Twój przypadek użycia określi, czy tego rodzaju trwałość nazw plików jest potrzebna, a nawet pożądana , czy faktycznie jest niepożądana. Ale z pewnością, niezależnie od kompresji, tararchiwum podróżuje inaczej niż zwykły plik.


6
gzip zapisuje również oryginalną nazwę pliku.
psusi

8
Tak. Nazwa jest opcjonalna w nagłówku gzip - oczywiście nie będzie takiego, jeśli skompresujesz wyjście strumieniowe polecenia - i większość narzędzi domyślnie go nie przywróci (na przykład, musisz użyć gzip --namejawnie podczas dekompresji), ale nie musisz używać tar, aby uzyskać trwałość nazw plików.
Mil

Dzięki za zwrócenie na to uwagi, nie wiedziałem o tym. Ponieważ jednak nie jest to zachowanie domyślne, chodzi o to, że: dystrybucja pliku w formacie tar zachowuje oryginalną nazwę pliku (i ewentualnie ścieżkę względną), bez interwencji odbiorcy. Dystrybucja spakowanego pliku (g) ​​nie działa.
Alexis

8

Oprócz wszystkich innych odpowiedzi, ostatnio spotkałem się ze skryptową sytuacją, w której oczekiwano tylko jednego pliku, ale poprzedni pracownik napisał skrypty z możliwością wygenerowania więcej niż jednego pliku. Pliki zostały smołowane i skompresowane, a następnie przesłane i rozszerzone.

Gdy proces urósł do tego stopnia, że ​​utworzył plik o wielkości 4,3 GB, przewinął i utworzył plik .dump.001 oprócz pliku .dump. Wszystkie skrypty po prostu działały.

To jest zdefiniowane proaktywne lenistwo sysadmin!


2

Zeskrobałbym pojedynczy plik, aby go skopiować, zachowując znacznik czasu (który można łatwo przeoczyć w plikach do pobrania). Uprawnienia do plików i własność są mniej ważne: pobieranie to termin, który dotyczy systemów, które nie są dobrze zintegrowane.

Bez względu na to, czy jest to tar, czy nie, standardową praktyką jest kompresowanie pliku, aby przyspieszyć pobieranie - i uniknąć wyczerpania miejsca na dysku.


-1

Tar jest szczególnie użyteczny w przypadku wielu plików, które nie zostały zapisane w formalnym systemie plików, zawsze tak było. Jeśli z jakiegoś powodu jest okazja, aby zapisać tylko 1 plik, nie ma to rzeczywistych konsekwencji. Mogę dodać mój plik .tar.gz bezpośrednio do / dev / sdx bez względu na partycję lub system plików. Równie dobrze może to być taśma.

Zwykle dzieje się tak, ponieważ skrypt lub proces został skopiowany z kodu dziedzictwa. Oczywiście nie ma potrzeby tarowania, jeśli istnieje tylko jeden plik, ale pozostawia miejsce na ulepszenie wielu plików ......

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.