Комментарии 20
А Ext4 вполне себе умеет, и после resize2fs можно спокойно уменьшать размер раздела (или логического тома lvm). Обычный раздел уменьшается в fdisk путем удаления и создания с новым размером (данные не теряются, но все и везде рекомендуют делать бэкап). В lvm делается lvresize. Главное с новым размером не ошибиться (особенно с единицами измерения), чтобы размер раздела случаем не стал меньше, чем размер ФС.
Ну а переливать данные в случае XFS будет проще, если подключить образ qcow2 с помощью qemu-nbd — тогда он появится в системе как диск /dev/nbdX — и с ним можно работать как с обычным диском (fdisk, dd, mount и т.п.)
Проблема в том, что shrink раздела невозможен без предварительного сжатия qcow2
можете пояснить?
Не читал, но осуждаю.:) Шутка. Пол-года назад собирал в сети по крупицам инфу, когда надо было proxmox-виртуалку с 2Тб qcow2 диском прегнать в hyper-v, с уменьшением диска в 4 раза.
dd if=/dev/zero of=/zerofile
sync
rm /zerofile
снаружи виртуалки (виртуалка выключена)
sudo fallocate -d file.img
работает на vdi,qcow2если оня хранятся на ext4 итп ФС.
далее,
sudo losetup --show -Pvf ./file.img для raw образа, не забываем losetup -d /dev/loopN в конце.
и для qcow2
sudo modprobe nbd max_part=63
sudo qemu-nbd -c /dev/nbd0 file.qcow2
sudo partprobe /dev/nbd0
// тут творим с разделами что хотим.
sudo qemu-nbd -d /dev/nbd0
Если уменьшить раздел, то даже текущий образ уменьшать не понадобится, тк «хвост» будет почти нулевого размера.
зы, это всё не для продакшена. Только для домашних поделок, тк фактически работает «на живую».
Не знаю как это было в 2020 году, но сейчас virt-sparsify имеет --in-place аргумент без всех этих танцев с gparted :)
Танцы с gparted нужны, чтобы уменьшить размер раздела. Virt-sparsify не уменьшает разделы, не увеличивает их, а работает с файловым образом - тримит его, грубо говоря.
--in-place просто избавляет от необходимости писать во второй файл, имея х2 свободного пространства в рабочей фс. И то, есть нюансы.
А, я по диагонали прочитал, сорри :)
Ресайзю вниз qcow2 как-то так (внутри только один раздел ext4):
скажем, диск 40 гб, ресайзим до 30 гб:
# modprobe nbd
# qemu-nbd --connect /dev/nbd1 --aio=native --format=qcow2 --cache=none disk.qcow2
# mount /dev/nbd1p1 /mnt
# e4defrag /dev/nbd1p1
# umount /mnt
# fsck -f -y /dev/nbd1p1
# resize2fs /dev/nbd1p1 28G (на пару гигов меньше, тупо чтоб не париться с высчитыванием точных размеров партиции - дальше все выровняется до 30гб)
создаём скрипт в котором ресайзим физическую партицию в 29GB (28+1)
#! /bin/bash
/sbin/parted /dev/nbd1 ---pretend-input-tty <<EOF
resizepart
1
29000
Yes
quit
EOF
выполняем скрипт.
# qemu-nbd -d /dev/nbd1
# qemu-img resize --shrink disk.qcow2 30G
# qemu-nbd -c /dev/nbd1 disk.qcow2
# /sbin/parted -s /dev/nbd1 "resizepart 1 -1" quit
# fsck -f -y /dev/nbd1p1
# resize2fs /dev/nbd1p1
# qemu-nbd -d /dev/nbd1
Не хватает virt-sparsify windows build, для хост машин на Windows.
Например актуально для того же Bluestack, образы которого разрастаются до гигантских размеров, как впрочем у любых виртуальных машин.
Сейчас под Windows ест только Clonevdi с аналогичным функционалом, понимает все образы, но выходной формат только VDI, далее надо делать qemu-img convert, который в свою очередь тупой и теряет uuid, который надо снова вручную задавать через VBoxManage internalcommands sethduuid.
Вообщем костыль на костыле костылём погоняет.
Уменьшаем qcow2 образ в Libvirt KVM