トップ «前の日記(2011-03-25(Fri)) 最新 次の日記(2011-04-18(Mon))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2011-04-14(Thu) また間がだらーん。春だ

dd(1)もちょっと

既存のイメージに追加する場合は、seek=$NUMBER とかのオプション をつければ、ブロックサイズ x $NUMBER だけ隙間ができる(上書き しない)ようだ。

$ dd if=/dev/urandom of=foo.img bs=512 count=10
10+0 records in
10+0 records out
5120 bytes (5.1 kB) copied, 0.00170951 s, 3.0 MB/s
 
$ cp foo.img bar.img
$ dd if=/dev/zero of=foo.img seek=10  bs=512 count=10
10+0 records in
10+0 records out
5120 bytes (5.1 kB) copied, 8.1365e-05 s, 62.9 MB/s
 
$ ls -l foo.img bar.img
-rw-r--r-- 1 user group  5120 2011-04-14 11:13 bar.img
-rw-r--r-- 1 user group 10240 2011-04-14 11:14 foo.img
 
$ md5sum bar.img
8afb5cae73c1090b2d1e860f0691148d  bar.img
$ dd if=foo.img bs=512 count=10 | md5sum
8afb5cae73c1090b2d1e860f0691148d  -
10+0 records in
10+0 records out
5120 bytes (5.1 kB) copied, 0.000239765 s, 21.4 MB/s

ただし、これはブロックサイズの整数倍きっちりの場合だけ。
bsを適当にして1倍すれば計算は要らないが、今度は最終的な サイズ調整が面倒そうだ。
そのあたりに融通を利かせたいなら、標準入出力を利用したほうが 簡単かもしれない。

$ cp bar.img foo.img
 
$ dd if=/dev/zero  bs=513 count=10 >> foo.img
10+0 records in
10+0 records out
5130 bytes (5.1 kB) copied, 9.7149e-05 s, 52.8 MB/s
 
$ md5sum bar.img
8afb5cae73c1090b2d1e860f0691148d  bar.img
 
$ dd if=foo.img bs=512 count=10 | md5sum
8afb5cae73c1090b2d1e860f0691148d  -
10+0 records in
10+0 records out
5120 bytes (5.1 kB) copied, 0.000235365 s, 21.8 MB/s

ちなみに seek と bs で指定したサイズが元データより大きいと、 間の分が隙間になって しまうようだ(小さいと、元データの末尾が書き換えられる)。

$ cp bar.img foo.img
$ dd if=/dev/zero of=foo.img seek=43 bs=3MB count=11
11+0 records in
11+0 records out
33000000 bytes (33 MB) copied, 0.137683 s, 240 MB/s
 
$ ls -lh *.img
-rw-r--r-- 1 user group 5.0K 2011-04-14 11:13 bar.img
-rw-r--r-- 1 user group 155M 2011-04-14 11:26 foo.img
$ du -h *.img
8.0K    bar.img
32M     foo.img

ちょっと気づいた挙動

ls(1)で、パス指定したファイルとしないファイルを指定すると、パス指定 のないファイル名の出力は、後回しになった。
Debian GNU/Linux Squeeze と FreeBSD-8.1 で確認。

$ echo 1 > 1.txt
$ echo 2 > 2.txt
 
$ ls -1 1.txt ./2.txt
./2.txt
1.txt
$ ls -1  ./2.txt 1.txt
./2.txt
1.txt
 
$ cat 2.txt ./1.txt
2
1
$ cat ./2.txt 1.txt
2
1

リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。