Fab*_*bio 4 linux partition dd hard-disk
最终目的是逐个扇区构建分区映像。我希望扇区大小为 4096。作为第一步,我尝试创建一个 32MiB 的空映像,其中包含 4096 字节扇区而不是 512 字节。为此,我正在尝试:
dd if=/dev/zero of=empty4k.img bs=4096 count=8192
Run Code Online (Sandbox Code Playgroud)
然后我做
fdisk -l empty4k.img
Run Code Online (Sandbox Code Playgroud)
并显示 512 字节扇区。我相信这是因为如果你这样做“
fdisk -l /dev/zero
Run Code Online (Sandbox Code Playgroud)
它还说 512 字节扇区。
谁能帮我?
fro*_*utz 14
不可能按照你描述的方式去做。扇区大小是文件本身不具有的块设备属性。文件只是一定数量字节的序列,它们的存储方式是一个实现细节......
所以如果你想要一个特定的扇区大小,你需要一个块设备。Linux 提供了循环设备只是为了这个目的,所以losetup
用来创建一个具有特定扇区大小的文件支持的虚拟块设备。
测试文件:
# dd if=/dev/zero of=empty4k.img bs=4096 count=8192
Run Code Online (Sandbox Code Playgroud)
常规循环装置:
# 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,文件完全相同,扇区大小属性由块循环设备层提供。
rex*_*ans 11
在bs
给定的dd
只是告诉缓冲区应该多大创建文件中。最后,文件只由零字节组成,没有关于对齐的信息。
您必须使用特定参数 to fdisk
,即-b
根据man
-page of 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.
Run Code Online (Sandbox Code Playgroud)