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

0

У меня есть несколько виртуальных машин, настроенных в Hyper-V с использованием Ubuntu 17.10, и я обнаружил, что они настроены неправильно, то есть они были настроены с использованием размера блока по умолчанию для файлов VHDX и используют гораздо больше места, чем им требуется, и иметь более высокий максимальный размер VHDHX, чем хотелось бы. В одном примере у меня есть диск, который ~ 50 ГБ, но содержит только 15 ГБ данных.

Я пытаюсь создать новые файлы VHDHX с использованием более разумных настроек и клонировать все, что находится на дисках, на вновь созданные диски, но у меня возникают некоторые проблемы. Существующие диски отображаются как имеющие 2 раздела, как показано здесь, а затем в более крупном разделе есть 2 логических тома - один для данных и один для раздела подкачки.

информация о диске

Диск, который я собираюсь клонировать, будет VHDHX-файлом объемом 30 ГБ, и мне нужен совет, как лучше всего это сделать. Сначала я попытался использовать dd и столкнулся с ошибками из-за того, что источник больше целевого. Затем я попытался с помощью gparted изменить размер диска большего размера, но не смог из-за того, что gparted увидел, что в разделе LVM нет свободного места. Я также попытался уменьшить размер раздела LVM и затем использовать gparted, но также столкнулся с ошибками. Мне удалось успешно уменьшить размер раздела LVM, а затем использовать dd для клонирования тома LVM на другой том LVM, созданный мной на новом диске, хотя я обеспокоен тем, что при использовании lvreduce для изменения размера исходного раздела я может обрезать данные, если они не являются непрерывными и распределяются по диску.

Я довольно новичок в этом, поэтому не знаю, что я могу пропустить, и, возможно, мне придется учитывать это при выполнении, но по сути я ищу некоторые рекомендации о необходимых шагах, чтобы убедиться, что новый диск содержит все, что включено старый и я могу с него загрузиться. Например, если я использую lvreduce, чтобы изменить размер большого тома до нужного мне размера, как мне убедиться, что я ничего не потерял при этом? Будет ли это даже правильный подход?

Пока что мой план:

  1. Создайте новую виртуальную машину Ubuntu для использования в этом процессе.
  2. Прикрепите оригинальный диск + новый диск, который будет использоваться для копирования данных.
  3. Сократите логический том на исходном диске.
  4. Создайте те же разделы и тома на новом диске.
  5. Используйте dd для копирования логических томов на эквивалентные логические тома на новом диске.

Есть ли лучший способ сделать это, или что-то, что я пропустил? / Ловушки, чтобы знать?

PaulM
источник

Ответы:

2

Если кто-то сталкивается с этим и имеет ту же проблему, решение, которое работало для меня, в основном, как описано выше. В приведенном ниже примере мой исходный диск имеет 2 раздела, загрузочный раздел и раздел данных с 2 логическими томами, а целевой диск начинается с загрузочного раздела и раздела данных без логических томов.

  1. Настройте виртуальную машину с обоими подключенными дисками и загрузите ее, используя Linux Live CD.
  2. Запустите проверку файловой системы на исходном диске с помощью sudo e2fsck -f /dev/mapper/ubuntu--1704--base--vg-root- имя тома можно найти в выходных данныхsudo fdisk -l
  3. Сократите файловую систему до минимального размера, прежде чем мы изменим размер логического тома. Это можно сделать с помощьюsudo resize2fs -M /dev/mapper/ubuntu--1704--base--vg-root
  4. Измените размер логического тома до желаемого размера, в данном случае 28,5 ГиБ: sudo lvreduce --resizefs -L 28.5G /dev/mapper/ubuntu--1704--base--vg-root
  5. Переименуйте группу томов на существующем диске, так как мы будем использовать то же имя на новом диске: sudo vgrename ubuntu-1704-base-vg ubuntu-1704-base-vg-2
  6. Создайте новый физический том: sudo pvcreate /dev/sda2
  7. Создайте новую группу томов, используя имя, взятое из исходной группы томов на исходном диске: sudo vgcreate ubuntu-1704-base-vg /dev/sda2
  8. Создайте логические тома на новом диске, чтобы они соответствовали тем на старом диске. В моем случае у меня был один для обмена и один для данных. Я взял размер логических экстентов, выделенных каждому, из свойства 'Current LE', о котором сообщает, sudo lvdisplayа затем использовал их в качестве входных данных для команды lvcreate, например:
    • sudo lvcreate --extents 7296 --stripes 1 --name root ubuntu-1704-base-vg
    • sudo lvcreate --extents 255 --stripes 1 --name swap_1 ubuntu-1704-base-vg
  9. Скопируйте данные со старого диска на новый диск. Я сделал это, скопировав загрузочный раздел с исходного диска поверх загрузочного раздела на новом диске, а затем скопировал логический том для диска с данными на новый логический том на целевом диске. например:
    • sudo dd if=/dev/sdb1 of=/dev/sda1 bs=64M status=progress
    • sudo dd if=/dev/mapper/ubuntu--1704--base--vg--2-root of=/dev/mapper/ubuntu--1704--base--vg-root bs=64M status=progress

Наконец, запустите проверку файловой системы, чтобы убедиться, что с дисками все в порядке. Могут быть ошибки, которые необходимо исправить, хотя после этого я смог успешно загрузиться с скопированного диска, и содержимое оказалось таким, как ожидалось. sudo e2fsck -f /dev/mapper/ubuntu--1704--base--vg-root

Использованные ссылки: https://blog.shadypixel.com/how-to-shrink-an-lvm-volume-safely/ https://docs.microsoft.com/en-us/azure/virtual-machines/linux/configure. -lvm

PaulM
источник
0

Если я понимаю, что вам на самом деле нужно добиться, это скопировать образ виртуальной машины в меньший по размеру, но все же использовать его в Hyper-V (поэтому используйте формат VHDX).

В таком случае я не вижу смысла проходить новую ВМ.

Образы виртуальных дисков могут быть созданы с фиксированным или динамическим размером. Когда используется фиксированный размер, при создании образа выделяется все пространство, а образ виртуальной машины фактически использует окончательный размер. При использовании динамического формата занимаемая площадь на диске увеличивается только с фактическим использованием диска в виртуальной машине.

Поэтому сначала вы должны проверить, какой формат на самом деле используется: ваш файл изображения может отображать 50 ГБ, хотя на самом деле используется меньше (редкие файлы, если они поддерживаются вашей ОС, могут вызвать это).

В случае, если ваше изображение является фиксированным, вам нужно найти инструмент конвертера (например, StarWind V2V Converter или другой), чтобы создать новый динамический образ из вашего фиксированного, без необходимости проходить LVM или вносить изменения в разделы.

Примечание. Для этого может потребоваться шаг, чтобы сначала очистить все неиспользуемое пространство в каждой файловой системе виртуальной машины Ubuntu (dd if = / dev / zero of = / zerofile; rm -f / zerofile).

tonioc
источник
Спасибо за ответы. Причина появления новой виртуальной машины заключается в том, что, насколько я понимаю, dd не следует использовать, когда диск смонтирован, поэтому для его копирования достаточно просто подключить его к новой виртуальной машине. VHDX является динамическим, но проблема, с которой я сталкиваюсь, касается динамических дисков. Максимальный размер файла в настоящее время составляет 127 ГБ, но размер файла вырос до 50 ГБ, несмотря на использование только 15 ГБ. Здесь немного об этом сказано : bit.ly/2gKWtVn Для сравнения, установка базовой ОС составляет ~ 4 ГБ с правильным размером блока и ~ 8 ГБ с неправильным размером блока.
PaulM
Я все еще думаю, что вы должны с нетерпением ждать инструментов преобразования образов виртуальных машин ... Я не очень осведомлен о формате VHDX, но это то, что я использую с qemu-img для уменьшения изображений qcow2.
Тониок