あなたが説明した方法でそれを行うことは不可能です。セクタ サイズは、ファイルが本来持っていないブロック デバイス プロパティです。ファイルは特定のバイト数のシーケンスであり、それらがどのように格納されるかは実装の詳細です...
したがって、特定のセクター サイズが必要な場合は、ブロック デバイスが必要です。 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
どちらの場合も、ファイルは完全に同一であり、セクター サイズ プロパティはブロック ループ デバイス レイヤーによって提供されます。
bs
dd
に与えられた ファイルの作成中にバッファの大きさを示すだけです。最終的に、ファイルは 0 バイトだけで構成され、アラインメントに関する情報はありません。
fdisk
に特定のパラメータを使用する必要があります 、これは -b
です 、 man
に従って - fdisk(8)
のページ :
-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.