Neden tek bir dosyayı tar edeyim?


101

Benim şirketimde, yerel bir geliştirme veritabanının anlık görüntüsünü db.dump.tar.gzdosya olarak indiriyoruz . Sıkıştırma anlamlı, ancak tarball sadece tek bir dosya ( db.dump) içeriyor .

Tek bir dosyayı arşivlemenin bir anlamı var mı, yoksa .tar.gzbu kadar yaygın bir deyim mi? Neden sadece değil .gz?


5
Bence sadece bir kongre meselesi. İnsanlar gz uzantılı bir dosya gördüklerinde, varsayılan düşünceleri kullanmaktır tar -zxvf. Ancak dosya adına bakıp .tgzuzantı olmadığını görmek isteyenler için db döküm dosyasını gziplemek son derece iyidir. Sıkıştırma algoritmalarını ayrıntılı olarak bilmediğim için, tar'ın db dökümü gibi seyrek dosyalar üzerinde herhangi bir sıkıştırma yapıp yapmadığından emin değilim, ancak düz metin dosyaları için, dosyanın doğrudan gzip'i ilk ve gzip'i taramaktan çok daha küçük bir boyut avantajına sahiptir dosya işleme
MelBurslan

3
Tek bir dosyanın yapacağı tek şey, dosyanın başına ve sonuna birkaç meta veri bloğu eklemek. Gerçek dosya verileri tar'dan dokunulmamış kompresöre geçer. Yani büyük bir dosya için düz sıkıştırma ve daralan arasındaki boyut farkı önemsiz olacaktır.
plugwash

Geçmişte, çeşitli sıkıştırma yöntemlerini denediğimde, .tar.gzdiğer yaygın yöntemlerden daha üstün olduğumu fark ettim . Bunun sadece üstün olduğunu .tarhatırlıyorum ama daha iyi olup olmadığını hatırlayamıyorum .gz. İronik olarak Pencere .cabformatı, çok beklenmedik olan, denediğim yöntemlerin en iyisiydi.
Pharap

@Pharap tarbir sıkıştırma algoritması değildir, bu bir arşivleme formatıdır
gardenhead

1
@gardenhead Peki bu neden çok işe yaramadığını açıklar.
Pharap

Yanıtlar:


163

Kullanmanın avantajları .tar.gzyerine .gzo vardır

  • tar'dan daha fazla meta veri (UNIX izinleri vb.) depolar gzip.
  • kurulum birden fazla dosyayı depolamak için daha kolay genişletilebilir
  • .tar.gz dosyaları çok yaygındır, sadece-gzipli dosyalar bazı kullanıcıları bulabilir. (bkz. MelBurslans yorum )

Kullanmanın ek yükü tarde çok küçük.

Gerçekten gerekli değilse, hala tek bir dosyayı tar tavsiye etmiyorum. (Örneğin doğrudan sıkıştırılmış tek dosyalara erişebilir birçok faydalı araç vardır zcat, zgrep- aynı zamanda mevcut vb bzip2ve xz).


35
Meta-veri yönünü düşünmedim. Çok iyi nokta
gardenhead

5
Eğer bir görürsem .gz, ilk içgüdüm etmektir tar -zxf foo.gz. Gzip'in bir komut olduğunu bile hatırlamak birkaç saniye daha sürer.
bgStack15

2
@ bgStack15 FWIW’ya ihtiyacınız yok z(veya bunun -için), çoğu modern tars dosyanın sıkıştırılması gereken dosyaları otomatik olarak algılar.
drewbenn

2
Varsayılan gzipolarak orijinal dosya adını ve zaman damgasını kaydeder. -NOnları açmak için açma sırasında bu seçeneği kullanabilirsiniz .
Ross Ridge,

@RossRidge teşekkürler, orijinal dosya adı hakkındaki metni tekrar kaldırdım.
jofel

63

Aslında sorunun sadece yarısını soruyorsun. Diğer soru şu: "Neden bir tar dosyasını gzip ile sıkıştırmalıyım?". Ve cevabı sadece gzipdosyayı daha küçük yapan değil (çoğu durumda):

tar:

  • dosya adını ve diğer meta verileri depolar : mod, sahip kimliği, grup kimliği, dosya boyutu, değiştirme zamanı
  • bir sağlama toplamı depolar (yalnızca başlık için)

gzip:

  • orijinal dosya adını saklayabilir, ancak bu isteğe bağlıdır
  • orijinal veriler üzerinde bir CRC-32 sağlama toplamı var
  • dosyayı sıkıştırır

Yalnızca verilerinizin bozulmadığından taremin olamazsınız. Yalnızca kullanıcı / grup kimliğini, değişiklik zamanını ve mümkün olan orijinal dosya adını geri yükleyemezsiniz.gzip

Kombinasyon, her bir komuttan / formattan daha güçlüdür çünkü birbirlerinin özelliklerini tamamlarlar .


Bunu açıkladığın için teşekkürler! tarWikipedia sayfasını okurken, sağlama toplamının tamamı için olduğu anlamına geldiği açıklamasını yanlış anladım.
gardenhead

Bu bana doğru cevap gibi geliyor. Ayrıca, kabul ederseniz düzenlemek isteyebileceğiniz birkaç sebep daha eklerim. 1) .tgz üzerinden .tar veya .gz üzerinden yöneticiye ek bir maliyet yoktur: hepsi tek bir komuttur 2) Yöneticilerin bir sürü farklı nedenden dolayı yedeklemeleri, kopyalanmaları, yer değiştirmeleri, bir sürü dosyayı taşımaları; DB yedekleri bunlardan sadece bir tanesidir. Bir veya daha fazla dosyayı yedekleyip yedeklemediklerinde aynı iş akışını, araçları ve komutları kullanabilirler; öyleyse neden bir dosyanın olduğu durumda, gzip komutunun sözdizimini kullanarak özel durum?
Dewi Morgan,

30

İçindekiler gibi doğrudan komut satırı araçları ile ulaşılabilir - sadece-gzip'lenmiş metin dosyaları kullanarak oldukça büyük bir avantaj vardır less, zgrep, zcat.


ilginç bir nokta, ancak soru, bir metin dosyası olması muhtemel olmayan ve sadece gzipli olmayan bir veritabanı görüntüsüdür.
underscore_d

9
@underscore_d benim veritabanı dökümlerimin tümü (çoğunlukla mysql ve pgsql) metin döküntüleridir, çünkü kısmen çöplüğü kısmen bozacak bir şey olursa daha kurtarılabilirler ve kısmen normal araçlarla herhangi bir geri yüklemeyi önceden işleyebildiğim için (sed) , awk, perl, vs.) gerekirse. yani ikili çöplüklerden daha güvenilir ve daha kullanışlı. Takas, metin dökümlerinin daha büyük olma eğilimindedir (disk alanı ucuzdur ve iyi sıkıştırma yapıyoruz) ve geri yükleme işlemleri önemli ölçüde yavaştır (geri yüklemeyi bir işleme sardığınızda daha az).
cas,

1
Bu araçların, bir dekompresörün çıktısını düz aletlere basitçe bağlamasının avantajı nedir?
KodlarInChaos

21

İnsanların sadece gzip / bzip2 / xz tar kullanmadan kullanabileceklerinin farkında olmadığını söyleyebilirim . Muhtemelen , sıkıştırma ve arşivlemenin tek bir formatta ( ZIP , RAR , vb.) Birleştirilmesinin normal olduğu bir DOS / Windows arka planından geldikleri için .

Meta verilerin depolanması veya fazladan dosya eklenmesi nedeniyle bazı durumlarda katran kullanmanın bazı avantajları olsa da, dezavantajları da vardır. Düz bir gzip / bzip2 / xz dosyası ile, sıkıştırılmış verileri, diskte dosya olarak saklamak zorunda kalmadan, sıkıştırılmış verileri doğrudan başka bir araca (veritabanınız gibi) aktarabilirsiniz. Bir tarball ile bu daha zordur.


2
GNU tar ile stdout'a çıktı sadece -O geçişi alır, bu yüzden daha zor olduğunu söyleyemem !
hyde

5
İlk paragraf, tgzuzantıyı kullanan dosyalar için yeterince makul görünüyor . Bununla birlikte, OP'nin davası kullanır tar.gz- ve bu varsayımsal eski Win / DOS kullanıcıları benim gibi bir şeyse, böyle bir dosyaya bakarken ilk söyledikleri şey: 'Neden 2 uzantı var?'. Sonra google ve hızlı bir şekilde cevabı alırlar, bu özellikle bunu tarve sıkıştırmanın farklı olduğunu açıklar . ;-)
underscore_d

17

tarBazı durumlarda kullanımı önemli kılan önemli bir fark vardır : Cevabında @jofel tarafından belirtilen "meta verilerin" yanı sıra tar , dosya adını arşive kaydeder . Onu çıkarmak zaman orijinal dosya adını almak bakılmaksızın arşiv olarak adlandırılan.

Sizin durumunuzda, tar arşivi ve içerdiği dosya ilgili adlara sahiptir db.dump.tar.gzve db.tartar tar dosyasını 20-Apr-16.dump.tgzveya başka bir şekilde yeniden adlandırdığınızı varsayalım . Şununla kaldır tar xvfz, sen de db.dump. Karşılaştırma için, sıkıştırmayı açın 20-Apr-16.dump.gzve elinizde 20-Apr-16.dump. (Düzenleme: yorumlarda belirtildiği gibi, gzip ayrıca dosya adının bir kaydını tutar; ancak sıkıştırmayı açarken normalde kullanılmaz). Bir tararşiv ayrıca çıkarılan dosyayı bir alt dizine yerleştiren göreceli bir yol adı içerebilir.

Kişisel kullanım durumu dosya adı kalıcılık bu tür gerekli, hatta olup olmadığını belirleyecektir istediği ya aslında istenmeyen bir durumdur. Ancak, kesinlikle, sıkıştırma ne olursa olsun, bir tararşiv normal bir dosyadan farklı bir yol alır.


6
gzip ayrıca orijinal dosya adını da kaydeder.
psusi

8
Evet. Ad, gzip başlığında isteğe bağlıdır - açıkçası bir komutun akış çıkışını sıkıştırırsanız bir tane olmaz - ve çoğu araç varsayılan olarak geri yüklemez (örneğin, gzip --nameaçma sırasında açık bir şekilde kullanmanız gerekir ), ancak dosya adı kalıcılık elde etmek için tar kullanmak zorunda değilsiniz.
Mil

Bunu gösterdiğin için teşekkürler, bunu bilmiyordum. Yine de, varsayılan davranış bu olmadığı için, nokta şu şekildedir: Bir dosyayı tar formatında dağıtmak , alıcının müdahalesi olmadan orijinal dosya adını (ve muhtemelen göreceli yolu) korur. (G) sıkıştırılmış bir dosyayı dağıtmak değildir.
alexis,

8

Diğer tüm cevaplara ek olarak, son zamanlarda yalnızca bir dosyanın beklendiği bir senaryo senaryosuna çarptım, ancak önceki bir çalışan senaryoları birden fazla dosyanın oluşturulması ihtimaliyle yazdı. Böylece dosyalar katlanıp bzip edildi, sonra transfer edildi ve genişletildi.

Işlem noktasına büyüdüğünde 4.3 GB'lık bir dosya yaptı, devrildi ve .dump dosyasına ek olarak .dump.001 dosyası yaptı. Tüm senaryolar çalışmaya devam etti.

Bu proaktif sysadmin tembellik tanımlanır!


2

Zaman damgasını koruyarak kopyalamak için tek bir dosyayı kullandım (indirmelerde kolayca göz ardı edilir). Dosya izinleri ve sahiplik daha az önemlidir: İndirme , iyi entegre edilmemiş sistemler için geçerli bir terimdir.

Katranlı olsun ya da olmasın, indirme işlemlerini daha hızlı yapmak için dosyayı sıkıştırmak standart bir uygulamadır - ve disk alanı yetersiz kalmaz.


-1

Tar, resmi bir dosya sistemine yazılmayan birden fazla dosya için özellikle yararlıdır, her zaman olmuştur. Bir nedenden dolayı, bazı sebeplerden dolayı, yazılacak sadece 1 dosya varsa, bunun hiçbir sonucu yoktur. .Tar.gz'imi bölüm veya dosya sistemine bakmadan doğrudan / dev / sdx dosyasına yazabilirim. Teyp de olabilir.

Genellikle yapılır, çünkü komut dosyası veya işlem miras kodundan kopyalandı. Tabii ki sadece bir dosya varsa tar'a gerek yok, ama birden fazla dosyada geliştirme için yer bırakıyor ......

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.