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 区域,不知道它是如何工作的。也许它在第一次启动时调整了大小或类似情况。