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

Это работа не для grep, а для лучшего инструмента, такого как awk.

Простой обходной путь — использовать gnu awk с настраиваемым разделителем записей RS, например Section.

Использование слова «Раздел» для разделения строк, все, что находится между словами Section 1и Section 2, будет рассматриваться как одна строка для awk.
То же для Раздела 2 -Раздела 3 и т. д.

Теперь вам нужно только напечатать правильную «строку» = «строку», содержащую interesting-pattern.

$ awk -v RS="# Section " '/interesting-pattern/{print RT $0}' file1
# Section 2
###############
some text
more text
some more text
interesting-pattern
some text
more text
some more text    
###############

Поскольку gnu awk может принимать регулярные выражения в RS (Разделитель записей ), вы также можете применить что-то более сложное в RS, например:

$ awk -v RS="###############\n# Section " '/interesting-pattern/{print RT $0}'
###############
# Section 2
###############
some text
more text
some more text
interesting-pattern
some text
more text
some more text    

PS:{print RTуказывает awk напечатать текущий разделитель записей

0
02.07.2018, 13:34
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. Создайте логические тома на новом диске в соответствии с теми на старом диске. В моем случае у меня был один для обмена и один для данных. Я взял размер логических экстентов, выделенных каждому из свойства «Текущий 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

3
28.01.2020, 02:31

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

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

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

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

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

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

0
28.01.2020, 02:31

Теги

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