Format arsip mana yang secara efisien mengekstrak satu file dari arsip?

3

Mengekstraksi satu file dari file zip adalah operasi yang cepat, jadi saya berasumsi ini juga berlaku untuk TAR, tetapi saya belajar bahwa meskipun file TAR tanpa kompresi, dapat membutuhkan waktu lama untuk mengekstraksi file. . Saya telah menggunakan tar untuk membuat cadangan folder rumah saya di OS X, dan saya kemudian membutuhkan satu file. Karena tar tidak tahu di mana file itu, ia perlu memindai seluruh file 300GB sebelum dapat mengekstrak. Ini berarti TAR adalah format yang mengerikan untuk sebagian besar skenario cadangan, jadi saya ingin tahu opsi saya.

Jadi, format file arsip apa yang cocok untuk mengekstraksi satu file dengan cepat?

Meskipun pertanyaan ini sebenarnya bukan tentang kompresi, saya tidak keberatan menjawab daftar format yang menggabungkan pengarsipan dan kompresi (seperti zip), dalam hal ini " kompresi padat " akan penting.

oligofren
sumber
Ingat yang tarmerupakan singkatan dari arsip tape jadi perlu diingat itu awalnya dirancang (di 70-an) untuk bekerja dengan kaset (dan masih bekerja dengan tape drive hari ini). Jelas tidak dimaksudkan untuk akses acak atau cepat.
LawrenceC
Selain itu, juga ditargetkan untuk streaming ke pipa, yang tidak berfungsi dengan baik dengan indeks. Namun, GNU tar menambahkan indeks.
oligofren

Jawaban:

3

Kedengarannya seperti kecepatan & efisiensi ekstraksi adalah masalah utama Anda, dan saya berasumsi Anda menggunakan linux atau macOS jadi ingin mempertahankan atribut file khusus (yang zip & 7z abaikan). Dalam hal ini, format arsip yang sangat baik adalah:

  • Sistem file ext [2/3/4] - Cukup salin file-file tersebut di suatu tempat, kemudian mengekstraksi satu file sama cepat & mudahnya dengan memasang & membaca file asli. Anda dapat meletakkan seluruh sistem file arsip di dalam satu file arsip jika Anda mau, cukup buat file cukup besar & format & mount itu (bahkan tidak perlu -o loopopsi lagi).

    Pro:

    • Bonus yang bagus adalah Anda dapat dengan mudah menambahkan enkripsi (LUKS) ke seluruh file arsip juga, atau enkripsi lain yang didukung sistem file (eCryptFS, EncFS, dll).

    • Anda juga dapat menggunakan solusi pencadangan berbasis rsync dengan mudah.

    • Sangat mudah untuk menambah / menghapus file (hingga ukuran file arsip keseluruhan).

    Cons:

    • Jika menggunakan file arsip tunggal, Anda harus memilih ukurannya sebelum menambahkan file, dan ukurannya tidak berubah secara dinamis.
    • Masih mungkin untuk memperluas atau mengecilkan seluruh arsip bahkan jika itu dalam satu file, tetapi Anda perlu alat-alat resize2fsuntuk mengecilkan sistem file, kemudian truncateuntuk mengecilkan file (atau sebaliknya untuk memperluas).
  • Sistem file yang sama yang sudah Anda gunakan, jika Anda menggunakan macOS dan menyukai sesuatu selain ext. Saya cukup yakin perintah mount macOS bekerja dengan satu file arsip besar juga.

Jika Anda ingin kompresi juga, di situlah arsip padat & pembacaan lambat masuk. Beberapa filesystem mendukung kompresi secara langsung (btrfs, reiserfs / reiser4, direncanakan untuk ext?) Tetapi saya hanya akan pergi dengan:

  • SquashFS - Ini mungkin kompresi Raja, menyimpan atribut file, dan memungkinkan ekstraksi cepat dari satu file (pemasangan & penelusuran setiap file sebenarnya). Ini bagus untuk arsip juga, dan memiliki tingkat kompresi yang dapat disesuaikan, gunakan.

    Atau mungkin menggabungkannya dengan backup tambahan & mount overlay untuk solusi "backup parsial tapi file lengkap" yang bagus.

    Sebuah con adalah tidak mungkin untuk menambah atau mengecilkan ukuran arsip, atau menambah / menghapus file.

    Atau cukup gunakan produk cadangan yang ada (Time Machine?).

Jika Anda benar-benar ingin menggunakan arsip seperti 7z / zip, tetapi tetap menyimpan atribut file, Anda dapat membuat tar setiap file secara individual (menyimpan atribut) kemudian menyimpan file tar yang terpisah dalam arsip 7z / zip. Ini membutuhkan langkah ekstra dengan lebih banyak kerepotan, tetapi akan membiarkan Anda dengan mudah mengekstrak satu file (tar), dan memperluas atau mengecilkan arsip tanpa mengompresi ulang semuanya (jika itu bukan arsip padat).

Xen2050
sumber
-1

Format Zip telah dibuat untuk mengekstraksi file tunggal secara acak dan efisien. Arsip Zip berisi katalog di ujungnya yang memungkinkan untuk mencapai satu file dengan cepat - dikompresi atau tidak.

Zerte
sumber
Keren, tapi kami tahu ini. Apakah Anda tahu ada format lain yang melakukan hal yang sama?
oligofren
OP sudah mengatakan ini dalam Pertanyaannya. Dia mencari saran lain selain .zip.
Spiff
-1

Sebagian besar format arsip kompresi modern menyertakan basis data atau katalog file dan folder yang tersimpan di dalamnya. Ini termasuk: 7-Zip, ACE, ARC, ARJ, BZIP2, CAB, CPIO, GZIP, IMG, ISO (ISO9660), LHA, RAR, RPM, SFX, SQX, TAR, TBZ (TAR.BZ), TGZ (TAR .GZ), TXZ (TAR.XZ), XZ, ZIP, Zip64, dan ZOO. Format ini akan memungkinkan Anda untuk mengekstrak file atau folder individual, sesuai kebutuhan.

ZIP sejauh ini adalah yang paling umum dan banyak digunakan. Beberapa sistem operasi, seperti Windows memiliki dukungan asli untuk file ZIP, memungkinkan Anda untuk menggunakan file ZIP seolah-olah itu folder standar.

Adapun efisiensi mengekstraksi file individual, saya belum pernah melihat tes ini. Namun, saya telah menggunakan arsip ZIP dengan cara ini, jadi saya dapat mengatakan itu cukup cepat, tergantung pada ukuran file.

Keltari
sumber
Banyak format yang Anda daftarkan hanyalah format kompresi, bukan format arsip. ZIP adalah keduanya, tetapi TAR hanyalah format arsip yang tidak terkompresi, dan GZIP hanyalah format kompresi. Jika Anda ingin mengambil direktori yang penuh dengan file dan meletakkannya di dalam satu file terkompresi, Anda tidak dapat menggunakan TAR sendiri atau GZIP saja; Anda harus menggunakan TAR untuk membuat arsip, dan GZIP untuk mengompresnya. Juga, seperti yang dikatakan OP, TAR tidak memenuhi kebutuhannya karena tidak mengandung struktur data katalog / database / daftar isi apa pun di muka.
Spiff
Format kompresi @Spiff adalah jenis format arsip. Tidak masalah jika TAR memenuhi kebutuhannya, Anda dapat menghapus satu file. Ia dapat menentukan kebutuhannya seperlunya.
Keltari
2
Tidak, tidak semua format kompresi adalah format arsip. Unix selalu membedakan antara kompresi (membuat satu file lebih kecil) dan pengarsipan (menyimpan banyak file di samping satu file). Jika Anda berasal dari latar belakang DOS / Windows atau Mac klasik di mana format seperti PKZIP dan StuffIt! selalu menggabungkan kedua peran dalam satu, Anda mungkin tidak belajar bahwa ada format arsip yang tidak memampatkan, dan format kompresi yang tidak mengarsipkan. Di sini, Wikipedia cukup pintar untuk membuatnya tetap benar: en.wikipedia.org/wiki/List_of_archive_formats
Spiff
1
Ini salah. Baik tar maupun cpio tidak memiliki indeks seperti itu (dalam versi POSIX - GNU tar tidak, tetapi tidak BSD). Ketika Anda daftar konten itu dilakukan dengan memindai seluruh arsip. Ini untuk membuatnya ramah pipa. Jadi daftar file arsip 100GB melibatkan membaca hingga 100GB. Hal yang sama berlaku untuk ekstraksi file tunggal. Jika Anda beruntung mereka mungkin berada di awal arsip.
oligofren