Как создать.IMG изображение диска (sd-карты) без включения свободного места?

в Linux, мы можем сделать

dd if=/dev/sdb of=bckup.img

но если диск 32GB с только 4GB используется, 32GB файл изображения является пустой тратой пространства-времени. Есть ли способ или инструмент для создания изображений только с допустимыми данными?

3 ответов


довольно хороший и простой способ справиться с этим-просто передать его через gzip, что-то вроде этого:

# dd if=/dev/sdb | gzip > backup.img.gz

таким образом, ваше изображение будет сжато, и, скорее всего, неиспользуемое пространство будет сжато почти до нуля.

вы бы использовали это, чтобы восстановить такое изображение обратно:

# cat backup.img.gz | gunzip | dd of=/dev/sdb

одно примечание: если у вас было много файлов, которые были недавно удалены, размер изображения может быть все еще большим (удаление файла не обязательно обнуляет базовые сектора). Вы можете вытереть освободите место, создав и немедленно удалив большой файл, содержащий нули:

# cd /media/flashdrive
# dd if=/dev/zero of=bigfile bs=1M     # let it run and quit by disk full error
# rm bigfile

лучшее, что можно сделать, это

  1. скопируйте все файлы со всех разделов, сохраняющих метаданные

    mkdir -p myimage/partition1

    mkdir myimage/partition2

    sudo cp -Rrf --preserve=all /media/mount_point_partition1/* myimage/partition1/

    sudo cp -Rrf --preserve=all /media/mount_point_partition2/* myimage/partition2/

  2. извлечь MBR

    sudo dd if=/dev/sdX of=myimage/mbr.img bs=446 count=1

    заменить /dev/sdX С соответствующим устройством.

  3. разделите целевой диск на разделы с размерами больше, чем скопированные данные и должны иметь тот же формат и те же флаги, используя gparted. Google, как разделить диск.

  4. установите только что отформатированный и секционированный диск. На большинстве компьютеров, вам просто нужно подключить диск, и вы можете найти подключенные разделы в .

  5. скопируйте ранее скопированные данные в целевые разделы, используя следующие команды

    sudo cp -Rrf --preserve=all myimage/partition1/* /media/mount_point_partition1/ sudo cp -Rrf --preserve=all myimage/partition2/* /media/mount_point_partition2/

  6. скопируйте MBR

    sudo dd if=myimage/mbr.img of=/dev/sdX bs=446 count=1

теперь njoy УР новый диск!


С помощью bs и графа параметры dd, вы можете ограничить размер изображения, как показано в шаге 2 ответ 1665017.

вы уже знаете, какой размер изображения вы хотите создать. Если нет, вы можете получить хорошую идею от df:

df -H --total /

заменить / с разделенным пробелом списком всех точек монтирования, относящихся к разделам диска.

более точным способом может быть использование fdisk или ваш предпочтительный редактор разделов и займитесь калькулятором.

$ fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 7.4 GiB, 7948206080 bytes, 15523840 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: 0x00057540

Device         Boot  Start     End Sectors  Size Id Type
/dev/mmcblk0p1        2048  186367  184320   90M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      186368 3667967 3481600  1.7G  5 Extended
/dev/mmcblk0p5      188416 3667967 3479552  1.7G 83 Linux

общее используемое пространство в байтах = конечный сектор последнего размера сектора раздела X (здесь это 3667967 x 512).

общее используемое пространство в ГБ = общее используемое пространство в байтах / 10243 (вот это 1.749023 ГБ).

если вы решите, например, что ваш образ должен быть ровно 2 ГБ, следующая команда сделает это:

dd if=/dev/mmcblk0 of=/path/to/pi_updated.img bs=1M count=2048

полученное изображение будет также включать случайный шум за пределами наибольшей степени последнего раздела.

не забудьте sudo вышеуказанные команды, если ваша учетная запись еще не имеет достаточных привилегий.

для моих целей мне не нужно изображение, которое идеально обрезается до последнего бита данных, поэтому, когда реальный размер составляет 1,75 ГБ, тогда изображение 2 ГБ достаточно близко для меня. Это вырезает другие 6 GB (или 30 GB или все, что у устройства есть) неиспользуемого пространства, которое в противном случае будьте в образе.

Я видел советы во многих местах, что dd должны не выполняется на монтированной перегородке, и я последовал этому, потому что это кажется интуитивно правильным; это похоже на попытку нарисовать себя, делая эскиз в зеркале с эскизом, который вы делаете также видимым в эскизе. Это немного отрывочно.