dd 到文件和 dd 到物理磁盘有什么区别

dd 到文件和 dd 到物理磁盘有什么区别

openwrt-19.07.6-x86-64-combined-squashfs.img 镜像大小为 20MB,如果我将文件名改为 openwrt.raw,则可以将其导入 virt-manager 并启动系统,但根分区“/”没有空格。

如果我将“openwrt-19.07.6-x86-64-combined-squashfs.img”添加到 USB 驱动器,然后将 USB 驱动器添加到新文件,将输出文件导入 virt-manager 并启动系统,则根分区的大小为“256MB”。

dd if=openwrt-19.07.6-x86-64-combined-squashfs.img of=/dev/sde
dd if=/dev/sde of=./openwrt_with_256MB_root_partition.raw

“openwrt_with_256MB_root_partition.raw”的大小与 USB 驱动器相同。但如果我使用以下命令:

dd if=openwrt-19.07.6-x86-64-combined-squashfs.img of=/openwrt.raw

输出文件与输入文件大小相同。我知道这个操作毫无意义。但有人能解释一下当我将它放入 USB 驱动器时,是什么让 256MB 根分区可用吗?有没有办法创建一个具有 256MB 根空间的映像文件,而不需要物理 USB 驱动器或其他磁盘?

答案1

不知道 OpenWRT 现在做什么。

但是,你所做的只是在文件末尾添加一些垃圾数据。由于文件大小最终是虚拟机内部的设备大小,因此结果很容易理解。

您还可以使用truncate

truncate -s256M openwrt-19.07.6-x86-64-combined-squashfs.img

严格来说,这并不一样,因为它会导致稀疏文件,但它更快而且足够好。

为了获得完全相同的结果,您实际上需要向文件中写入一些数据,如下所示:

dd if=/dev/zero bs=1M count=236 >> openwrt-19.07.6-x86-64-combined-squashfs.img

您还可以使用高级标志dd。256 - 20 = 236

与此相关的另一个工具是fallocate


更新:看图的话是这样的:

$ fdisk -l openwrt-19.07.6-x86-generic-combined-squashfs.img
Disk openwrt-19.07.6-x86-generic-combined-squashfs.img: 19.5 MiB, 20450816 bytes, 39943 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
Disklabel type: dos
Disk identifier: 0xf1f0223e

Device                                             Boot Start    End Sectors  Size Id Type
openwrt-19.07.6-x86-generic-combined-squashfs.img1 *      512  33279   32768   16M 83 Linux
openwrt-19.07.6-x86-generic-combined-squashfs.img2      33792 558079  524288  256M 83 Linux

(请注意“大小”列。)

第二个分区应该包含压缩的只读根映像一个可读写的 F2FS 区域,不知道它是如何工作的。也许它在第一次启动时调整了大小或类似情况。

相关内容