ディスクからデータを読み込もうとしていますが、dd
各要求をランダムに実行し、ディスクの読み取り操作の待ち時間を確認するコマンドが必要です。これら2つのタスクを「検索」と「スキップ」を使用しましたが、効果はありますか?
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
誰かがディスクからデータを読み取る新しい方法を提案できますか?
答え1
skip
iseek
(一部の実装でも呼び出されますdd
)は、入力ストリームの現在のポインタを移動すると同時に、出力ストリームの現在のseek
ポインタを移動します。
したがって、を使用すると、skip
入力ストリームの先頭の一部のデータを無視できます。
通常、(常にそうではない)出力ストリームの先頭にあるデータを保存するためにseek
一緒に使用されます。conv=notrunc
答え2
マニュアルページからdd
seek=BLOCKS
skip BLOCKS obs-sized blocks at start of output
skip=BLOCKS
skip BLOCKS ibs-sized blocks at start of input
これは次のように書き直すことができます。
seek
ファイルの先頭からnブロックをスキップしますoutput
。
skip
ファイルの先頭からnブロックをスキップしますinput
。
答え3
次の例では、まず入力ファイルと出力ファイルを準備し、次に入力の一部を出力ファイルの一部にコピーします。
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.
「skip」と「seek」の値が変わったらどうなりますか? ddは入力の間違った部分をコピーし、出力ファイルの間違った部分を上書きします。
Keep thear Friend:IGNTHIS, keep this.