Задать вопрос

Как правильно перенести виртуальную машину на диск меньшего размера?

Доброго времени суток.
У меня такая ситуация нужно перенести систему с большего диска на меньший, причем структура такая. Диск 100Гб, boot раздел fat32, остальное в LVM - в системе используется не более 20Гб, нужно перенести на диск с 50Гб сохраняя рабочее состояние, на несколько часов машину можно потушить.

Для тестов я создал виртуалку и пробую на ней. Всё ли верно и есть ли способ упростить всё это?
Общий алгоритм переноса на новый диск я вижу таким
1. Подключаем новый диск /dev/sdb
2. Загружаемся с LiveCD (sysresccd)
3. Разбиваем новый диск посредством fdisk как целевой (sfdisk -d не катит, т.к новый диск меньше)
(Почему не получилось создать /dev/sdb5 с началом 501760, fdisk показал первым сектором 501758 я так и не понял)
fdisk -l /dev/sda
Disk /dev/sda: 10 GiB
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 499711 248832 83 Linux
/dev/sda2 501758 20969471 10233857 5 Extended
/dev/sda5 501760 20969471 10233856 8e Linux LVM

fdisk -l /dev/sdb
Disk /dev/sdb: 8 GiB
Device Boot Start End Blocks Id System
/dev/sdb1 * 2048 499711 248832 83 Linux
/dev/sdb2 501758 16777215 8137729 5 Extended
/dev/sdb5 503808 16777215 8136704 8e Linux LVM

4. Копируем загрузочный раздел
dd if=/dev/sda1 of=/dev/sdb1

5. Далее возникает вопрос как правильно скопировать LVM
Добавляем в VG новый диск, уменьшим текущую VG группу что бы она смогла перенестить на новый, переносим данные командой pvmove, и удаляем старый диск из VG (можно отключать)

6. Опять же в LiveCD установим загрузчик
Примонтируем LVM root раздел, создадим симлинки на каталоги proc, dev,sys сделаем chroot и собственно установим grub

Можно перезагружаться и пользоваться.
Эти все операции занимают много времени и вызывают некоторые неудобства, как это можно упростить? Пробовал переносить Clonezilla устройство на устройство но оказалось так нельзя.
Читал что можно снимать образ dd, заполнять нулями, делать бэкап. Но нужен внешнее хранилище или флешка, короче плохо всё это. Могу написать пошаговый how to в песочницу, нужно? И можно ли это делать как-то в лайв режиме не потушив машину? Спасибо за ответы.

UPD: Примечание. Может будет яснее зачем это делается. После создания виртуальной машины через Xen, VirtualBox, Hyper-V, WmWare мы указываем максимальный размер HDD который либо резервируется под полный объем, либо занимает фактический размер и расширяется постепенно - этот диск обычно можно увеличить при выключенной машине, но уменьшить нет. А внутри, читай выше вопрос, уже boot раздел и lvm. Сжав внутри виртуалки раздел LVM внешне диск не изменится - именно по этому для миграции на диск меньшего размера нужно делать все вышеописанное.
  • Вопрос задан
  • 1766 просмотров
Подписаться 4 Оценить 2 комментария
Решения вопроса 1
Albibek
@Albibek
Вопросы есть? А если найду?
Если у вас не создаётся по 100500 файлов каждую секунду, вполне может быть, что вам будет достаточно обычного rsync.
Загружаетесь с LiveCD, создаёте нужную структуру разделов, на р азделах создаёте файловые системы, синхронизируете файлы с первой машиной, выключаете первую, включаете вторую. Всё сработает вообще идеально, если есть возможность на первой машине перевести синхронизируемые разделы в read-only-режим.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@pbt39
Не знаю какая система виртуализации Вами используется, но в используемой мною (vmware vsphere)
можно поступить следующим образом, использовать thin provisioning, назначить задачу миграции ВМ на другое хранилище указав что вссё место сразу занимать не нужно. это позволяет размещать ВМ с диском в 500 Gb на диск размером в 100 Gb при условии что в данный момент занято (используется) менее 100 GB.
Ответ написан
@Jon7
Lvm имеет штатные средства для уменьшения размера тома. Ключевое слово reduce. Можно делать 1 том на несколько дисков, можно несколько томов на диск. Группу вообще трогать не надо. Bacup данных перед операцией обязательно. Для scill можно поиграть с снапшетами. Гуглить и искать ссылку на статьи по LVM с смартфона не удобно. Единственная сложность, это понять формат команды, примеров маловато. lvresize --size 80G /dev/vg0/foo.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы