В этой статье мы поговорим об изменении размера дисков виртуальной машины KVM, рассмотрим используемые форматы виртуальных дисков. Покажем, как правильно увеличить диск виртуальной машины в гипервизоре KVM на Linux без потери данных, а также обсудим варианты уменьшения размеров дисков.
Для того, чтобы проводить работы с диском, виртуальная машина должна быть отключена, иначе мы не сможем что-либо сделать. Рассмотрим пример с увеличением диска размер которого изначально был 20Гб.
Чтобы посмотреть параметры диска виртуальной машины KVM, воспользуйтесь командой:
qemu-img info /путь_до_диска
Вывод команды будет примерно такой:
Мы видим, что у нас есть два поля которые указывают на размер, это virtual_size и disk_size:
И сразу о форматах. Я рекомендую при создании виртуальных машин на KVM использовать формат диска qcow2, а не raw. Чуть позже я объясню почему.
Следующим шагом расширим диск виртуальной машины, на 5Gb (для корректного расширения диска у виртуальной машины не должно быть снапшотов!).
# qemu-img resize /путь до диска +5G
Image resized.
Если сразу проверить вывод информации об образе диска, мы увидим, что он расширился:
# qemu-img info /путь_до_диска
image: /путь_до_диска_x000D_file format: qcow2_x000D_virtual size: 25G (26843545600 bytes)_x000D_disk size: 1.6G_x000D_cluster_size: 65536_x000D_Format specific information:_x000D_compat: 0.10_x000D_refcount bits: 16_x000D_
Часть работы мы сделали, но требуется и проведение работ со стороны виртуальной машины в гостевой ОС. Далее мы покажем, как увеличить размер диска в гостевых CentOS 7 и Windows Server 2012.
После расширения диска со стороны сервера, нужно запустить виртуальную машину и подключиться к ней по ssh. Все работы будут проводиться с помощью утилиты управления разделами жестких дисков fdisk .
После подключения к серверу, проверяем наличие нашего дополнительно подключенного места:
df –h
fdisk -l
На скриншоте видно, раздел /dev/vda2 имеет размер 20Gb, а доступное место на диске у нас больше.
Подправим этот момент и расширим раздел /dev/vda2 до максимального объема:
# fdisk /dev/vda
Welcome to fdisk (util-linux 2.23.2)._x000D_Changes will remain in memory only, until you decide to write them._x000D_Be careful before using the write command._x000D_Command (m for help): d_x000D_Partition number (1,2, default 2):_x000D_Partition 2 is deleted_x000D_Command (m for help): n_x000D_Partition type:_x000D_p primary (1 primary, 0 extended, 3 free)_x000D_e extended_x000D_Select (default p): p_x000D_Partition number (2-4, default 2):_x000D_First sector (1050624-52428799, default 1050624):_x000D_Using default value 1050624_x000D_Last sector, +sectors or +size{K,M,G} (1050624-52428799, default 52428799):_x000D_Using default value 52428799_x000D_ Partition 2 of type Linux and of size 24.5 GiB is set_x000D_Command (m for help): w_x000D_The partition table has been altered!_x000D_Calling ioctl() to re-read partition table._x000D_WARNING: Re-reading the partition table failed with error 16: Device or resource busy._x000D_The kernel still uses the old table. The new table will be used at_x000D_the next reboot or after you run partprobe(8) or kpartx(8)_x000D_Syncing disks._x000D_
После чего нам нужно сделать рестарт виртуальной машины и выполнить команду для применения расширения диска:
# xfs_growfs /dev/vda2
meta-data=/dev/vda2 isize=512 agcount=4, agsize=1277888 blks_x000D_= sectsz=512 attr=2, projid32bit=1_x000D_= crc=1 finobt=0 spinodes=0_x000D_data = bsize=4096 blocks=5111552, imaxpct=25_x000D_= sunit=0 swidth=0 blks_x000D_naming =version 2 bsize=4096 ascii-ci=0 ftype=1_x000D_log =internal bsize=4096 blocks=2560, version=2_x000D_= sectsz=512 sunit=0 blks, lazy-count=1_x000D_realtime =none extsz=4096 blocks=0, rtextents=0_x000D_data blocks changed from 5111552 to 6422272_x000D_
# df -h
Filesystem Size Used Avail Use% Mounted on_x000D_devtmpfs 485M 0 485M 0% /dev_x000D_tmpfs 496M 0 496M 0% /dev/shm_x000D_tmpfs 496M 6.6M 489M 2% /run_x000D_tmpfs 496M 0 496M 0% /sys/fs/cgroup_x000D_/dev/vda2 25G 1.3G 24G 6% /_x000D_/dev/vda1 488M 100M 353M 23% /boot_x000D_tmpfs 100M 0 100M 0% /run/user/0_x000D_
В итоге мы получили расширенный раздел /dev/vda2. Теперь по порядку, что именно мы сделали:
После перезагрузки проверим диск командой:
xfs_growfs /dev/vda2
В некоторых источниках для выполнения данной процедуры указывают команду:
resize2fs /dev/vda2
Но с файловой системой xfs это не работает!
Работы по расширению диска на виртуальной машине с ОС CentOS 7 закончены.
Подключаемся к виртуальной машине через rdp или VNC и выполняем работы по расширению диска.
Хотелось бы добавить, что перед процедурой расширения диска для виртуальной машины, я советую выполнять резервное копирование самого диска. Остановите виртуальную машину и скопируйте образ диска в директорию для бэкапа или в любую директорию, в которой есть свободное место . Если в ходе работ, что-то пойдет не так, вы всегда сможете вернуть образ виртуального диска из бэкапа.
В своей работе, ранее я довольно часто сталкивался с данным вопросом, но к сожалению, безболезненно уменьшить диск на виртуальной машине в KVM нельзя! Единственный приемлемый размер уменьшения размер диска виртуальной машины KVM на физическом хранилище – его сжатие через конвертацию.
В интернете фигурирует много статей, якобы благодаря которым вы можете уменьшить размер диска на виртуальной машине, но это не работает.
Я приведу несколько примеров, на которые я натыкался и которые лично мною были проверены.
На ряде ресурсов описаны действия, выполняемые с помощью утилиты qemu. В них предлагается уменьшить размер диска виртуальной машины с помощью команды:
qemu-img resize /путь_до_диска -5G
— уменьшаем диск на 5G
Или такой вариант с указанием конкретного размера:
qemu-img resize /путь_до_диска 25G
— указываем размер диска в 25G
Что происходит после выполнения данной команды? Запускаем сервер и конечно система не грузится:
Я пробовал сначала уменьшить раздел из-под системы с помощью утилиты fdisk, но в таком случае, система так же перестает загружаться, даже если вы пропустите шаг уменьшения диска с физического сервера и это логично. Раздел который мы уменьшаем, системный и соответственно ОС перестает загружаться, так как при уменьшении диска, информация по всей видимости уничтожается.
Уже не такой распространенный в инструкциях вариант — это уменьшение диска, с подменой на старый. То есть, вы создаете новую виртуальную машину с нужным вам размером диска. После чего, подменяете старый образ диска в новый образ и судя по описанию статей в разных источниках, это работает. Я так же сделал проверку и это сломало файловую систему, как и в первом варианте. Я приведу пример команды:
virt-resize /старый_образ_диска /новый_образ_диска
Приводились так же варианты, с конвертацией диска с формата raw в формат qcow2, НО я изначально создаю машины в данном формате и объясню почему.
В самом начале статьи, я упомянул про эти два формата.
raw – в переводе «сырой». Преимущество формата, максимальная производительность, универсальность формата. Минусов масса, основные это:
Qcow2 – это родной формат гипервизора QEMU, а так же QEMU-KVM. Это максимально удобный формат виртуального диска из всех поддерживаемых в KVM. Образ диска увеличивается по мере накопления данных на виртуальной машине, поддерживаются снапшоты.
Чем хорош формат qcow2? Вам в принципе не нужно уменьшать размер виртуального диска, так как диск занимает на сервере, ровно столько, сколько места там занято. Если же у вас данные на сервере постоянно перезаписываются и бывает такое, что диск «распух», его можно с легкостью сжать. Рассмотрим такой вариант. Я забью нулями некоторое дисковое пространство и после чего удалю файл:
dd if=/dev/zero of=/mytempfile
rm -rf /mytempfile
При проверке с сервера, образ диска сначала весил 2.4G после чего расширился до 5.9G:
# du -sh /путь_образа
2.4G *****
# du -sh /путь_образа
5.9G *****
То есть после удаления информации на виртуальной машине, диск обратно не сжался. Чтобы файл диска получил актуальный размер, я использую следующий метод:
Бэкапим файл диска, останавливаем виртуальную машину и после чего выполняем следующие действия:
qemu-img convert -O qcow2 /старый_образ /новый_образ
После чего можно проверить размеры двух дисков:
# du -sh /новый_диск
1.6G /****
# du -sh /старый_диск
5.8G /****
Как видим, размер сжатого диска 1.6G. Переименуем новый образ диска в нужный нам и запустим виртуальную машину:
# df -h
Filesystem Size Used Avail Use% Mounted on_x000D_devtmpfs 485M 0 485M 0% /dev_x000D_tmpfs 496M 0 496M 0% /dev/shm_x000D_tmpfs 496M 6.6M 489M 2% /run_x000D_tmpfs 496M 0 496M 0% /sys/fs/cgroup_x000D_/dev/vda2 25G 1.3G 24G 6% /_x000D_/dev/vda1 488M 100M 353M 23% /boot_x000D_tmpfs 100M 0 100M 0% /run/user/0_x000D_
Контрольная проверка с сервера:
# du -sh /образ_диска
1.6G /****
Способ рабочий. За все время его использования, ни разу файловая система на виртуальной машине не умирала. Но настоятельно рекомендую перед подобными работами, создавать копию диска, если не хотите потерять данные.
Это все, что я хотел в данной статье рассказать. Если у кого-то из посетителей сайта есть рабочий способ по уменьшению диска на KVM, именно уменьшения (не сжатие) и именно рабочий, предлагайте свои варианты и я обязательно их протестирую.
Некоторые пользователи, экспериментируя с конфигурацией системы в окне msconfig могут столкнуться с ситуацией, когда после…
На сайте не раз публиковались обзоры программ, предназначенных для очистки или настройки последних версий Windows.…
При установке некоторых обновлений Windows 11, имеющих в названии «Предварительный просмотр накопительного обновления», многие пользователи…
Некоторые пользователи Windows 11, 10 и предыдущих версий системы могут столкнуться с ситуацией, когда исполняемые…
При установке обновлений Windows 11/10 некоторые пользователи могут столкнуться с ошибкой с кодом 0x800705b4 и…
Пользователи Windows 11 могут столкнуться с сообщением «Обслуживание вашей версии Windows окончено» (Your version of…