Это старая версия документа!
Содержание
Конвертация Proxmox в VDI образ для VirtualBox
Итак, есть реальный проект на Centos 6.6, который работает как виртуальная машина quemu внутри Proxmox. Его нужно преобразовать в VDI образ, чтобы запустить внутри VirtualBox и использовать Vagrant. Самая большая сложность - огромный размер образа - 267 Гб. Все образы хранятся как LVM.
Все, что я делал, описано ниже.
Подготовка машины
Скопировал site.dev.local
средствами Proxmox и немного донастроил (смена IP, убрал монтирование подкачки и сетевых шар). Убедился, что эта новая «машинка» работает.
Затем удалил кучу файлов - логи, rar/zip
архивы, и так далее. Удалил лишние базы данных. Пересоздал базу данных с целью уменьшения размера файла ibdata1, подробности тут
А так уменьшал базу данных путем удаление старых записей:
DELETE FROM b_sale_basket WHERE ID < 12000000; DELETE FROM b_sale_basket_props WHERE BASKET_ID < 12000000; DELETE FROM b_sale_order WHERE ID < 800000; DELETE FROM b_sale_order_change WHERE ORDER_ID < 800000; DELETE FROM b_sale_order_props_value WHERE ORDER_ID < 800000;
Теперь данных на диске стало кардинально меньше: 200G => 21G.
Все действия я записывал через
script -a /var/tmp/shrink
Поэтому понять, что именно я делал, можно через less /var/tmp/shrink
в полученном образе vagrant-shrink
.
Уменьшение размера файловой системы
Данных стало меньше, но есть еще две связанные проблемы - остались прежними размер файловой системы и размер диска (267 Гб). Так как дальше я скачивал образы разделов, из которых создал новый диск, шринкать диск не нужно.
Сначала я попробовал воспользоваться средствами машинки. Люди пишут, что у parted
есть resizepart
, но опция появилась в версии 3.1. У нас же версия 2.1 для CentOS 6.6, которая больше не поддерживается. Поэтому обновиться не получится. Можно пересобрать, но это муторно. Также придется решать проблему размонтирования корневой файловой системы. Я пошел другим путем.
Я вошел на машину Proxmox и скачал Live CD с новой CentOS 7.8:
cd /var/lib/vz/template/iso/ wget http://mirror.truenetwork.ru/centos/7.8.2003/isos/x86_64/CentOS-7-x86_64-LiveGNOME-2003.iso
После чего в проксмоксе можно подрубить этот образ и перезагрузиться с него.
Дальше через parted
можно сделать ресайз. Вот картинка до:
и после:
Конвертация Proxmox в VDI
Наконец, надо превратить образ диска в виртуалбоксовский - для использования в вагранте.
Загрузившись с Live CD, через parted нужно экспортировать разделы в img-файл: нажать на шестеренки, затем Create Partition Image.
Бут-партицию я также сжал с 512 до 256 Мб. Получилось два файла:
boot.img
- загрузочный разделbase.img
- система
Затем отвел отвел 40 Гб под будущий образ:
fallocate -l 40G dest.img
Через fdisk размечаем разделы:
fdisk dest.img n p 1 2048 513807 (тут я немного накинул на всякий случай) n p 2 514048 (по-умолчанию) 83886079 (по-умолчанию) p Устр-во Загрузочный Start Конец Секторы Size Id Тип dest.img1 * 2048 513807 511760 249,9M 83 Linux dest.img2 514048 83886079 83372032 39,8G 83 Linux w
Подмонтируем:
losetup -f --show dest.img # получилось /dev/loop6 kpartx -a /dev/loop6
потом скопируем разделы:
dd if=boot.img of=/dev/mapper/loop6p1 conv=notrunc dd if=base.img of=/dev/mapper/loop6p2 conv=notrunc
После этого нужно восстановить grub.
sudo su cd /mnt mkdir ./boot mount /dev/loop6 ./boot grub-install --recheck --boot-directory=./boot /dev/loop6 # Установка для платформы i386-pc. # Установка завершена. Ошибок нет. resize2fs /dev/mapper/loop6p1 # The filesystem on /dev/mapper/loop6p1 is now 63970 (4k) blocks long. kpartx -r /dev/loop6 # loop6p1 : 0 511760 /dev/loop6 2048 # loop6p2 : 0 83372032 /dev/loop6 514048 losetup --detach /dev/loop6
Наконец, я переконвертировал образ в VDI и система загрузилась внутри виртуалбокса: