xxd には、ファイルへの道をスキップするオプション ( -s
) と、制限された長さをダンプするオプション ( ) があります-l
。単純な hex ( -p
) オプションを使用すると、grep を使用して異常を見つけることができる場合があります。
$ xxd -s 8192 -l 256 -p /dev/disk3s2 | grep [^0]
000000010000000000000000000000000000000000000000000000000000
000000000000000000000000300000000000000800000000000000000000
dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdb
dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdb
dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdb
od
同様のスキップ ( -j
) と制限長 ( -N
) があります。同様に、 とdd
がskip=
ありcount=
ます (ただし、これらはバイト単位ではなくブロック単位でカウントされます。ブロック サイズは で変更できますbs=
)。
編集:xxd -p
奇妙な結果が得られるため (デバイスの最後で停止しない)、何が起こっているのかを把握するためにいくつかのテストを実行することをお勧めします。最初に、コンピューター上の重要なものをすべてバックアップします。デバイス アクセス レベルで何かがおかしい場合、これらのテストの一部が予期しないものを上書きする可能性があるためです。
次に、さまざまなツールを使用してデバイスの最後にダンプしてみて、それらがすべて同じように動作するかどうかを確認します。
xxd -s 65451982336 /dev/sdb | more # This *should* dump 512 bytes (32 lines) then stop, but apparently keeps going
od -xv -j 65451982336 /dev/sdb | more # This also *should* dump 512 bytes then stop
dd if=/dev/sdb skip=127835903 | xxd | more # This again should do the same thing (note that the skip value is in 512-byte blocks)
他のツールは、fdisk がディスクの終わりとして報告したものを超えて読み取りますか? 3つすべてがさらにデータを読み取った場合、「fdiskは間違っている/誤解を招く」という回答を使用します。「最後」を過ぎてゼロ以外のデータを書き込んで結果を確認することで、さらにテストできます。
dd if=/dev/random of=/dev/sdb seek=127835903 count=2
...次に、さまざまなダンプ コマンドを繰り返します。ランダム データの 2 つのブロック (=64 行) の後にゼロが続く場合、そのデバイスはあなたが思っているよりも大きいと確信しています。