壊れた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