bzip2recover - memulihkan data dari file bzip2 yang rusak
bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ... ]
bunzip2 [ -fkvsVL ] [ filenames ... ]
bzcat [ -s ] [ filenames ... ]
bzip2recover filename
kompresor file penyortiran blok
mendekompres file ke stdout
memulihkan data dari file bzip2 yang rusak
bzip2 mengompresi file menggunakan algoritme kompresi teks pengurutan blok Burrows-Wheeler, dan pengkodean Huffman. Kompresi umumnya jauh lebih baik daripada yang dicapai oleh kompresor berbasis LZ77/LZ78 yang lebih konvensional, dan mendekati kinerja kompresor statistik keluarga PPM.
Opsi baris perintah sengaja sangat mirip dengan GNU gzip, tetapi tidak identik.
bzip2 mengharapkan daftar nama file untuk menemani flag baris perintah. Setiap file diganti dengan versi terkompresi itu sendiri, dengan nama "nama_asli.bz2". Setiap file terkompresi memiliki tanggal modifikasi yang sama, izin, dan, jika memungkinkan, kepemilikan seperti aslinya yang sesuai, sehingga properti ini dapat dipulihkan dengan benar pada waktu dekompresi. Penanganan nama file naif dalam arti bahwa tidak ada mekanisme untuk mempertahankan nama file asli, izin, kepemilikan atau tanggal dalam sistem file yang tidak memiliki konsep ini, atau memiliki batasan panjang nama file yang serius, seperti MS-DOS.
bzip2 dan bunzip2 secara default tidak akan menimpa file yang ada. Jika Anda ingin ini terjadi, tentukan flag -f.
Jika tidak ada nama file yang ditentukan, bzip2 mengompres dari input standar ke output standar. Dalam hal ini, bzip2 akan menolak untuk menulis keluaran terkompresi ke terminal, karena ini sama sekali tidak dapat dipahami dan karenanya tidak ada gunanya.
bunzip2 (atau bzip2 -d) mendekompresi semua file yang ditentukan. File yang tidak dibuat oleh bzip2 akan terdeteksi dan diabaikan, dan peringatan akan dikeluarkan. bzip2 mencoba menebak nama file untuk file yang didekompresi dari file yang dikompresi sebagai berikut:
filename.bz2 becomes filename
filename.bz becomes filename
filename.tbz2 becomes filename.tar
filename.tbz becomes filename.tar
anyothername becomes anyothername.outJika file tidak diakhiri dengan salah satu akhiran yang dikenali, .bz2, .bz, .tbz2 atau .tbz, bzip2 mengeluh tidak dapat menebak nama file asli, dan menggunakan nama asli dengan .out ditambahkan.
Seperti halnya kompresi, tidak memberikan nama file menyebabkan dekompresi dari input standar ke output standar.
bunzip2 akan mendekompresi file dengan benar yang merupakan gabungan dari dua atau lebih file terkompresi. Hasilnya adalah gabungan dari file terkompresi yang sesuai. Pengujian integritas (-t) dari file terkompresi gabungan juga didukung.
Anda juga dapat mengompres atau mendekompresi file ke output standar dengan memberikan flag -c. Beberapa file dapat dikompresi dan didekompresi seperti ini. Output yang dihasilkan diumpankan secara berurutan ke stdout. Kompresi beberapa file dengan cara ini menghasilkan aliran yang berisi beberapa representasi file terkompresi. Aliran seperti itu hanya dapat didekompresi dengan benar oleh bzip2 versi 0.9.0 atau lebih baru. Versi bzip2 sebelumnya akan berhenti setelah mendekompresi file pertama dalam aliran.
bzcat (atau bzip2 -dc) mendekompresi semua file yang ditentukan ke keluaran standar.
bzip2 akan membaca argumen dari variabel lingkungan BZIP2 dan BZIP, dalam urutan itu, dan akan memprosesnya sebelum argumen apa pun dibaca dari baris perintah. Ini memberikan cara mudah untuk memberikan argumen default.
Kompresi selalu dilakukan, meskipun file terkompresi sedikit lebih besar dari aslinya. File kurang dari seratus byte cenderung menjadi lebih besar, karena mekanisme kompresi memiliki overhead konstan di wilayah 50 byte. Data acak (termasuk output dari sebagian besar kompresor file) dikodekan sekitar 8,05 bit per byte, memberikan perluasan sekitar 0,5%.
Sebagai pemeriksaan mandiri untuk perlindungan Anda, bzip2 menggunakan CRC 32-bit untuk memastikan bahwa versi file yang didekompresi identik dengan aslinya. Ini melindungi dari korupsi data terkompresi, dan dari bug yang tidak terdeteksi di bzip2 (semoga sangat tidak mungkin). Kemungkinan korupsi data tidak terdeteksi sangat kecil, sekitar satu dari empat miliar untuk setiap file yang diproses. Namun, ketahuilah bahwa pemeriksaan terjadi saat dekompresi, sehingga hanya dapat memberi tahu Anda bahwa ada sesuatu yang salah. Itu tidak dapat membantu Anda memulihkan data asli yang tidak terkompresi. Anda dapat menggunakan bzip2recover untuk mencoba memulihkan data dari file yang rusak.
Nilai kembalian: 0 untuk keluar secara normal, 1 untuk masalah lingkungan (file tidak ditemukan, flag tidak valid, kesalahan I/O, &c), 2 untuk menunjukkan file terkompresi yang rusak, 3 untuk kesalahan konsistensi internal (misalnya, bug) yang menyebabkan bzip2 panik.
Kompres atau dekompresi ke keluaran standar.
Paksa dekompresi. bzip2, bunzip2 dan bzcat adalah program yang benar-benar sama, dan keputusan tentang tindakan apa yang akan diambil dilakukan berdasarkan nama yang digunakan. Tanda ini menggantikan mekanisme tersebut, dan memaksa bzip2 untuk melakukan dekompresi.
Komplemen untuk -d: memaksa kompresi, apa pun nama pemanggilannya.
Periksa integritas file yang ditentukan, tetapi jangan mendekompresnya. Ini benar-benar melakukan dekompresi percobaan dan membuang hasilnya.
Timpa paksa file keluaran. Biasanya, bzip2 tidak akan menimpa file keluaran yang ada. Juga memaksa bzip2 untuk memutuskan tautan keras ke file, yang tidak akan dilakukannya.
bzip2 biasanya menolak untuk mendekompres file yang tidak memiliki byte header ajaib yang benar. Namun, jika dipaksa (-f), itu akan meneruskan file tersebut melalui yang tidak dimodifikasi. Beginilah perilaku GNU gzip.
Simpan (jangan hapus) file input selama kompresi atau dekompresi.
Kurangi penggunaan memori, untuk kompresi, dekompresi, dan pengujian. File didekompresi dan diuji menggunakan algoritme yang dimodifikasi yang hanya membutuhkan 2,5 byte per blok byte. Ini berarti file apa pun dapat didekompresi dalam memori 2300k, meskipun dengan kecepatan sekitar setengah dari kecepatan normal.
Selama kompresi, -s memilih ukuran blok 200k, yang membatasi penggunaan memori sekitar angka yang sama, dengan mengorbankan rasio kompresi Anda. Singkatnya, jika mesin Anda kekurangan memori (8 megabita atau kurang), gunakan -s untuk semuanya. Lihat MANAJEMEN MEMORI di bawah ini.
Menekan pesan peringatan yang tidak penting. Pesan yang berkaitan dengan kesalahan I/O dan kejadian penting lainnya tidak akan disembunyikan.
Mode verbose -- tampilkan rasio kompresi untuk setiap file yang diproses. Selanjutnya -v meningkatkan tingkat verbositas, memuntahkan banyak informasi yang terutama menarik untuk tujuan diagnostik.
Menampilkan versi perangkat lunak, syarat dan ketentuan lisensi.
Atur ukuran blok menjadi 100 k, 200 k .. 900 k saat mengompresi. Tidak berpengaruh saat dekompresi. Lihat MANAJEMEN MEMORI di bawah ini. Alias --fast dan --best terutama untuk kompatibilitas GNU gzip. Secara khusus, --fast tidak membuat segalanya lebih cepat secara signifikan. Dan --best hanya memilih perilaku default.
Memperlakukan semua argumen berikutnya sebagai nama file, meskipun dimulai dengan tanda hubung. Ini agar Anda dapat menangani file dengan nama yang diawali dengan tanda hubung, misalnya: bzip2 -- -myfilename.
Bendera ini berlebihan di versi 0.9.5 dan yang lebih baru. Mereka menyediakan beberapa kontrol kasar atas perilaku algoritma pengurutan di versi sebelumnya, yang terkadang berguna. 0.9.5 dan di atasnya memiliki algoritme yang lebih baik yang menjadikan tanda ini tidak relevan.
bzip2 mengompres file besar dalam blok. Ukuran blok memengaruhi rasio kompresi yang dicapai, dan jumlah memori yang diperlukan untuk kompresi dan dekompresi. Bendera -1 hingga -9 menentukan ukuran blok masing-masing menjadi 100.000 byte hingga 900.000 byte (default). Pada saat dekompresi, ukuran blok yang digunakan untuk kompresi dibaca dari header file terkompresi, dan bunzip2 kemudian mengalokasikan sendiri memori yang cukup untuk mendekompresi file. Karena ukuran blok disimpan dalam file terkompresi, maka flag -1 hingga -9 tidak relevan dan diabaikan selama dekompresi.
Persyaratan kompresi dan dekompresi, dalam byte, dapat diperkirakan sebagai:
Kompresi:
400k + ( 8 x block size )
Dekompresi:
100k + ( 4 x block size ), or 100k + ( 2.5 x block size )
Ukuran blok yang lebih besar memberikan pengembalian marjinal yang berkurang dengan cepat. Sebagian besar kompresi berasal dari dua atau tiga ratus k ukuran blok pertama, sebuah fakta yang perlu diingat saat menggunakan bzip2 pada mesin kecil. Penting juga untuk mengetahui bahwa persyaratan memori dekompresi diatur pada waktu kompresi dengan pilihan ukuran blok.
Untuk file yang dikompresi dengan ukuran blok default 900k, bunzip2 akan membutuhkan sekitar 3700 kbytes untuk didekompresi. Untuk mendukung dekompresi file apa pun pada mesin 4 megabyte, bunzip2 memiliki opsi untuk mendekompresi menggunakan kira-kira setengah dari jumlah memori ini, sekitar 2300 kbytes. Kecepatan dekompresi juga dibelah dua, jadi sebaiknya gunakan opsi ini hanya jika diperlukan. Bendera yang relevan adalah -s.
Secara umum, coba dan gunakan batasan memori ukuran blok terbesar yang memungkinkan, karena itu memaksimalkan kompresi yang dicapai. Kecepatan kompresi dan dekompresi hampir tidak terpengaruh oleh ukuran blok.
Poin penting lainnya berlaku untuk file yang muat dalam satu blok - itu berarti sebagian besar file yang Anda temui menggunakan ukuran blok yang besar. Jumlah memori nyata yang disentuh sebanding dengan ukuran file, karena file lebih kecil dari satu blok. Misalnya, mengompresi file sepanjang 20.000 byte dengan flag -9 akan menyebabkan kompresor mengalokasikan sekitar 7600k memori, tetapi hanya menyentuh 400k + 20000 * 8=560 kbytes. Demikian pula, dekompresor akan mengalokasikan 3700k tetapi hanya menyentuh 100k + 20000 * 4=180 kbytes.
Berikut adalah tabel yang merangkum penggunaan memori maksimum untuk berbagai ukuran blok. Tercatat juga total ukuran terkompresi untuk 14 file Korpus Kompresi Teks Calgary dengan total 3.141.622 byte. Kolom ini memberi kesan bagaimana kompresi bervariasi dengan ukuran blok. Angka-angka ini cenderung mengecilkan keuntungan dari ukuran blok yang lebih besar untuk file yang lebih besar, karena Corpus didominasi oleh file yang lebih kecil.
Compress Decompress Decompress Corpus
Flag usage usage -s usage Size
-1 1200k 500k 350k 914704
-2 2000k 900k 600k 877703
-3 2800k 1300k 850k 860338
-4 3600k 1700k 1100k 846899
-5 4400k 2100k 1350k 845160
-6 5200k 2500k 1600k 838626
-7 6100k 2900k 1850k 834096
-8 6800k 3300k 2100k 828642
-9 7600k 3700k 2350k 828642bzip2 mengompres file dalam blok, biasanya sepanjang 900kbyte. Setiap blok ditangani secara independen. Jika kesalahan media atau transmisi menyebabkan file .bz2 multi-blok menjadi rusak, dimungkinkan untuk memulihkan data dari blok yang tidak rusak dalam file.
Representasi terkompresi dari setiap blok dibatasi oleh pola 48-bit, yang memungkinkan untuk menemukan batas blok dengan kepastian yang masuk akal. Setiap blok juga membawa CRC 32-bitnya sendiri, sehingga blok yang rusak dapat dibedakan dari yang tidak rusak.
bzip2recover adalah program sederhana yang bertujuan untuk mencari blok dalam file .bz2, dan menulis setiap blok ke dalam file .bz2-nya sendiri. Anda kemudian dapat menggunakan bzip2 -t untuk menguji integritas file yang dihasilkan, dan mendekompres file yang tidak rusak.
bzip2recover mengambil satu argumen, nama file yang rusak, dan menulis sejumlah file "rec00001file.bz2", "rec00002file.bz2", dll, yang berisi blok yang diekstraksi. Nama file keluaran dirancang sedemikian rupa sehingga penggunaan karakter pengganti dalam pemrosesan berikutnya -- misalnya, "bzip2 -dc rec*file.bz2 > data_yang dipulihkan" -- memproses file dalam urutan yang benar.
bzip2recover seharusnya paling berguna untuk menangani file .bz2 besar, karena ini akan berisi banyak blok. Jelas sia-sia untuk menggunakannya pada file blok tunggal yang rusak, karena blok yang rusak tidak dapat dipulihkan. Jika Anda ingin meminimalkan potensi kehilangan data melalui kesalahan media atau transmisi, Anda dapat mempertimbangkan mengompresi dengan ukuran blok yang lebih kecil.
Fase penyortiran kompresi mengumpulkan string serupa dalam file. Karena itu, file yang berisi simbol berulang yang berjalan sangat lama, seperti "aabaabaabaab ..." (diulang beberapa ratus kali) dapat dikompresi lebih lambat dari biasanya. Versi 0.9.5 dan di atasnya jauh lebih baik daripada versi sebelumnya dalam hal ini. Rasio antara waktu kompresi kasus terburuk dan kasus rata-rata berada di wilayah 10:1. Untuk versi sebelumnya, angka ini lebih seperti 100:1. Anda dapat menggunakan opsi -vvvv untuk memantau kemajuan dengan sangat detail, jika Anda mau.
Kecepatan dekompresi tidak terpengaruh oleh fenomena ini.
bzip2 biasanya mengalokasikan beberapa megabita memori untuk beroperasi, lalu mengisi daya seluruhnya dengan cara yang cukup acak. Ini berarti bahwa kinerja, baik untuk kompresi maupun dekompresi, sangat ditentukan oleh kecepatan mesin Anda dapat memperbaiki cache yang hilang. Karena itu, perubahan kecil pada kode untuk mengurangi tingkat kesalahan telah diamati memberikan peningkatan kinerja yang tidak proporsional. Saya membayangkan bzip2 akan bekerja paling baik pada mesin dengan cache yang sangat besar.
Pesan kesalahan I/O tidak membantu seperti yang seharusnya. bzip2 berusaha keras untuk mendeteksi kesalahan I/O dan keluar dengan bersih, tetapi detail tentang masalahnya terkadang tampak agak menyesatkan.
Halaman panduan ini berkaitan dengan versi 1.0.8 dari bzip2. Data terkompresi yang dibuat oleh versi ini sepenuhnya kompatibel maju dan mundur dengan rilis publik sebelumnya, versi 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 dan yang lebih baru, tetapi dengan pengecualian berikut: 0.9.0 dan yang lebih baru dapat mendekompresi banyak file terkompresi yang digabungkan dengan benar. 0,1pl2 tidak dapat melakukan ini; itu akan berhenti setelah mendekompresi hanya file pertama di aliran.
Versi bzip2recover sebelum 1.0.2 menggunakan bilangan bulat 32-bit untuk merepresentasikan posisi bit dalam file terkompresi, sehingga mereka tidak dapat menangani file terkompresi dengan panjang lebih dari 512 megabyte. Versi 1.0.2 dan di atasnya menggunakan int 64-bit pada beberapa platform yang mendukungnya (target yang didukung GNU, dan Windows). Untuk menentukan apakah bzip2recover dibuat dengan batasan seperti itu atau tidak, jalankan tanpa argumen. Bagaimanapun, Anda dapat membuat sendiri versi tak terbatas jika Anda dapat mengkompilasi ulang dengan MaybeUInt64 disetel menjadi bilangan bulat 64-bit yang tidak ditandatangani.
Julian Seward, jseward@acm.org.
https://sourceware.org/bzip2/
Gagasan yang terkandung dalam bzip2 disebabkan oleh (setidaknya) orang-orang berikut: Michael Burrows dan David Wheeler (untuk transformasi penyortiran blok), David Wheeler (sekali lagi, untuk pembuat kode Huffman), Peter Fenwick ( untuk model pengkodean terstruktur dalam bzip asli, dan banyak penyempurnaan), dan Alistair Moffat, Radford Neal, dan Ian Witten (untuk pembuat kode aritmatika dalam bzip asli). I Saya sangat berhutang budi atas bantuan, dukungan, dan nasihat mereka. Lihat manual di distribusi sumber untuk petunjuk ke sumber dokumentasi. Christian von Roques mendorong saya untuk mencari algoritme penyortiran yang lebih cepat, untuk mempercepat kompresi. Bela Lubkin mendorong saya untuk meningkatkan kinerja kompresi terburuk. Donna Robinson membuat XML dokumentasi. Skrip bz* berasal dari GNU gzip. Banyak orang mengirim tambalan, membantu masalah portabilitas, meminjamkan mesin, memberi nasihat, dan umumnya membantu.