В чем разница между dd в файл и dd на физический диск?

В чем разница между dd в файл и dd на физический диск?

Размер образа "openwrt-19.07.6-x86-64-combined-squashfs.img" составляет 20 МБ. Если я изменю имя файла на "openwrt.raw", я смогу импортировать его в virt-manager и загрузить систему. Но в корневом разделе "/" нет места.

Если я скопирую «openwrt-19.07.6-x86-64-combined-squashfs.img» на USB-накопитель, а затем скопирую на USB-накопитель новый файл, импортирую выходной файл в virt-manager и загружу систему, то размер корневого раздела составит «256 МБ».

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

выходной файл имеет тот же размер, что и входной. Я понимаю, что это действие бессмысленно. Но может ли кто-нибудь объяснить, что делает корневой раздел размером 256 МБ доступным, когда я добавляю его на USB-накопитель? Есть ли способ создать файл образа с корневым пространством размером 256 МБ без необходимости использования физического 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 для чтения-записи, не знаю, как это работает. Может, она меняет размер при первой загрузке или что-то в этом роде.

Связанный контент