2012年5月4日金曜日

ddコマンドの seek, count メモ


このエントリーをはてなブックマークに追加


最近、iscsiターゲットなんかを作るときに便利なddのseekオプション。

動作イメージはこんな感じ。



1埋めされたテスト用ファイルの作成
$ for i in {1..1024}; do echo -n 1 >> test.dd; done
00000000: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000010: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000020: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000030: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000040: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000050: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000060: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000070: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000080: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000090: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000a0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000b0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000c0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000d0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000e0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000f0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000100: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000110: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000120: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000130: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000140: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000150: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000160: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000170: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000180: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000190: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000001a0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000001b0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000001c0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000001d0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000001e0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000001f0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000200: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000210: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000220: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000230: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000240: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000250: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000260: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000270: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000280: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000290: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000002a0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000002b0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000002c0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000002d0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000002e0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000002f0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000300: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000310: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000320: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000330: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000340: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000350: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000360: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000370: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000380: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000390: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000003a0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000003b0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000003c0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000003d0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000003e0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000003f0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111

ddを使ってzeroファイルから1024バイトのファイルを作成
$ dd if=/dev/zero of=test.dd bs=1 count=1024
00000000: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000060: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000070: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000080: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000090: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000100: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000110: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000120: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000130: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000140: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000150: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000160: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000170: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000180: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000190: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000200: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000210: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000220: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000230: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000240: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000250: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000260: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000270: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000280: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000290: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000300: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000310: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000320: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000330: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000340: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000350: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000360: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000370: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000380: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000390: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................

これをseekを使って最後の1バイトだけを書き込んでやると。
$ rm test.dd
$ for i in {1..1024}; do echo -n 1 >> test.dd; done
$ dd if=/dev/zero of=test.dd bs=1 count=1 seek=1023
00000000: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000010: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000020: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000030: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000040: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000050: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000060: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000070: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000080: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000090: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000a0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000b0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000c0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000d0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000e0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000f0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000100: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000110: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000120: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000130: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000140: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000150: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000160: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000170: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000180: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000190: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000001a0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000001b0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000001c0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000001d0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000001e0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000001f0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000200: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000210: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000220: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000230: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000240: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000250: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000260: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000270: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000280: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000290: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000002a0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000002b0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000002c0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000002d0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000002e0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000002f0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000300: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000310: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000320: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000330: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000340: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000350: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000360: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000370: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000380: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000390: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000003a0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000003b0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000003c0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000003d0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000003e0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000003f0: 3131 3131 3131 3131 3131 3131 3131 3100  111111111111111.

途中だけを書き換えようとしても、ddが書き込みを終了した箇所がファイルのEOFになる。
$ dd if=/dev/zero of=test.dd bs=1 count=256 seek=256
00000000: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000010: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000020: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000030: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000040: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000050: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000060: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000070: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000080: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000090: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000a0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000b0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000c0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000d0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000e0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
000000f0: 3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
00000100: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000110: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000120: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000130: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000140: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000150: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000160: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000170: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000180: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000190: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................

これを利用すると、手軽に巨大ファイルが作成できる。
$ rm test.dd
$ dd if=/dev/zero of=test.dd bs=1 count=1 seek=1023
00000000: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000060: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000070: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000080: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000090: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000100: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000110: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000120: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000130: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000140: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000150: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000160: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000170: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000180: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000190: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000200: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000210: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000220: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000230: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000240: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000250: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000260: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000270: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000280: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000290: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000300: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000310: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000320: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000330: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000340: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000350: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000360: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000370: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000380: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000390: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................

1GBのファイル作成例(seekを使わないと少々時間がかかるが、seekではじめの1023MBをすっ飛ばして、最後の1MBだけ書き込むの一瞬で終わる)
$ dd if=/dev/zero of=test.dd bs=1024k count=1 seek=1023

これがいわゆる論理的なサイズと、実際の容量が異なるスパースファイル。
スパースファイルの作成はファイルシステム側がサポートしている必要がある。モダンなファイルシステム(ext3, ext4, xfs, ntfs)はほぼサポートされる。

スパースファイルをコピーする場合、デフォルトではスパースファイルのままコピーされる。これはcpコマンドのオプションで制御できる。

man cpより抜粋
--sparse=WHEN
「スパースなファイル」とは「ホール( 穴 )」 (物理ディスクブロックを占有しないゼロバイトの連続) を含むものである。 read システムコールはそれらのファイルをゼロとして読み込む。 多くのバイナリファイルにはゼロバイトの並びがたくさん含まれているので、このオプションにより、かなりのディスク容量を節約し、 スピードを上げることができる。 デフォルトでは `cp' は大雑把な発見的手法で 入力されたコピー元ファイルからホールを検知し、 対応する出力ファイルもスパースにする。

WHEN の値は下のいずれかである:

auto
デフォルトの動作:入力ファイルがスパースのとき、 出力ファイルもスパースにする。

always
常に出力ファイルをスパースにする。このオプションは入力ファイルが スパースなファイルをサポートしないファイルシステム上にあるが、 出力ファイルはスパースなファイルをサポートするファイルシステム上に 置かれる場合に有用である。

never
出力ファイルをスパースにしない。 このオプションの有意義な利用法を見付けたら筆者に教えてほしい。

0 件のコメント:

コメントを投稿