Блог → Расширяем диск на виртуальной машине под управлением CentOS
Увеличение дискового пространства на виртуальном сервере оказалось достаточно нетривиальной задачей, поэтому я написал инструкцию для тех, кто сталкивается с этим впервые. В моём случае применяется родительский сервер под управлением Proxmox, на гостевой машине установлен CentOS 7, используется формат образа qcow2. Всё, что описано далее, относится именно к такой конфигурации.
Подготовка
Первым делом необходимо выключить виртуальную машину и определить, где располагается её образ. В моём случае это файл /var/lib/vz/103/vm-103-disk-0.qcow2. Обязательно делаем его резервную копию.
Расширяем образ
Переходим в каталог к нему и с помощью утилиты qemu-img считываем информацию образа.
# qemu-img info vm-103-disk-0.qcow2
Мы добавим к нему ещё 50 Гб. В этом нам поможет всё та же утилита – выполняем теперь команду resize.
# qemu-img resize vm-103-disk-0.qcow2 +50G
Мы расширили сам образ, но воспользоваться новым местом пока не получится: сама ОС на гостевой машине о произошедшем ещё почти ничего не знает.
Что происходит на виртуальной машине
Теперь мы включаем нашу «виртуалку» и подключаемся к ней по SSH или VNC. Выполняем команду lsblk и видим, что изменения хотя и не применены так, как нам надо, но не прошли незамеченными.
Диск /dev/sda теперь имеет объём 301 Гб. Но файлы мы храним в логическом томе centos-root, который в свою очередь размещён в разделе sda2. Соответственно, нам необходимо сначала расширить раздел sda2, а затем и LVM-раздел centos-root.
Увеличиваем раздел sda2
Время прибегнуть к утилите fdisk и сначала удалить раздел sda2, а затем его пересоздать, но уже в новом объёме. Не беспокойтесь: ваши данные при этом не потеряются.
# fdisk /dev/sda
Утилита сразу предупреждает о том, что все изменения будут применяться условно, а на практике же запишутся только после того, как мы дадим соответствующую команду. Теоретически это должно снизить число ошибок, но вспоминая аксиому Коула, я бы не был в этом так уверен.
Начнём с того, что удалим раздел 2 командой d.
Создаём его заново командой n, используя значения, предлагаемые по умолчанию:
Сохраняем изменения командой w.
Как видно, fdisk сообщил о невозможности перезагрузить таблицу разделов – это нормально. Перезагрузим весь сервер и снова поглядим на вывод lsblk.
Раздел sda2 теперь размером в 300 Гб, как мы рассчитывали Select an Image
Увеличиваем LVM-раздел
На своих серверах я не использую раздел для домашнего каталога, хотя инсталлятор CentOS и предлагает его по умолчанию. Вся информация у меня хранится, как видно, в centos-root. Если у вас разбивка отличается, не забывайте делать на это поправку.
Воспользуемся утилитой lvextend. Если мы хотим, чтобы centos-root занял 100% свободного места, команда должна выглядеть так:
# lvextend -l +100%FREE /dev/mapper/centos-root
И финальный аккорд:
# xfs_growfs /dev/mapper/centos-root
После этого снова запускаем lsblk и видим, что centos-root занял всё доступное место. Диск объёмом в 301 Гб распределён следующим образом: за нашим основным томом 292,1 Гб, ещё 7,9 Гб за разделом centos-swap, ещё 1 Гб «крадёт» системный /boot.