Перейти к основному содержанию

База знаний
FirstDedic

Как изменить размер образа диска qcow2 в Proxmox VE

В статье мы рассмотрим вариант уменьшения размера образа диска в формате Qcow2 для виртуальной машины на Proxmox VE.

На протяжении всей статьи используются такие понятия как «диск», «образ диска», «виртуальный диск». Под этими понятиями мы всегда понимаем диск нашей виртуальной машины.

ВНИМАНИЕ! Процедура является потенциально опасной и может привести к потере данных. Проверяйте каждое выполняемое действие и соблюдайте порядок, описанный в статье.

Все консольные команды, представленные в статье, требуется выполнять из-под пользователя root или иного пользователя с аналогичными привилегиями.

Как происходит фактическое потребление пространства

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

Давайте рассмотрим это на примере (вы можете этого не делать).

У нас есть виртуальный диск объемом 20 Гб. Чтобы проверить его размер, используем утилиту qemu-img и её команду info:

qemu-img info <device_path>

Где <device_path> – путь до образа диска ВМ.

Вывод команды будет примерно такой:

Проверка размера виртуального диска

В выводе нас интересуют два параметра:

virtual size – заданный размер виртуального диска,

disk size – фактически занимаемое пространство.

Как видно из вывода, размер нашего образа составляет 20 Гб и при этом фактически он занимает чуть больше 4 Мб.

Теперь, чтобы проверить, что место выделяется только по факту потребления, создадим на виртуальной машине файл размером 3 Гб:  

dd if=/dev/zero of=fakefile bs=1G count=3

И проверим, что фактический размер диска после этого увеличился уже знакомой командой:

qemu-img info <device_path>

Где <device_path> – путь до образа диска ВМ.

Вывод команды будет примерно такой:

Проверка увеличение размера диска

Теперь, если мы удалим созданный ранее файл и снова выполним команду qemu-img info <device_path>, то увидим, что фактический размер диска (disk size) остался прежним. При этом, если смотреть объем занимаемого пространства в гостевой системе, то будет видно что потребление места уменьшилось. Это хорошо видно на выводе команды df-h из гостевой машины:

Проверка увеличение размера диска

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

Создание копии виртуальной машины

Чтобы избежать возможной потери файлов на боевой виртуальной машине, мы создадим копию виртуальной машины и на ней произведем все необходимые манипуляции с диском.

Создать копию виртуальной машины можно через консоль SSH или через веб-интерфейс Proxmox VE — выберите способ, который вам удобнее. 

ВАЖНО! Все работы следует производить на выключенной виртуальной машине.

Через консоль SSH

Чтобы создать копию виртуальной машины через консоль SSH, воспользуемся следующей командой:

qm clone <source_vmid> <new_vmid> --name <new_vm_name>

Где:

  • <source_vmid> – VMID исходной виртуальной машины, которую вы хотите клонировать;
  • <new_vmid> – VMID для новой клонированной виртуальной машины;
  • <new_vm_name> – имя для новой клонированной виртуальной машины (опционально).

Пример команды:

 qm clone 333 444 --name resizevmcopy 

Через веб-интерфейс Proxmox VE

Создать копию виртуальной машины можно и через веб-интерфейс Proxmox VE:

Шаг 1. Выбираем виртуальную машину, для которой будем создавать копию. Проверяем, что виртуальная машина выключена.

Проверка размера виртуального диска

Шаг 2. Открываем диалоговое окно создания копии виртуальной машины.

Проверка размера виртуального диска

Шаг 3. В диалоговом окне указываем необходимые параметры и запускаем процедуру создания виртуальной машины, где:

  • Target node – узел кластера Proxmox, на котором будет создана виртуальная машина (если узлов больше одного);
  • VM ID – VMID для новой виртуальной машины;
  • Name – имя для новой виртуальной машины;
  • Target Storage – хранилище, на котором будет хранится образ диска;
  • Format – формат хранения образа. В нашем случае Qcow2.
Проверка размера виртуального диска

Когда процедура создания виртуальной машины будет завершена, мы получим точную копию боевой машины.

Все дальнейшие действия мы будем производить на этой виртуальной машине, чтобы не повредить данные на исходном сервере.

Теперь можно переходить к следующему пункту.

Загрузка виртуальной машины в SystemRescue

На следующем этапе нужно загрузить виртуальную машину в SystemRescue — при использовании одноименного загрузочного образа.

ВАЖНО! Все работы следует производить на выключенной виртуальной машине.

Подразумевается, что на сервер уже добавлен образ SystemRescueCD.

Через консоль SSH

Чтобы добавить новое устройство CD/DVD-дисковода к виртуальной машине через консоль SSH, воспользуемся следующей командой:

qm set <VMID> --cdrom <storage>:iso/<iso_file>

Где:

  • <VMID> – идентификатор виртуальной машины, к которой хотим добавить CD/DVD-дисковод;
  • <storage> – имя хранилища, где находится ISO-образ;
  • <iso_file> – имя файла ISO-образа.

Пример команды: 

qm set 444 --cdrom local:iso/systemrescue-10.02-amd64.iso

Далее требуется скорректировать приоритет загрузки, чтобы добавленный образ стоял первым в списке. Для этого выполняем команду:

qm set <VMID> --bootorder <device1>,<device2>,<device3>

Где <device1>, <device2>, <device3> и т. д. — это устройства ide0, sata0, virtio0, net0 и другие в порядке, в котором их загрузить.

Пример команды: 

qm set 444 --bootorder ide2,scsi0,net0

Теперь запускаем виртуальную машину командой:

qm start <VMID>

Где <VMID> – идентификатор виртуальной машины, которую вы хотите запустить.

Через веб-интерфейс Proxmox VE

Как и в предыдущем пункте, описанные действия можно выполнить через веб-интерфейс Proxmox VE:

Шаг 1. Выбираем тестовую виртуальную машину. Проверяем, что виртуальная машина выключена.

Проверка размера виртуального диска

Шаг 2. Переходим в раздел «Hardware». Нажимаем кнопку «Add» и выбираем пункт «CD/DVD Drive».

Проверка размера виртуального диска

Шаг 3. В открывшемся окне выбираем хранилище, нужный образ и нажимаем кнопку «Add».

Проверка размера виртуального диска

Шаг 4. Теперь переходим в раздел «Options». Выбираем пункт «Boot Order» и нажимаем кнопку «Edit».

Проверка размера виртуального диска

Шаг 5. В открывшемся окне меняем порядок загрузки, чтобы добавленный образ «SystemRescue» оказался первым в списке, и нажимаем кнопку «OK»

Проверка размера виртуального диска

Готово. Образ добавлен, порядок загрузки изменен. Можно переходить с к следующему пункту.

Уменьшение размера файловой системы 

Чтобы избежать потери/повреждения данных, требуется выделить пространство, которое мы хотим забрать в отдельный раздел. Для этого мы будем использовать утилиту GParted, которая включена в состав SystemRescue. Проводить работы мы будем через noVNC-консоль в веб-интерфейсе Proxmox VE.

После запуска сервера и SystemRescue нужно запустить графический интерфейс. Сделать это можно с помощью команды startx.

Шаг 1. Когда графический интерфейс будет загружен, нужно запустить утилиту GParted. Для этого нажмите на иконку в горизонтальном меню с одноименным названием.

Проверка размера виртуального диска

В главном окне утилиты мы видим разбивку разделов на диске. Желтым цветом в разделе помечено занятое пространство, белым – свободное. Ниже представлен список всех разделов диска.

Проверка размера виртуального диска

Шаг 2.Выбираем в списке раздел, который будем уменьшать, и нажимаем кнопку «Resize/Move». У вас разделы могут иметь другие имена.

Проверка размера виртуального диска

Шаг 3. В открывшемся диалоговом окне указываем новый размер для выбранного раздела и нажимаем кнопку «Resize/Move»

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

Шаг 4. Для применения выполненных изменений нажимаем кнопку «Apply All Operations». Утилита дополнительно запросит подтверждение операции, и после процесс изменения размера будет запущен.

Проверка размера виртуального диска

По завершению процедуры размер раздела будет изменен и появится освобожденное пространство. Это хорошо видно на скриншоте ниже. 

Проверка размера виртуального диска

Теперь можно выключить сервер, отключить образ SystemRescue и переходить к следующему пункту.

Уменьшение размера диска виртуальной машины

Этот пункт мы будем выполнять в консоли SSH. 

ВАЖНО! Все работы следует производить на выключенной виртуальной машине.

Для уменьшения размера диска виртуальной машины используем утилиту qemu-img и команду resize:

qemu-img resize <device_path> --shrink -<size>G

Где:

  • <device_path> – путь до образа диска ВМ;
  • <size> – количество Гб, на которое нужно уменьшить диск. Значение обязательно указывается со знаком «-», как в команде.

Пример команды: 

qemu-img resize /var/lib/vz/images/444/vm-444-disk-0.qcow2 --shrink -10G

В результате выполнения этой команды мы уменьшили размер образа виртуальной машины.

Проверить, что все прошло успешно, можно той же утилитой qemu-img с помощью команды info

qemu-img info <device_path>

Где <device_path> – путь до образа диска ВМ.

Вывод команды будет примерно такой:

Проверка размера виртуального диска

Как видим, размер диска стал меньше и уменьшилось фактически занятое пространство.

Подключение нового диска к виртуальной машине

После того как мы уменьшили наш новый диск, его нужно подключить к виртуальному серверу.

ВАЖНО! Все работы следует производить на выключенной виртуальной машине.

Для этого мы сначала меняем имя старого диска, например, с помощью команды mv:

mv <old_name> <new_name>

Где:

  • <old_name> – путь и имя старого диска;
  • <new_name> – путь и имя нового диска.

Пример команды: 

mv /var/lib/vz/images/333/vm-333-disk-0.qcow2 /var/lib/vz/images/333/vm-333-disk-0.qcow2.old

Затем нужно переместить новый диск в директорию диска нашей виртуальной машины и изменить его имя. Сделаем все это также командой mv.

Пример команды: 

mv /var/lib/vz/images/444/vm-444-disk-0.qcow2 /var/lib/vz/images/333/vm-333-disk-0.qcow2

В результате содержимое директории станет примерно таким:

Проверка размера виртуального диска

Теперь в директории два образа — старый и новый. И при запуске виртуальная машина будет использовать добавленный нами диск.

Можем удалить копию виртуальной машины, она более не требуется. Её диск при этом остается в сохранности.

Запуск виртуальной машины с новым диском

При попытке запуска виртуальной машины мы можем столкнуться с тем, что она не может загрузиться с нового диска. Это может произойти по причине того, что размер диска меньше, чем указано в основном заголовке диска.

Чтобы проверить это, запускаем виртуальную машину в SystemRescue и вводим команду:

gdisk -l <name_disk>

Где <name_disk> – имя нашего виртуального диска.

Пример команды: 

gdisk -l /dev/sda

В выводе команды мы увидим в том числе такое предупреждение:

Проверка размера виртуального диска

В этом случае выполняем команду:

gdisk <name_disk>

Где <name_disk> – имя нашего виртуального диска.

Пример команды: 

gdisk /dev/sda

И поочередно, когда система будет запрашивать ввод команд – вводим v, x, e, w, y.

Проверка размера виртуального диска

По завершению мы можем выйти из режима SystemRescue, выключить виртуальную машину и отключить образ SystemRescue. После запускаем виртуальную машину.

Выполнив все шаги последовательно, мы произвели уменьшение размера образа диска. На этом работы можно считать оконченными.


База знаний

Telegram-канал FirstDEDIC

Узнавайте новости первыми

подписаться

Сообщить об ошибке

Выделенная ошибка:

Опишите найденную ошибку