Linux

用 dd 創建空 img 使其扇區為 4096 字節而不是 512

  • February 14, 2020

最終目的是逐個扇區地建構一個分區的映像。我希望扇區大小為 4096。作為第一步,我試圖創建一個 32MiB 的空圖像,其中包含 4096 字節扇區而不是 512 字節。為此,我正在嘗試:

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

然後我做

fdisk -l empty4k.img

並顯示 512 字節扇區。我相信這是因為如果你這樣做“

fdisk -l /dev/zero

它還說 512 字節扇區。

誰能幫我?

bs給出的只是dd告訴創建文件期間緩衝區應該有多大。最後,文件只包含零字節,沒有關於對齊的資訊。

您必須使用特定參數 to fdisk,即-b,根據man-page 的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.

不可能按照您描述的方式進行。扇區大小是文件本身沒有的塊設備屬性。文件只是一定數量的字節序列,如何儲存這些是實現細節……

所以如果你想要一個特定的扇區大小,你需要一個塊設備。而 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

在這兩種情況下,文件完全相同,扇區大小屬性由塊循環設備層提供。

引用自:https://unix.stackexchange.com/questions/567419