KVM: увеличить/уменьшить размер диска виртуальной машины

Thank you for reading this post, don't forget to subscribe!

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

Расширение виртуального диска со стороны KVM

Для того, что­бы про­во­дить рабо­ты с дис­ком, вир­ту­аль­ная маши­на долж­на быть отклю­че­на, ина­че мы не смо­жем что-либо сде­лать. Рас­смот­рим при­мер с уве­ли­че­ни­ем дис­ка раз­мер кото­ро­го изна­чаль­но был 20Гб.

Что­бы посмот­реть пара­мет­ры дис­ка вир­ту­аль­ной маши­ны KVM, вос­поль­зуй­тесь командой:

qemu-img info /путь_до_диска

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

Мы видим, что у нас есть два поля кото­рые ука­зы­ва­ют на раз­мер, это virtual_size и disk_size:

  • virtual_size – раз­мер вир­ту­аль­но­го дис­ка, ука­зан­ный при созда­нии или рас­ши­ре­нии дис­ка (в этом при­ме­ре мак­си­маль­ный раз­мер дис­ка – 20 Гб);
  • disk_size — раз­мер фай­ла дис­ка в теку­щий момент, т.е. сколь­ко сей­час зани­ма­ет образ дис­ка места на физи­че­ском сер­ве­ре (отно­сит­ся толь­ко к фор­ма­ту qcow). В нашем при­мер вир­ту­аль­ный диск зани­ма­ет все­го 1,6 Гб на хранилище.

И сра­зу о фор­ма­тах. Я реко­мен­дую при созда­нии вир­ту­аль­ных машин на KVM исполь­зо­вать фор­мат дис­ка qcow2, а не raw.

Сле­ду­ю­щим шагом рас­ши­рим диск вир­ту­аль­ной маши­ны, на 5Gb (для кор­рект­но­го рас­ши­ре­ния дис­ка у вир­ту­аль­ной маши­ны не долж­но быть снапшотов!).
# qemu-img resize /путь до диска +5G

Если сра­зу про­ве­рить вывод инфор­ма­ции об обра­зе дис­ка, мы уви­дим, что он расширился:

# qemu-img info /путь_до_диска

[codesyntax lang="php"]

[/codesyntax]

Часть рабо­ты мы сде­ла­ли, но тре­бу­ет­ся и про­ве­де­ние работ со сто­ро­ны вир­ту­аль­ной маши­ны в госте­вой ОС. Далее мы пока­жем, как уве­ли­чить раз­мер дис­ка в CentOS 7

Если вы пла­ни­ру­е­те доба­вить допол­ни­тель­ный вир­ту­аль­ный диск для ВМ на KVM гипер­ви­зо­ре, исполь­зу­ют­ся qemu-img и virsh.

Расширение раздела в виртуальной машине с Linux CentOS

После рас­ши­ре­ния дис­ка со сто­ро­ны сер­ве­ра, нуж­но запу­стить вир­ту­аль­ную маши­ну и под­клю­чить­ся к ней по ssh. Все рабо­ты будут про­во­дить­ся с помо­щью ути­ли­ты управ­ле­ния раз­де­ла­ми жест­ких дис­ков fdisk.

После под­клю­че­ния к сер­ве­ру, про­ве­ря­ем нали­чие наше­го допол­ни­тель­но под­клю­чен­но­го места:

df –h
fdisk -l

На скрин­шо­те вид­но, раз­дел /dev/vda2 име­ет раз­мер 20Gb, а доступ­ное место на дис­ке у нас больше.

Под­пра­вим этот момент и рас­ши­рим раз­дел /dev/vda2 до мак­си­маль­но­го объема:

# fdisk /dev/vda

[codesyntax lang="php"]

[/codesyntax]

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

# xfs_growfs /dev/vda2

[codesyntax lang="php"]

[/codesyntax]

# df -h

В ито­ге мы полу­чи­ли рас­ши­рен­ный раз­дел /dev/vda2. Теперь по поряд­ку, что имен­но мы сделали:

  • fdisk /dev/vda — запу­сти­ли ути­ли­ту fdisk под­клю­чив­шись к раз­де­лу /dev/vda
  • /d — уда­ля­ем раз­дел, по умол­ча­нию это раз­дел 2 кото­рый нам и нужен, поэто­му в сле­ду­ю­щем пунк­те жмем про­сто Enter
  • /n – созда­ем новый раз­дел, в сле­ду­ю­щем пунк­те так же про­сто жмем Enter или вво­дим p, далее Enter так как созда­ва­е­мый раз­дел по умол­ча­нию будет 2.
  • При ука­за­нии пер­во­го и послед­не­го сек­то­ра так же жмем про­сто Enter, если мы хотим рас­ши­рить раз­дел до мак­си­му­ма, если вы хоти­те ука­зать кон­крет­ный раз­мер, в послед­нем сек­то­ре ука­зы­вай­те раз­мер дис­ка как ука­за­но в меню +size{K,M,G} Раз­мер не может быть мень­ше, чем был ранее!
  • /w — при­ме­ня­ем наши настройки.

После пере­за­груз­ки про­ве­рим диск командой:

xfs_growfs /dev/vda2

В неко­то­рых источ­ни­ках для выпол­не­ния дан­ной про­це­ду­ры ука­зы­ва­ют команду:

resize2fs /dev/vda2

Но с фай­ло­вой систе­мой xfs это не работает!

Рабо­ты по рас­ши­ре­нию дис­ка на вир­ту­аль­ной машине с ОС CentOS 7 закончены.

 

Как уменьшить размер виртуального диска в KVM?

к сожа­ле­нию, без­бо­лез­нен­но умень­шить диск на вир­ту­аль­ной машине в KVM нель­зя! Един­ствен­ный при­ем­ле­мый раз­мер умень­ше­ния раз­мер дис­ка вир­ту­аль­ной маши­ны KVM на физи­че­ском хра­ни­ли­ще – его сжа­тие через конвертацию.

В интер­не­те фигу­ри­ру­ет мно­го ста­тей, яко­бы бла­го­да­ря кото­рым вы може­те умень­шить раз­мер дис­ка на вир­ту­аль­ной машине, но это не работает.

Я при­ве­ду несколь­ко при­ме­ров, на кото­рые я наты­кал­ся и кото­рые лич­но мною были проверены.

Уменьшение KVM диска с помощью утилиты qemu

На ряде ресур­сов опи­са­ны дей­ствия, выпол­ня­е­мые с помо­щью ути­ли­ты qemu. В них пред­ла­га­ет­ся умень­шить раз­мер дис­ка вир­ту­аль­ной маши­ны с помо­щью команды:

qemu-img resize /путь_до_диска -5G — умень­ша­ем диск на 5G

Или такой вари­ант с ука­за­ни­ем кон­крет­но­го размера:

qemu-img resize /путь_до_диска 25G — ука­зы­ва­ем раз­мер дис­ка в 25G

Что про­ис­хо­дит после выпол­не­ния дан­ной коман­ды? Запус­ка­ем сер­вер и конеч­но систе­ма не грузится:

Я про­бо­вал сна­ча­ла умень­шить раз­дел из-под систе­мы с помо­щью ути­ли­ты fdisk, но в таком слу­чае, систе­ма так же пере­ста­ет загру­жать­ся, даже если вы про­пу­сти­те шаг умень­ше­ния дис­ка с физи­че­ско­го сер­ве­ра и это логич­но. Раз­дел кото­рый мы умень­ша­ем, систем­ный и соот­вет­ствен­но ОС пере­ста­ет загру­жать­ся, так как при умень­ше­нии дис­ка, инфор­ма­ция по всей види­мо­сти уничтожается.

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

Уже не такой рас­про­стра­нен­ный в инструк­ци­ях вари­ант — это умень­ше­ние дис­ка, с под­ме­ной на ста­рый. То есть, вы созда­е­те новую вир­ту­аль­ную маши­ну с нуж­ным вам раз­ме­ром дис­ка. После чего, под­ме­ня­е­те ста­рый образ дис­ка в новый образ и судя по опи­са­нию ста­тей в раз­ных источ­ни­ках, это рабо­та­ет. Я так же сде­лал про­вер­ку и это сло­ма­ло фай­ло­вую систе­му, как и в пер­вом вари­ан­те. Я при­ве­ду при­мер команды:

virt-resize /старый_образ_диска /новый_образ_диска

При­во­ди­лись так же вари­ан­ты, с кон­вер­та­ци­ей дис­ка с фор­ма­та raw в фор­мат qcow2, НО я изна­чаль­но создаю маши­ны в дан­ном фор­ма­те и объ­яс­ню почему.

Форматы дисков KVM и сжатие диска в qcow2 формате

В самом нача­ле ста­тьи, я упо­мя­нул про эти два формата.

raw – в пере­во­де «сырой». Пре­иму­ще­ство фор­ма­та, мак­си­маль­ная про­из­во­ди­тель­ность, уни­вер­саль­ность фор­ма­та. Мину­сов мас­са, основ­ные это:

  • Диск зани­ма­ет все дис­ко­вое про­стран­ство на физи­че­ском сер­ве­ре, кото­рое ему выделили;
  • Нель­зя создать снапшоты.

Qcow2 – это род­ной фор­мат гипер­ви­зо­ра QEMU, а так же QEMU-KVM. Это мак­си­маль­но удоб­ный фор­мат вир­ту­аль­но­го дис­ка из всех под­дер­жи­ва­е­мых в KVM. Образ дис­ка уве­ли­чи­ва­ет­ся по мере накоп­ле­ния дан­ных на вир­ту­аль­ной машине, под­дер­жи­ва­ют­ся снапшоты.

Чем хорош фор­мат qcow2? Вам в прин­ци­пе не нуж­но умень­шать раз­мер вир­ту­аль­но­го дис­ка, так как диск зани­ма­ет на сер­ве­ре, ров­но столь­ко, сколь­ко места там заня­то. Если же у вас дан­ные на сер­ве­ре посто­ян­но пере­за­пи­сы­ва­ют­ся и быва­ет такое, что диск «рас­пух», его мож­но с лег­ко­стью сжать. Рас­смот­рим такой вари­ант. Я забью нуля­ми неко­то­рое дис­ко­вое про­стран­ство и после чего уда­лю файл:

dd if=/dev/zero of=/mytempfile
rm -rf /mytempfile

При про­вер­ке с сер­ве­ра, образ дис­ка сна­ча­ла весил 2.4G после чего рас­ши­рил­ся до 5.9G:

# du -sh /путь_образа

# du -sh /путь_образа

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

Бэка­пим файл дис­ка, оста­нав­ли­ва­ем вир­ту­аль­ную маши­ну и после чего выпол­ня­ем сле­ду­ю­щие действия:

qemu-img convert -O qcow2 /старый_образ /новый_образ

После чего мож­но про­ве­рить раз­ме­ры двух дисков:

# du -sh /новый_диск

# du -sh /старый_диск

Как видим, раз­мер сжа­то­го дис­ка 1.6G. Пере­име­ну­ем новый образ дис­ка в нуж­ный нам и запу­стим вир­ту­аль­ную машину:

# df -h

Кон­троль­ная про­вер­ка с сервера:

# du -sh /образ_диска

Спо­соб рабо­чий. За все вре­мя его исполь­зо­ва­ния, ни разу фай­ло­вая систе­ма на вир­ту­аль­ной машине не уми­ра­ла. Но насто­я­тель­но реко­мен­дую перед подоб­ны­ми рабо­та­ми, созда­вать копию дис­ка, если не хоти­те поте­рять данные.