Озадачился я, что для того образа ноутбука, где занято всего 20Гб, отвести 300Гб на диск будет, пожалуй, жирновато. Можно было, конечно, перевести в COW2, но на BTRFS двойное COW слишком тормозит.
Для начала я попробовал просто gparted image.raw, выяснилось, что таким образом можно посмотреть содержимое, удалять разделы, но, например, NTFS-раздел подвигать я не смог. Только расширить, что мне и не требовалось.
Не проблема - запустил в виртуалке, выбрал диск в диспетчере дисков винды и Shrink. До 40Гб ужалось чуть ли не моментально. Но, понятное дело, сам файл image.raw не изменился. Что делать? Как его ужать? Чуть ли не 250Гб Unallocated внутри. Есть два варианта.
прицепить образ устройством уже к самому хосту
Код:
losetup -fv /path/to/image.raw
Loop device is /dev/loop0
посмотреть что на нем и какие размеры имеет
Код:
fdisk -l /dev/loop0
Disk /dev/loop0: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders, total 62914560 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
Disk identifier: 0x1449bcb0
Device Boot Start End Blocks Id System
/dev/loop0p1 * 2048 11452502 5725227 7 HPFS/NTFS
/dev/loop0p2 11452503 42432503 15490000 7 HPFS/NTFS
отцепить устройство
Код:
losetup -d /dev/loop0
и перелить из одного образа кусок в другой (не забываем добавить два блока к последнему)
Код:
dd if=/path/to/image.raw of=/path/to/shrinked_image.raw bs=512 count=42432505
способ вполне рабочий, я проверял, но проблема в том, что на моем домашнем старом винте можно усохнуть ожидая конца операции. Гораздо проще и быстрее посмотреть размер той же самой командой fdisk -l (выше вывод какой-то куцый, вы увидите и размер разделов), после чего режете image.raw командой, например
Код:
qemu-img resize image.raw 40G
отрабатывает влет с 300Гб до 40Гб.