KVM Як збільшити / зменшити розмір диска віртуальної машини?

У цій статті ми поговоримо про зміну розміру дисків віртуальної машини KVM, розглянемо використовувані формати віртуальних дисків. Покажемо, як правильно збільшити диск віртуальної машини в гіпервізора KVM на Linux без втрати даних, а також обговоримо варіанти зменшення розмірів дисків.

зміст:

  • Збільшення диска віртуальної машини KVM
  • Як зменшити розмір віртуального диска в KVM?

Збільшення диска віртуальної машини 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

Image resized.

Якщо відразу перевірити висновок інформації про спосіб диска, ми побачимо, що він розширився:

# Qemu-img info / путь_до_діска

image: / путь_до_діска file format: qcow2 virtual size: 25G (26843545600 bytes) disk size: 1.6G cluster_size: 65536 Format specific information: compat: 0.10 refcount bits: 16 

Частина роботи ми зробили, але потрібно і проведення робіт з боку віртуальної машини в гостьовій ОС. Далі ми покажемо, як збільшити розмір диска в гостьових CentOS 7 і Windows Server 2012.

Якщо ви плануєте додати додатковий віртуальний диск для ВМ на KVM гіпервізора, використовуються qemu-img і virsh.

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

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

Після підключення до сервера, перевіряємо наявність нашого додатково підключеного місця:

df -h
fdisk -l

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

Підправимо цей момент і розширимо розділ / dev / vda2 до максимального обсягу:

# Fdisk / dev / vda

Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): d Partition number (1,2, default 2): Partition 2 is deleted Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (2-4, default 2): First sector (1050624-52428799, default 1050624): Using default value 1050624 Last sector, + sectors or + size K, M, G (1050624-52428799, default 52428799): Using default value 52428799 Partition 2 of type Linux and of size 24.5 GiB is set Command (m for help): w The partition table has been altered! Calling ioctl () to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe (8) or kpartx (8) Syncing disks. 

Після чого нам потрібно зробити рестарт віртуальної машини і виконати команду для застосування розширення диска:

# Xfs_growfs / dev / vda2

meta-data = / dev / vda2 isize = 512 agcount = 4, agsize = 1277888 blks = sectsz = 512 attr = 2, projid32bit = 1 = crc = 1 finobt = 0 spinodes = 0 data = bsize = 4096 blocks = 5111552, imaxpct = 25 = sunit = 0 swidth = 0 blks naming = version 2 bsize = 4096 ascii-ci = 0 ftype = 1 log = internal bsize = 4096 blocks = 2560, version = 2 = sectsz = 512 sunit = 0 blks, lazy-count = 1 realtime = none extsz = 4096 blocks = 0, rtextents = 0 data blocks changed from 5111552 to 6422272 

# Df -h

Filesystem Size Used Avail Use% Mounted on devtmpfs 485M 0 485M 0% / dev tmpfs 496M 0 496M 0% / dev / shm tmpfs 496M 6.6M 489M 2% / run tmpfs 496M 0 496M 0% / sys / fs / cgroup / dev / vda2 25G 1.3G 24G 6% / / dev / vda1 488M 100M 353M 23% / boot tmpfs 100M 0 100M 0% / run / user / 0 

У підсумку ми отримали додатковий розділ / 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 закінчені.

Збільшення диска в гостьовій Windows Server

Підключаємося до віртуальної машини через rdp або VNC і виконуємо роботи по розширенню диска.

  1. Відкрийте Server Manager -> Tools -> Computer Management;
  2. У вікні вибираємо в меню Disk Management, після чого у вас повинні відобразитися всі ваші диски і розділеного простору, які ми додали з боку гипервизора KVM;
  3. Вибираємо потрібний диск і натискаємо Extended Volume;
  4. За замовчуванням для збільшення розміру диска буде запропоновано все доступне місце;
  5. Натискаємо "далі" і завершуємо розширення. Після даної процедури, ваш розділ в системі повинен буде розширитися;

Хотілося б додати, що перед процедурою розширення диска для віртуальної машини, я раджу робити резервні копії самого диска. Зупиніть віртуальну машину і скопіюйте образ диска в директорію для бекапа або в будь-яку директорію, в якій є вільне місце. Якщо в ході робіт, що щось піде не так, ви завжди зможете повернути образ віртуального диска з резервної копії.

Як зменшити розмір віртуального диска в 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 / путь_образа

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 devtmpfs 485M 0 485M 0% / dev tmpfs 496M 0 496M 0% / dev / shm tmpfs 496M 6.6M 489M 2% / run tmpfs 496M 0 496M 0% / sys / fs / cgroup / dev / vda2 25G 1.3G 24G 6% / / dev / vda1 488M 100M 353M 23% / boot tmpfs 100M 0 100M 0% / run / user / 0 

Контрольна перевірка з сервера:

# Du -sh / образ_діска

1.6G / ****

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

Це все, що я хотів в даній статті розповісти. Якщо у кого-то з відвідувачів сайту є робочий спосіб по зменшенню диска на KVM, саме зменшення (не стисло) і саме робочий, пропонуйте свої варіанти і я обов'язково їх протестує.