Назад | Перейти на главную страницу

Как записать разреженный образ диска Linux (EXT4) без записи гигабайт нулей?

У меня есть образ диска Linux на 64 ГБ с ~ 50 ГБ неиспользуемого пространства между разделами. Файл небольшой, поэтому на диске он занимает всего ~ 14 ГБ.

Но если я dd образ он записывает полные 64 ГБ, что занимает довольно много времени.

Есть ли способ сделать эквивалент dd if=os.img of=/dev/sdb с этим образом без записи 50 ГБ нулей?

Есть ли какой-нибудь инструмент, достаточно умен, чтобы сделать это, например, инструмент создания образов, который знает файловую систему EXT4?

dd может справиться с этим. Вам нужно добавить conv=sparse в командную строку.

На странице руководства:

              try to seek rather than write the output for NUL input blocks

Я бы подумал об использовании mksquashfs для создания копии только для чтения вместо создания dd всего объема. Это дополнительно сжимает и дедуплицирует данные.

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

Это неудобно, поскольку у вас есть полный образ диска, но вы можете:

  1. используйте вашу программу разбиения на разделы, чтобы вывести список разделов в os.img и создать их на /dev/sdb
  2. восстановить каждый раздел с помощью e2image. например., e2image -aro 1048576 os.img /dev/sdb1

Это не обрабатывает MBR, если она есть. /bin/dd if=os.img of=/dev/sdb bs=512 count=1 сделаю это.

Примечание: страница руководства e2image на linux.die.net устарела. Из бионической установки:

SYNOPSIS
   e2image [ -r|Q ] [ -f ] device image-file
   e2image -I device image-file
   e2image -ra [ -cfnp ] [ -o src_offset ] [ -O dest_offset ] src_fs [ dest_fs ]