映画『破壊の繭とディアンシー』(2014)
ポケモン映画で一番面白かったです。
破壊を司る伝説のポケモン、イベルタルと、生命を司る、伝説のポケモン、ゼルネアスが登場します。
新しい家を建てるには、古い家を取り壊さなければなりません。破壊は再生のために必要なこともありますね。
今回は破壊と復旧です。bzip2で圧縮したファイルを破壊して復旧してみます。
まず適当にテキストファイルを作ってbzip2圧縮します。
takk@deb8:~$ seq 10 > a.txt takk@deb8:~$ cat a.txt 1 2 3 4 5 6 7 8 9 10 takk@deb8:~$ bzip2 a.txt takk@deb8:~$ ls a.txt.bz2
このようなバイナリの値になっています。
takk@deb8:~$ od -tx1 -Ax a.txt.bz2 000000 42 5a 68 39 31 41 59 26 53 59 6a a9 30 de 00 00 000010 05 c8 00 00 10 7f e0 20 00 21 a0 1a 34 20 1a 69 000020 a1 d4 d5 e1 de 45 06 1e 2e e4 8a 70 a1 20 d5 52 000030 61 bc 000032 takk@deb8:~$
これを破壊しようと思いますが、オリジナルを破壊すると差分が取れなくなるため、コピーしておきます。
takk@deb8:~$ cp a.txt.bz2 test.bz2
コピーしたファイルを、1bitだけ破壊してみます。
takk@deb8:~$ dd of=test.bz2 bs=1 seek=48 conv=notrunc c1+0 レコード入力 1+0 レコード出力 1 バイト (1 B) コピーされました、 8.05224 秒、 0.0 kB/秒 takk@deb8:~$ od -tx1 -Ax test.bz2 000000 42 5a 68 39 31 41 59 26 53 59 6a a9 30 de 00 00 000010 05 c8 00 00 10 7f e0 20 00 21 a0 1a 34 20 1a 69 000020 a1 d4 d5 e1 de 45 06 1e 2e e4 8a 70 a1 20 d5 52 000030 63 bc 000032 takk@deb8:~$
インデックス0x30の0x61を0x63に変更することで、1bitだけ破壊しました。
差分があるか確認します。
takk@deb8:~/tmp3$ cmp a.txt.bz2 test.bz2 a.txt.bz2 test.bz2 異なります: バイト 49、行 1 takk@deb8:~/tmp3$
差分ありです。
では、伸張(解凍)します。
takk@deb8:~$ bunzip2 test.bz2 bunzip2: Data integrity error when decompressing. Input file = test.bz2, output file = test It is possible that the compressed file(s) have become corrupted. You can use the -tvv option to test integrity of such files. You can use the `bzip2recover' program to attempt to recover data from undamaged sections of corrupted files. bunzip2: Deleting output file test, if it exists. takk@deb8:~$
壊れてるので解凍できないですね。
では復旧させます。上でbzip2recoverが使えると言ってますので、使ってみます。
takk@deb8:~$ bzip2recover test.bz2 bzip2recover 1.0.6: extracts blocks from damaged .bz2 files. bzip2recover: searching for block boundaries ... block 1 runs from 80 to 318 bzip2recover: splitting into blocks writing block 1 to `rec00001test.bz2' ... bzip2recover: finished takk@deb8:~$
復旧ファイルrec00001test.bz2ができました。
オリジナルとの差分を確認しましょう。
takk@deb8:~$ cmp a.txt.bz2 rec00001test.bz2 takk@deb8:~$
何も表示されないため、差分なしです。
では、復旧後ファイルを伸張(解凍)してみます。
takk@deb8:~$ bunzip2 rec00001test.bz2 takk@deb8:~$ ls a.txt.bz2 rec00001test test.bz2 takk@deb8:~$ cat rec00001test 1 2 3 4 5 6 7 8 9 10 takk@deb8:~$
解凍できました。
コメント