web-dev-qa-db-ja.com

ddコマンドでのシークとスキップの違いは何ですか?

ディスクから読み取ろうとしていて、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

ディスクから読み取る新しい方法を誰かが私に提案できますか?

7
Sharan Basappa

skipiseekの実装ではddとも呼ばれます)は入力ストリームの現在のポインターを移動し、seekは出力ストリームの現在のポインターを移動します。

したがって、skipを使用すると、入力ストリームの先頭にある一部のデータを無視できます。

seekは通常、(常にではありませんが)conv=notruncと組み合わせて使用​​され、出力ストリームの先頭に存在するいくつかのデータを保持します。

17
Serge

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ブロックをスキップします。

6
Thushi

次の例では、最初に入力ファイルと出力ファイルを準備してから、入力の一部を出力ファイルの一部にコピーします。

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.