壊れたgzipを調べたときのメモ
壊れたgzipがあり、展開できないと言われて調査したときにどうやったかのメモ
gzipとは
zcatで展開できるところまでしてみる
zcatは破損した位置までのデータを修復できる。
展開できたデータの最後を確認して修復する。
バイナリを見る
壊れているgzipの内容
$ od -xc data.json.gz | tail 342 213 322 264 @ 370 D 024 365 221 243 003 ) u 3 > 2572260 346a d38e 1aea bcb8 7f2f 5a69 d8f8 0865 j 4 216 323 352 032 270 274 / 177 i Z 370 330 e \b 2572300 0f84 f0a9 9d00 f404 03af 33e1 f451 e212 204 017 251 360 \0 235 004 364 257 003 341 3 Q 364 022 342 2572320 e79b 818a b9f8 6228 36a0 91d9 7edb 173c 233 347 212 201 370 271 ( b 240 6 331 221 333 ~ < 027 2572340 20d0 f29c ac0f 732d b57b 4cb7 0a01 320 234 362 017 254 - s { 265 267 L 001 \n 2572356
最後に改行文字が入っていた。
gzipを書き出すときに Kernel.#puts
module function Kernel.#puts (Ruby 2.4.0) とかを使うと起きそう。
直してみる
Vim 上で :%!xxdをして、hexdumpする
:%!xxd -r でバイナリで書き戻して完了
$ od -xc data_zcat_json.gz | tail 213 322 264 @ 370 D 024 365 221 243 003 ) u 3 > j 2572300 8e34 ead3 b81a 2fbc 697f f85a 65d8 8408 4 216 323 352 032 270 274 / 177 i Z 370 330 e \b 204 2572320 a90f 00f0 049d aff4 e103 5133 12f4 9be2 017 251 360 \0 235 004 364 257 003 341 3 Q 364 022 342 233 2572340 8ae7 f881 28b9 a062 d936 db91 3c7e d017 347 212 201 370 271 ( b 240 6 331 221 333 ~ < 027 320 2572360 9c20 0ff2 2dac 7b73 b7b5 014c 234 362 017 254 - s { 265 267 L 001 2572374
参照
技術/歴史/zip,gzip,zlib,bzip2 - Glamenv-Septzen.net