База знаний
FirstDedic
Как изменить размер образа диска qcow2 в Proxmox VE
В статье мы рассмотрим вариант уменьшения размера образа диска в формате Qcow2 для виртуальной машины на Proxmox VE.
На протяжении всей статьи используются такие понятия как «диск», «образ диска», «виртуальный диск». Под этими понятиями мы всегда понимаем диск нашей виртуальной машины.
Все консольные команды, представленные в статье, требуется выполнять из-под пользователя root или иного пользователя с аналогичными привилегиями.
- Как происходит фактическое потребление пространства
- Создание копии виртуальной машины
- Загрузка виртуальной машины в SystemRescue
- Уменьшение размера файловой системы
- Уменьшение размера диска виртуальной машины
- Подключение нового диска к виртуальной машине
- Запуск виртуальной машины с новым диском
Как происходит фактическое потребление пространства
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. После запускаем виртуальную машину.
Выполнив все шаги последовательно, мы произвели уменьшение размера образа диска. На этом работы можно считать оконченными.
База знаний