ディスクの生ビットを「見る」ことができるコマンドはありますか?つまり、ファイルシステムを無視し、ディスクに基づいて文字通り0と1の「大きな画像」を出力します。 (理想的には、テラバイト級の一時保管スペースは不要です。)
私が実際に探しているのは、ディスクセクションに長い繰り返しが含まれているかどうかを簡単に知ることができます。シンプル0
all s、all 1
s、all 01
s、all 0101011
s などのシーケンス。
これを行う最良の方法は何ですか?
答え1
スパークライン役に立つかもしれません...まずspark
公益事業インストールしてmost
テキストビューア。
この核は、最初のものについての抽象的な観点を示しています。61部門 /dev/sda:
for f in `seq 0 1 60` ; do : printf "%.03i %s\n" $f \ $({ printf '4294967295\n' sudo dd if=/dev/sda skip=$f bs=512 count=1 2> /dev/null | od -v -A n -t uI ; } | spark | sed 's/^.//' ) done | most
私のシステムの出力(最初の2行に短縮):
000 ▁▁▁▃▆▆▁▁▄▇▂▆▁▁▆▁▁▁▄▄▄▁ ... 001 ▁▆▃▇▂▁▁▁▄▃▆▂▄▂▁▁▁▁▁▁▁▂ ...
各行はディスクセクタを表します。短い線は小数を表し、長い線は大きな数字を表します。ここの各スパークライン文字は、比較的簡潔な符号なし整数(4バイト)を表します。画面がすべて合わない場合は、
most
左右の矢印を使用して横にスクロールします。空のデータがどのように見えるかを見るには、
/dev/sda
に置き換えます/dev/zero
。上記のコードは、ディスクを閲覧するために使用できます。値を変更するだけです
seq
。sudo hdparm -i /dev/sda | grep CurCHS
私のシステムからシリンダー(トラック)、ヘッド、およびセクター番号を取得するには、次のものが返されます。CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=312581808
これは16383号セクタは(仮想)トラックの最初のセクタです。ほとんど空のディスクスキームの場合、データが使い果たされた場所が表示されます。
上記を最初のセクタ
seq
に変更してseq 0 16383 $((16383*60))
最初のセクタを表示します。61ディスクにトラックがあります。スパークラインに文字ごとに1バイトのみを表示するには、およびに
4294967295
変更します。255
uI
uC
コードの仕組みに関する注意事項:
dd
送る512バイトデータセクタを符号なし整数od
(理解できる最大数)として出力しますspark
。spark
入力で計算された相対的な高さを使用すると(試してみて、どのように機能するかをspark <<< '1 2 3 4'
確認してください)、これは前に最大数がない限り、異なる線のサイズが異なる可能性があることを意味します。誤解を招く他のスケールを避けるために、printf
正しい最大値が事前に使用されます。これはspark
一貫したスケールを使用しますが、望ましくない最初の親文字は後で削除されるようにしますsed
。同様の技術を使用すると、ディスクまたはパーティションのデータ密度のあいまいな概要を表示できます。抽象的ではなくバイト火花文字に変換し、サンプルを抽象化します。彫刻、またはむしろブロックサンプルの相対圧縮比です。
2つのユーティリティが必要です。
pigz
、(ほとんどのヘッダーがない場合宿圧縮)とpv
。pv
実際にはオプションですが、進行状況バーを使用すると待つ時間が少なくなります。パスワード:
d=sda b=512 c=1 m=$(( (512*$(</sys/block/${d/s???*/${d%%[0-9]*}/$d}/size))/b )) \ s=200 i=$((m/s)) ; \ for ((f=0;f<m;f+=i)) ; do sudo dd if=/dev/${d} skip=$f bs=$b count=$c 2> /dev/null | pigz -9z | wc -c done | pv -l -s $s -i "0.1" \ -F 'Read %b of '"$((s+1)) $((b*c))-byte"' blocks %p%e' | spark
出力(私のHDデバイスから):
Read 201 of 201 512-byte blocks [=====================================>] 100% ▇███▁█▂██▃█▆▂▂██▃▆███▆█▅▁█████▇▂▇▂▁▇▂▂▂▆▄█▃▅█▁▄█▃▅▅▅▃▃▂▅ ▃▂█▆▅▇▁▅▃▆▄▁█▃▇▁▁▂▂▅█████▇█████████▆█████████▅█▁████████ ███████████████████████▆███████▆██▃███████▁████████▂███▂ ▁▁▁▁▂▂▂▂██████████▁█▁▁▅▃▁▃█▂▅▄▅▁▁
ハードドライブは
$d
200()の部分に分割され$s
、各部分の最初のブロックは圧縮されてバイト数にパイプされ、結果の数字のリストpigz
がwc
に供給されますspark
。200
spark
文字は 200 のデータ密度を表します。 512バイトサンプルブロック。パディングされた文字は密なデータを含むブロックであり、圧縮されず、短い文字は希薄なデータであり、圧縮の可能性が非常に高いです。s=2000
より意味のあるビューに設定してください。変数はすべて最初にあり、必要に応じて調整できます。増加$b
(ただし形で512*2^nのみ)または$c
より大きなサンプルをお読みください。興味深いことに、サンプルサイズを増やすと(読む8K代わりにブロック512バイトa) 通常、非常に類似したスパークラインが描かれます。512バイトブロックなら十分です..
答え2
dd if=/dev/sda | hd | less
これにより、ディスクの内容全体が一度に1画面ずつ16進数で出力されます。長い間同じ道を走るバイトシーケンスが記録され、スキップされます。