web-dev-qa-db-ja.com

ddで空のimgを作成して、セクターが512ではなく4096バイトになるようにします。

最後の目的は、パーティションのイメージをセクターごとに構築することです。セクターサイズを4096にしたいと思います。最初のステップとして、512バイトではなく4096バイトセクターの32MiBの空のイメージを作成しようとしています。このために私は試しています:

dd if=/dev/zero of=empty4k.img bs=4096 count=8192

それから私はします

fdisk -l empty4k.img

512バイトのセクターを示しています。私が信じるのは

fdisk -l /dev/zero

また、512バイトのセクターを示しています。

誰か助けてもらえますか?

4
Fabio

bsに与えられたddは、ファイルの作成時にバッファがどれだけの大きさになるかを示すだけです。結局のところ、ファイルはゼロバイトのみで構成されており、アライメントに関する情報はありません。

fdisk(8)fdisk- pageに従って、manに固有のパラメーターを使用する必要があります。これは-bです。

  -b, --sector-size sectorsize
          Specify  the  sector  size  of  the  disk.   Valid values are 512,    1024, 2048, and 4096.  (Recent kernels know the sector size.  Use this option only on old kernels or to override the kernel's
          ideas.)  Since util-linux-2.17, fdisk differentiates between logical and physical sector size.  This option changes both sector sizes to sectorsize.
11
rexkogitans

あなたが説明する方法でそれを行うことは不可能です。セクターサイズは、ファイルに本来備わっていないブロックデバイスプロパティです。ファイルは特定のバイト数のシーケンスであり、それらの格納方法は実装の詳細です...

したがって、特定のセクターサイズが必要な場合は、ブロックデバイスが必要です。 Linuxはこの目的のためだけにループデバイスを提供しているので、losetupを使用して、特定のセクターサイズでファイルバックアップされた仮想ブロックデバイスを作成します。

テストファイル:

# dd if=/dev/zero of=empty4k.img bs=4096 count=8192

通常のループデバイス:

# losetup --find --show empty4k.img 
/dev/loop0
# fdisk -l /dev/loop0
Disk /dev/loop0: 32 MiB, 33554432 bytes, 65536 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

4096バイトのセクターループデバイス:

# losetup --find --show --sector-size=4096 empty4k.img 
/dev/loop1
# fdisk -l /dev/loop1
Disk /dev/loop1: 32 MiB, 33554432 bytes, 8192 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

どちらの場合も、ファイルは完全に同一であり、セクターサイズプロパティはブロックループデバイスレイヤーによって提供されます。

13
frostschutz

ddのブロックサイズは、そのサイズのチャンクで読み取り/書き込みを要求するだけです。今日のディスクとI/Oのよりスマートなオペレーティングシステムの処理を考えると、パフォーマンスのためにディスクセクターサイズのチャンクの書き込みに関連していたため、ほとんど(ほとんどない)違いはありません。

0
vonbrand