Masalah dengan .tar.gz
arsip adalah bahwa, ketika saya mencoba hanya daftar konten arsip, komputer benar-benar mendekompresinya, yang akan memakan waktu sangat lama jika file tersebut besar.
Format file lain seperti .7z
, .rar
, .zip
tidak memiliki masalah ini. Mendaftarkan konten mereka hanya perlu sesaat.
Menurut pendapat saya yang naif, ini adalah kelemahan besar dari .tar.gz
format arsip.
Jadi saya sebenarnya punya 2 pertanyaan:
- mengapa orang menggunakan
.tar.gz
begitu banyak, meskipun ada kelemahan ini? - pilihan apa (maksud saya perangkat lunak atau alat lain) yang saya miliki jika saya ingin kemampuan "daftar isi instan"?
tar
compression
gzip
archive
Dave
sumber
sumber
Jawaban:
Sangat penting untuk memahami ada pertukaran di sini.
tar
berarti tape archiver . Pada kaset, Anda kebanyakan membaca dan menulis berurutan. Kaset jarang digunakan saat ini, tetapitar
masih digunakan untuk kemampuannya membaca dan menulis datanya sebagai streaming.Anda dapat melakukan:
Anda tidak dapat melakukannya dengan
zip
atau sejenisnya.Anda bahkan tidak dapat membuat daftar konten
zip
arsip tanpa menyimpannya secara lokal di file yang dapat dicari terlebih dahulu. Berpikir seperti:tidak akan bekerja
Untuk mencapai pembacaan cepat konten,
zip
atau sejenisnya perlu membuat indeks. Indeks itu dapat disimpan di awal file (dalam hal ini hanya dapat ditulis ke file biasa, bukan stream), atau pada akhirnya, yang berarti pengarsip perlu mengingat semua anggota arsip sebelum mencetaknya pada akhirnya dan berarti arsip yang terpotong mungkin tidak dapat dipulihkan.Itu juga berarti anggota arsip perlu dikompresi secara individual yang berarti rasio kompresi yang jauh lebih rendah terutama jika ada banyak file kecil.
Kelemahan lain dengan format seperti
zip
adalah bahwa pengarsipan terkait dengan kompresi, Anda tidak dapat memilih algoritma kompresi. Lihat bagaimanatar
arsip digunakan untuk dikompresi dengancompress
(tar.Z
), kemudian dengangzip
, kemudianbzip2
, kemudianxz
sebagai algoritma kompresi baru yang lebih performan dirancang. Sama berlaku untuk enkripsi. Siapa yang akan mempercayaizip
enkripsi saat ini?Sekarang, masalah dengan
tar.gz
arsip tidak sebanyak yang Anda butuhkan untuk mengompresnya. Mengompres seringkali lebih cepat daripada membaca disk (Anda mungkin akan menemukan bahwa mendaftar konten arsip tgz besar lebih cepat daripada mendaftar yang sama tanpa terkompresi ketika tidak di-cache dalam memori), tetapi Anda harus membaca seluruh arsip.Tidak bisa membaca indeks dengan cepat bukanlah masalah. Jika Anda melihat perlu sering membaca isi tabel arsip, Anda bisa menyimpan daftar itu dalam file terpisah. Misalnya, pada waktu pembuatan, Anda dapat melakukan:
Masalah IMO yang lebih besar adalah kenyataan bahwa karena aspek berurutan dari arsip, Anda tidak dapat mengekstrak file individual tanpa membaca seluruh bagian awal dari arsip yang mengarah padanya. TKI, Anda tidak dapat melakukan pembacaan acak dalam arsip.
Sekarang, untuk file yang dapat dicari, tidak harus seperti itu.
Jika Anda mengompres
tar
arsip Anda dengangzip
, yang kompres itu secara keseluruhan, algoritma kompresi menggunakan data yang terlihat di awal untuk kompres, jadi Anda harus mulai dari awal hingga membuka kompres.Tetapi
xz
format dapat dikonfigurasikan untuk mengompresi data dalam potongan individual yang terpisah (cukup besar sehingga kompresi menjadi efisien), itu berarti bahwa selama Anda menyimpan indeks di akhir potongan terkompresi itu, untuk file yang dapat dicari, Anda mengakses data yang tidak terkompresi secara acak (setidaknya dalam chunks).pixz
(paralelxz
) menggunakan kemampuan itu saat mengompresitar
arsip untuk juga menambahkan indeks awal setiap anggota arsip di akhirxz
file.Jadi, untuk file yang dapat dicari, Anda tidak hanya bisa mendapatkan daftar isi arsip tar secara instan (tanpa metadata) jika mereka telah dikompres dengan
pixz
:Tetapi Anda juga dapat mengekstrak elemen individual tanpa harus membaca seluruh arsip:
Sekarang, mengapa hal-hal seperti
7z
atauzip
jarang digunakan di Unix sebagian besar karena mereka tidak dapat mengarsipkan file Unix. Mereka telah dirancang untuk sistem operasi lain. Anda tidak dapat melakukan pencadangan data yang benar dengan menggunakan itu. Mereka tidak dapat menyimpan metadata seperti pemilik (id dan nama), izin, mereka tidak dapat menyimpan symlink, perangkat, fifos ..., mereka tidak dapat menyimpan informasi tentang tautan keras, dan informasi metadata lainnya seperti atribut yang diperluas atau ACL.Beberapa dari mereka bahkan tidak dapat menyimpan anggota dengan nama sewenang-wenang (beberapa akan tersedak backslash atau baris baru atau titik dua, atau nama file non-ascii) (beberapa
tar
format juga memiliki batasan).Jangan pernah mengompres file tgz / tar.xz ke disk!
Jika tidak jelas, seseorang tidak menggunakan arsip
tgz
atautar.bz2
,tar.xz
... sebagai:Jika Anda memiliki
.tar
file terkompresi yang berbohong pada sistem file Anda, itu karena Anda melakukan kesalahan.Inti dari mereka
xz
/bzip2
/gzip
menjadi kompresor aliran adalah bahwa mereka dapat digunakan dengan cepat, dalam pipa seperti padaMeskipun
tar
implementasi modern tahu bagaimana memohonunxz
/gunzip
/bzip2
sendiri, jadi:umumnya juga akan berfungsi (dan sekali lagi tidak mengompres data dengan cepat dan tidak menyimpan versi terkompresi dari arsip pada disk).
Contoh
Berikut pohon sumber kernel Linux yang dikompresi dengan berbagai format.
Pertama, seperti disebutkan di atas, 7z dan zip sedikit berbeda karena mereka tidak dapat menyimpan beberapa symlink di sana dan kehilangan sebagian besar metadata.
Sekarang beberapa timing untuk mendaftar konten setelah mem-flush cache sistem:
Anda akan melihat daftar
tar.xz
file lebih cepat daripada yang.tar
bahkan pada PC berusia 7 tahun ini karena membaca megabita ekstra dari disk membutuhkan waktu lebih lama daripada membaca dan mendekompresi file yang lebih kecil.Kemudian OK, mendaftar arsip dengan 7z atau zip lebih cepat tapi itu bukan masalah seperti yang saya katakan, itu mudah dikerjakan dengan menyimpan daftar file di samping arsip:
Bahkan lebih cepat dari 7z atau zip bahkan setelah menjatuhkan cache. Anda juga akan melihat bahwa ukuran kumulatif arsip dan indeksnya masih lebih kecil dari arsip zip atau 7z.
Atau gunakan
pixz
format yang diindeks:Sekarang, untuk mengekstraksi masing-masing elemen arsip, skenario kasus terburuk untuk arsip tar adalah ketika mengakses elemen terakhir:
Itu sangat buruk karena perlu membaca (dan membuka kompresi) seluruh arsip. Dibandingkan dengan:
Versi 7z saya tampaknya tidak dapat melakukan akses acak, jadi sepertinya lebih buruk daripada
tar.xz
:Sekarang karena kami telah
pixz
menghasilkan yang dari sebelumnya:Lebih cepat tetapi masih relatif lambat karena arsip berisi beberapa blok besar:
Jadi
pixz
masih perlu membaca dan membuka kompresi (hingga a) ~ 19MB sepotong besar data.Kita dapat membuat akses acak lebih cepat dengan membuat arsip akan memblokir lebih kecil (dan mengorbankan sedikit ruang disk):
sumber
.tar.gz
bisa memakan waktu terlalu lama. Apalagi jika medianya lambat. Saat itulah format arsip menjadi perbedaan antara yang mustahil dan praktis.Admin Korporat dan Akademik sering kali lebih diperhatikan ketika sesuatu pecah, daripada dihargai ketika segalanya berjalan efisien. Lingkungan seperti itu menumbuhkan rasa takut akan eksperimen, dan mencemooh kebaruan .
dar ( D isiko Ar chiver) dilengkapi dengan rakit tar -seperti fitur, ditambah perangkat tambahan seperti akses speedy acak untuk arsip dikompresi, AKA katalog, AKA pengindeksan, AKA "konten instan daftar" ...
Lihat juga: Format kompresi dengan dukungan yang baik untuk akses acak di dalam arsip?
sumber