
Иногда появляется необходимость расширить или добавить дисковое пространство для вашей виртуальной машины, чтобы удовлетворить растущие требования к программному обеспечению. KVM использует QEMU, который поддерживает несколько типов изображений, среди которых raw, cow, qcow, qcow2, vmdk, vdi и т.д.
Я использую наиболее гибкий тип qcow2, который поддерживает копирование при записи, шифрование, сжатие и снимки виртуальной машины
Шаг 1: выключить виртуальную машину
Прежде чем вы сможете расширить виртуальный диск вашей гостевой машины, вы должны сначала выключить его.
$ sudo virsh list
ID Имя Состояние
----------------------------
23 DB_1 работает
24 DB_2 работает
30 WEB_1 работает
34 CentOS_9 работает
Если ваш гостевой компьютер находится в рабочем состоянии, выключите его, используя его идентификатор или имя.
$ sudo virsh shutdown CentOS_9
Domain 'CentOS_9' is being shutdown
Прежде чем приступить к управлению дисками, убедитесь, что он действительно отключен.
$ sudo virsh list
ID Имя Состояние
----------------------------
23 DB_1 работает
24 DB_2 работает
30 WEB_1 работает
Шаг 2: Расширение диска гостевой ОС
Найдите путь к вашей виртуальной ОС
$ sudo virsh domblklist CentOS_9
Назначение Источник
-------------------------------------------
vda /home/images/CentOS_9.qcow2
Вы можете получить ту же информацию из GUI Virtual Machine Manager
$ sudo qemu-img info /home/images/CentOS_9.qcow2
image: /home/images/CentOS_9.qcow2
file format: qcow2
virtual size: 50 GiB (53695545344 bytes)
disk size: 50 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: true
refcount bits: 16
corrupt: false
extended l2: false
Шаг 3: Расширение гостевой виртуальной машины
Так как мы знаем где находится наш диск нашей виртуальной машины, давайте расширим его до необходимого размера.
$ sudo qemu-img resize /home/images/CentOS_9.qcow2 +30G
Image resized.
Вы также можете изменить размер с помощью команды virsh. Это требует, чтобы домен был запущен.
$ sudo virsh start CentOS_9
Domain 'CentOS_9' started
Вносим изменения в размер
$ sudo virsh blockresize CentOS_9 /home/images/CentOS_9.qcow2 80G
Размер блочного устройства «/home/images/CentOS_9.qcow2» изменен.
Подтвердите размер диска с помощью команды fdisk.
$ sudo fdisk -l /home/images/CentOS_9.qcow2
Disk /home/images/CentOS_9.qcow2: 50,01 GiB, 53695545344 bytes, 104874112 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Шаг 4: Расширяем раздел VM
Это очень важный пункт. Обязательно проверьте вот что: дело в том, что диск разделенный на 4 раздела более не сможет быть расширен. Проверить это легко. Подключаемся к серверу CentOS и вводим команду
$ fdisk -l
Диск /dev/vda: 80 GiB, 53687091200 байт, 104857600 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x4263309d
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/vda1 * 2048 2099199 2097152 1G 83 Linux
/dev/vda2 2099200 104857599 102758400 49G 8e Linux LVM
Если вывод команды у вас выглядит так, как показано выше – все хорошо. У вас пока только два раздела – /dev/vda1 и /dev/vda2. Можно создать еще два.
Шаг 5: Создаем новый раздел
Сервер видит 80 ГБ места на диске. Начинаем создавать новый раздел командой fdisk /dev/vda
. После запроса ввода команды, указываем n
, чтобы создать новую партицию:
$ fdisk /dev/sda
The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Создаем новый раздел:
Command (m for help): n
Первичный (primary):
: p
Номер раздела оставляем тот, который предлагает система (просто нажимаем Enter).
Первый и последний сектора также оставляем по умолчанию для использования всего дискового пространства (еще два раза Enter).
Задаем тип раздела:
: t
Выбираем номер раздела (в моем примере создавался раздел 3):
: 3
Командой L можно посмотреть список всех типов, но нас интересует конкретный — LVM (8e):
: 8e
Сохраняем изменения:
: w
Проинформируем систему, что в таблице разделов произошли изменения:
$ partprobe
Успешным результатом этого шага будет вот такой вывод команды fdisk
, где мы видим новую партицию:
fdisk -l
Диск /dev/vda: 80 GiB, 53687091200 байт, 104857600 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x4263309d
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/vda1 * 2048 2099199 2097152 1G 83 Linux
/dev/vda2 2099200 104857599 102758400 49G 8e Linux LVM
/dev/vda3 104857600 167772159 62914560 30G 8e Linux LVM
Шаг6: Расширяем логический раздел LV с новым разделом
Теперь наша задача следующая: создаем физический том (PV) из нового раздела, расширяем группу томов (VG) из под нового объема PV, а затем уже расширяем логический раздел LV. Звучит сложно, но поверьте, это легко!
Итак, по шагам: создаем новый физический том (PV). Важно: у вас может быть не /dev/vda3, а другая, 4, например, или вообще /dev/vdb3! Не забудьте заменять в командах разделы, согласно вашей инсталляции.
$ pvcreate /dev/sda3
Physical volume "/dev/sda3" successfully created
Отлично. Теперь находим группу томов (VG, Volume Group). А точнее, ее название. Делается это командой vgdisplay
:
$ vgdisplay
--- Volume group ---
VG Name cs
...
Найдено. Наша VG называется cs. Теперь мы ее расширим из пространства ранее созданного PV командой vgextend:
$ vgextend cs /dev/vda3
Volume group "cs" successfully extended
Теперь расширяем LV из VG. Найдем название нашей LV, введя команду lvs
:
$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root cs -wi-ao---- <44,00g
swap cs -wi-ao---- 5,00g
cs – найдено. Расширяем эту LV, указывая до нее путь командой lvextend /dev/cs/root /dev/vda3
:
$ lvextend /dev/cs/root /dev/vda3
Extending logical volume root to 30 GB
Logical volume root successfully resized
Почти у финиша. Единственное, что осталось, это изменить размер файловой системы в VG, чтобы мы могли использовать новое пространство. Используем команду resize2fs:
$ resize2fs /dev/cs/root
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/cs/root is mounted on /; on-line resizing required
Performing an on-line resize of /dev/cs/root to 2457600 (4k) blocks.
The filesystem on /dev/cs/root is now 2457600 blocks long.
Готово.
Проверяет доступное место командой df -h
Получаете ошибку в resize2fs: Couldn’t find valid filesystem superblock
Это значит, что у вас используется файловая система формата XFS, вместо ext2/ext3. Чтобы решить эту ошибку, дайте команду xfs_growfs
:
$ xfs_growfs /dev/cs/root