ディスクから読み取ろうとしていて、dd
コマンドを実行してすべてのリクエストをランダムに発行し、シークとスキップの両方を使用した読み取り操作のディスクのレイテンシを確認したいのですが、両方とも機能しますか?
dd if=/dev/rdsk/c2t5000CCA0284F36A4d0 skip=10 of=/dev/null bs=4k count=1024000
1024000+0 records in
1024000+0 records out
4194304000 bytes (4.2 GB) copied, 51.0287 s, 82.2 MB/s
dd if=/dev/rdsk/c2t5000CCA0284F36A4d0 seek=10 of=/dev/null bs=4k count=1024000
1024000+0 records in
1024000+0 records out
4194304000 bytes (4.2 GB) copied, 51.364 s, 81.7 MB/s
ディスクから読み取る新しい方法を誰かが私に提案できますか?
skip
(iseek
の実装ではdd
とも呼ばれます)は入力ストリームの現在のポインターを移動し、seek
は出力ストリームの現在のポインターを移動します。
したがって、skip
を使用すると、入力ストリームの先頭にある一部のデータを無視できます。
seek
は通常、(常にではありませんが)conv=notrunc
と組み合わせて使用され、出力ストリームの先頭に存在するいくつかのデータを保持します。
dd
のmanページから
seek=BLOCKS
skip BLOCKS obs-sized blocks at start of output
skip=BLOCKS
skip BLOCKS ibs-sized blocks at start of input
これは次のように言い換えることができます。
seek
は、output
ファイルの先頭からnブロックをスキップします。
skip
は、input
ファイルの先頭からnブロックをスキップします。
次の例では、最初に入力ファイルと出力ファイルを準備してから、入力の一部を出力ファイルの一部にコピーします。
echo "IGNORE:My Dear Friend:IGNORE" > infile
echo "Keep this, OVERWRITE THIS, keep this." > outfile
cat infile
cat outfile
echo
dd status=none \
bs=1 \
if=infile \
skip=7 \
count=14 \
of=outfile \
conv=notrunc \
seek=11
cat outfile
Ddの引数は次のとおりです。
status=none Don't output final statistics as dd usually does - would disturb the demo
bs=1 All the following numbers are counts of bytes -- i.e., 1-byte blocks.
if=infile The input file
skip=7 Ignore the first 7 bytes of input (skip "IGNORE:")
count=14 Transfer 14 bytes from input to output
of=outfile What file to write into
conv=notrunc Don't delete old contents of the output file before writing.
seek=11 Don't overwrite the first 11 bytes of the output file
i.e., leave them in place and start writing after them
スクリプトを実行した結果は次のとおりです。
IGNORE:My Dear Friend:IGNORE
Keep this, OVERWRITE THIS, keep this.
Keep this, My Dear Friend, keep this.
「スキップ」と「シーク」の値を交換するとどうなりますか? ddは、入力の誤った部分をコピーし、出力ファイルの誤った部分を上書きします。
Keep thear Friend:IGNTHIS, keep this.