Як збільшити дисковий простір гостя KVM?


100

Я встановлюю гість Ubuntu на хості CentOS KVM з початково 6 Гб дискового простору. Як мені почати збільшувати дисковий простір гостя Ubuntu з командного рядка?

РЕДАКТУРА №1: я використовую файл образу диска (qemu).


1
Онлайн розмір: serverfault.com/a/952868/30946
Mircea Vutcovici

Відповіді:


115
  1. зупинити ВМ
  2. запустіть qemu-img resize vmdisk.img +10Gдля збільшення розміру зображення на 10 Гбіт
  3. запустити VM, змінити розмір розділів та структури LVM в ньому нормально

Ах, ви перебили мене, я щойно помітив параметри зміни розміру на qemu-img на сторінці man. Отже, це заощадить пару кроків. Приємно!
slm

1
Працював над повторним розміром img * .qcow2 на RHEL6.6. Дякую!
Яків Гулден

8
start the VM, resize the partitions and LVM structure within it normallyЯк це зробити? Будь ласка, поясніть це.
Вакі

1
Ви не можете мати все, що вам передадуть на блюді. Якщо ви намагалися змінити розмір розділів або LV, не відкрийте нове запитання, опишіть, що ви намагалися, а що не вийшло
діасний

4
Щоб змінити розмір розділів і LVM, виконайте всі кроки, як пояснено у цій чудовій статті: sandilands.info/sgordon/…
skonsoft

32

Інтернет-метод (використовуючи qemu, libvirt та virtio-block)

На краще чи гірше, команди нижче будуть виконуватись, навіть якщо встановлений цільовий віртуальний диск. Це може бути корисно в середовищах, коли диск не може бути відключений (наприклад, корінний розділ), VM повинен залишатися включеним, а власник системи готовий взяти на себе ризик пошкодження даних . Щоб вилучити цей ризик, вам потрібно буде увійти в VM і спочатку відключити цільовий диск, що не завжди можливо.

Виконайте наступне з гіпервізора КВМ.

  1. Збільшити розмір самого файлу зображення диска (вкажіть суму для збільшення):

    qemu-img resize <my_vm>.img +10G
    
  2. Отримайте назву пристрою virtio за допомогою оболонки libvirt ( drive-virtio-disk0у цьому прикладі):

    virsh qemu-monitor-command <my_vm> info block --hmp
      drive-virtio-disk0: removable=0 io-status=ok file=/var/lib/libvirt/images/<my_vm>.img ro=0 drv=raw encrypted=0
      drive-ide0-1-0: removable=1 locked=0 tray-open=0 io-status=ok [not inserted]
    
  3. Сигналізуйте драйвер virtio, щоб виявити новий розмір (вкажіть загальну нову ємність):

    virsh qemu-monitor-command <my_vm> block_resize drive-virtio-disk0 20G --hmp
    

Потім увійдіть у VM. Біг dmesgповинен повідомити про те, що віріор-диск виявив зміну ємності. На цьому етапі продовжуйте змінити розмір розділів та структури LVM за потребою.


4
На сторінці "man" для qemu-img (моя дата датована 05.05.2016) сказано: " Попередження: Ніколи не використовуйте qemu-img для зміни зображень, які використовуються під управлінням віртуальної машини чи будь-якого іншого процесу; це може знищити зображення. Також, майте на увазі, що запит на зображення, яке модифікується іншим процесом, може зіткнутися з невідповідним станом. " Тож я не впевнений, чи безпечний (перший крок), коли віртуальна машина все ще працює.
user44400

Не працює на centos7 + kvm
e-info128

1
Це прекрасно працювало для мене. Використання приладів кефіру та вітіо блоку. ми зберігаємо дані додатків / MySQL db на окремому розділі. Зупиніть програми, що мають доступ до цього розділу. Відключіть його. Змініть розмір. fsck. потім знову змонтуйте його з новим розміром. Не потрібно відключення.
nelaaro

Ця відповідь, але за допомогою libvirt замість консолі монітора: serverfault.com/a/952868/30946
Mircea Vutcovici

21

Ці серверні запитання за замовчуванням схожі, але більш конкретні, розмір диска KVM в Інтернеті? & Centos Xen зміни розміру розділів і групи томів DomU . Перший задає питання, як збільшити гость KVM під час роботи в Інтернеті, а другий - специфічний для XEN, використовуючи LVM. Я запитую, як це досягти, коли KVM перебуває в автономному режимі.

ПРИМІТКА: Це посилання було корисним для МЕТОДУ №1 та показує, як досягти збільшення дискового простору KVM (на базі ext3), ЯК: Зміна розміру зображення віртуальної машини KVM .

Одне, що слід пам’ятати гостям KVM, це те, що розділи, які вони використовують всередині, можуть впливати, який метод ви можете використовувати для збільшення їх дискового простору.

МЕТОД №1: Розділи засновані на ext2 / ext3 / ext4

Горіхи цього способу наступні:

# 1. stop the VM
# 2. move the current image
mv mykvm.img mykvm.img.bak

# 3. create a new image
qemu-img create -f raw addon.raw 30G

# 4. concatenate the 2 images
cat mykvm.img.bak addon.raw >> mykvm.img

Тепер з більшим файлом mykvm.img в руці завантажте gparted і розширте існуючий розділ у щойно доданому дисковому просторі. Цей останній крок в основному розширює розділ ОС, щоб він міг використовувати додатковий простір.

МЕТОД №2: Перегородки засновані на LVM

Ось кроки, які я грубо дотримувався, щоб змінити розмір гостя KVM, який використовував LVM внутрішньо.

  1. Вимкнення VM
  2. додайте більше місця у "файл зображення" гостя (щось на кшталт: cat old.img 10G_addon.raw >> new.img
  3. запустити VM (використовуючи щойно створений new.img)
  4. запустіть fdisk всередині VM та видаліть та створіть LVM-розділ

    % fdisk /dev/vda
    ...
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    /dev/vda2              14        3263    26105625   8e  Linux LVM
    
    Command (m for help): d
    Partition number (1-4): 2
    
    Command (m for help): p
    
    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    
    Command (m for help): n 
    Command action
      e   extended
      p   primary partition (1-4)
    p
    Partition number (1-4): 2
    First cylinder (14-5874, default 14): 14
    Last cylinder or +size or +sizeM or +sizeK (14-5874, default 5874): 
    Using default value 5874
    
    Command (m for help): p
    
    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    /dev/vda2              14        5874    47078482+  83  Linux
    
    Command (m for help): t
    Partition number (1-4): 2
    Hex code (type L to list codes): 8e
    Changed system type of partition 2 to 8e (Linux LVM)
    
    Command (m for help): p
    
    Disk /dev/vda: 48.3 GB, 48318382080 bytes
    255 heads, 63 sectors/track, 5874 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Device Boot      Start         End      Blocks   Id  System
    /dev/vda1   *           1          13      104391   83  Linux
    /dev/vda2              14        5874    47078482+  8e  Linux LVM
    
    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.
    Syncing disks.
    %
    
  5. Перезавантажте програму VM

  6. Змініть розмір фізичного обсягу LVM

    % pvdisplay 
      --- Physical volume ---
      PV Name               /dev/vda2
      VG Name               VolGroup00
      PV Size               24.90 GB / not usable 21.59 MB
      Allocatable           yes (but full)
      PE Size (KByte)       32768
      Total PE              796
      Free PE               0
      ...
    
    % pvresize /dev/vda2
    
    % pvdisplay
      --- Physical volume ---
      PV Name               /dev/vda2
      VG Name               VolGroup00
      PV Size               44.90 GB / not usable 22.89 MB
      Allocatable           yes 
      PE Size (KByte)       32768
      Total PE              1436
      Free PE               640
      ...
    
  7. Змініть розмір логічного обсягу LVM

      % lvresize /dev/VolGroup00/LogVol00 -l +640
      Extending logical volume LogVol00 to 43.88 GB
      Logical volume LogVol00 successfully resized
    
  8. Росте файлова система

      % resize2fs /dev/VolGroup00/LogVol00 
      resize2fs 1.39 (29-May-2006)
      Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required
      Performing an on-line resize of /dev/VolGroup00/LogVol00 to 11501568 (4k) blocks.
      The filesystem on /dev/VolGroup00/LogVol00 is now 11501568 blocks long.
    

Наведене вище - мій приклад, але я дотримувався кроків на цьому веб-сайті


метод №1 у цій публікації, здається, не так добре працює - менеджер віртуальної машини в червоній шапці не повідомляє про новий розмір згодом. Запропонований @dyasny метод, здається, працює краще принаймні в цьому відношенні.
Iwan Aucamp

@IwanAucamp - цікаво, я virt-managerшироко використовую метод №1 і №2, перш ніж перенести наші сервери KVM на новішу версію KVM (CentOS 5 -> CentOS 6). Зараз я також використовую qemu-img resizeметод.
slm

Для способу №2 ви можете знайти lvextend handier як крок 7: lvextend /dev/Volgroup/lvname /dev/vda2(все в одному рядку, де / dev / vda2 буде вашим фізичним обсягом). Без будь-яких інших параметрів він використовуватиме максимальний розмір у цій групі гучності.
Майк S

Метод №2, крок 4 не працюватиме, якщо в таблиці розділів є логічні томи. Після відтворення розширеного типу перегородки перший доступний сектор більше не буде відповідати тому, що було до змін. Наприклад, якщо перший сектор вашого логічного розділу був 1001472, після змін він буде 1003518 (якщо припустити диск 10G до і 50G після зміни розміру). Хтось знає, як відтворити, якщо це взагалі можливо, логічні томи в тому ж першому секторі?
ІЛІВ

1
Це пов'язано з fdisk за замовчуванням, застосовуючи обмеження вирівнювання (крок 1 Мб) до розділів. Щоб обійти, прийміть значення за замовчуванням 1003518, введіть експертний режим (x), потім оберіть b і встановіть перший сектор на 1001472. Деталі див. У Unix.stackexchange.com/a/320447 .
ІЛІВ

11

Змініть розмір та розгорніть внутрішні розділи за один крок

У мене був хост Ubuntu із зображенням файлу гостя qcow2 і хотів змінити розмір диска та розгорнути відповідні розділи все за один крок. Це вимагає, щоб ви встановили утиліти файлової системи libvirt, але їх корисно мати в будь-якому випадку.

Натхнення звідси: http://libguestfs.org/virt-resize.1.html

Ключова команда тут: virt-resize

  • це утиліта libvirt
  • він може розширити гостьовий диск І розгорнути розділи всередині за один крок
  • він копіює диск, він не розширює його на місці
    • це добре, тому що ви маєте недоторканий оригінал як резервну копію

Підготовка:

* Install libvirt file system utilities package 
    * sudo apt-get install libguestfs-tools

* Test to see if it works (it won't) -- you need to see "===== TEST FINISHED OK =====" at the bottom:
    * sudo libguestfs-test-tool

* If you don't see "===== TEST FINISHED OK =====" at the bottom then repair it:
    * sudo update-guestfs-appliance

* Run the test again and verify it works
    * sudo libguestfs-test-tool

Тепер виконайте наступне:

1) вимкнення гостя:

2) Перевірте поточний розмір і перегляньте ім'я розділу, яке потрібно розгорнути за допомогою утиліти libvirt:

sudo virt-filesystems --long --parts --blkdevs -h -a name-of-guest-disk-file

3) Створіть новий (40G) вихідний диск:

qcow: sudo qemu-img create -f qcow2 -o preallocation=metadata outdisk 40G
img:  sudo truncate -s 40G outdisk

4) Скопіюйте старий у новий, одночасно розгорніть відповідний розділ (припустимо, що для вашого диска розділом 2 був / dev / sda1):

sudo virt-resize --expand /dev/sda1 indisk outdisk

5) Перейменуйте файл загрози як резервну копію, перейменуйте аут-диск як indisk (або змініть гостьовий XML)

6) Перезавантажте гостя і ретельно протестуйте новий файл диска, перш ніж видаляти оригінальний файл

7) Прибуток!


Це майже робить роботу в моєму випадку. На жаль, майже. Коли гість (сервер CentOS 7) перезавантажується, він вважає розширений диск незавантаженим.
Urhixidur

1
Це чудово працювало для мене. Опускання -o preallocation=metadataстворює розріджений файл. За допомогою цього варіанту він попередньо виділяє весь розмір.
Денніс Вільямсон

Чудово, ця відповідь прибила мене це. Дуже дякую! "Офіційна" документація на libguestfs ( libguestfs.org/virt-resize.1.html ), на жаль, недостатньо написана і в кінцевому підсумку є досить заплутаною.
mbello

1
Добре працював для мене, пам’ятай, що тобі насправді не потрібно користуватися, -o preallocation=metadataа якщо ні, ти також повинен пропустити truncateкрок. virt-resizeвсе одно зросте файл у міру необхідності.
аме

5

Якщо ви використовуєте LVM у VM, найпростішим способом зробити це було б додати до віртуальної машини новий віртуальний диск та розгорнути на ньому групу томів та логічні томи.

Щоб перевірити, чи використовується LVM run sudo pvs; sudo vgs; sudo lvs, ви отримаєте щось подібне:

PV         VG     Fmt  Attr PSize  PFree
/dev/vda1  vgWWW  lvm2 a-   30.00g    0

VG     #PV #LV #SN Attr   VSize  VFree
vgWWW    1   2   0 wz--n- 30.00g    0

LV   VG    Attr   LSize 
root vgWWW -wi-ao 28.80g
swap vgWWW -wi-ao  1.19g

якщо ОС ВМ використовує LVM. У наведеному вище прикладі VM має 30Gbyte vdisk, налаштований за допомогою LVM з однією групою томів, яка називається vgWWW, що містить два логічні томи, один для swap і один для всього іншого.

Якщо LV використовується в VM:

  1. Вимкніть ВМ
  2. На хості створіть новий файл віртуального диска і додайте його до VM
  3. Перезапустіть VM та увійдіть
  4. Позначте новий привід як фізичний об'єм для LVM sudo pvcreate /dev/vdb
  5. Розгорніть групу томів, щоб включити цей новий блок диска sudo vgextend vgWWW /dev/vdb
  6. Розширте логічний об'єм, щоб зайняти новий простір sudo lvextend --extents +100%FREE /dev/vgWWW/root(або щось подібне, sudo lvextend --size +8G /dev/vgWWW/rootякщо ви не хочете все більше його нарощувати, цей приклад додасть 8Gb до обсягу)
  7. Змініть розмір файлової системи за допомогою resize2fs /dev/vgWWW/root

Примітка: вище припускається, що імена vg / lv є такими ж, як і в моєму прикладі, що малоймовірно, змінити за необхідності, також якщо VM вже мав віртуальний привід під назвою vdbновий буде чимось іншим ( vdcі так далі)

Примітка: resize2fs працюватиме лише у файловій системі ext2, ext3 та ext4. Якщо ви використовуєте щось інше, воно помилиться і нічого не зробить.

Примітка: оскільки ви змінюєте розмір живої файлової системи resize2fs, не запропонуйте вам запустити fsckспочатку, як і для відключеної файлової системи, вона просто піде вперед. Ви можете запустити перевірку файлової системи лише для читання, перш ніж продовжувати, проблем немає.


Це також можна зробити з GUI, що є досить приємним centos.org/docs/5/html/Deployment_Guide-en-US/…
Nux

5

Можна зробити розмір в Інтернеті. libvirtd підтримує це спочатку:

Знайдіть назву блокового пристрою. Повинно бути щось на кшталт "vda"

$ virsh domblklist <libvirtd_vm_name>

Змініть розмір віртуального пристрою:

$ virsh blockresize --domain <libvirtd_vm_name> --path <block_device_name> --size <new_size>

Ось приклад, коли я розширював vdaдиск з 50GBна 51GBдля undercloudVM.

[root@gss-rhos-4 ~]# virsh domblklist undercloud
Target     Source
------------------------------------------------
vda        /home/images/undercloud.qcow2

Тепер подивіться деталі файлу зображення .qcow2:

[root@gss-rhos-4 ~]# qemu-img info /home/images/undercloud.qcow2
image: /home/images/undercloud.qcow2
file format: qcow2
virtual size: 50G (53687091200 bytes)
disk size: 38G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false

Тепер давайте змінимо розмір пристрою блоку vda:

[root@gss-rhos-4 ~]# virsh blockresize undercloud vda 51G
Block device 'vda' is resized

І підтвердьте:

[root@gss-rhos-4 ~]# qemu-img info /home/images/undercloud.qcow2
image: /home/images/undercloud.qcow2
file format: qcow2
virtual size: 51G (54760833024 bytes)
disk size: 38G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
[root@gss-rhos-4 ~]#

Потім ви можете використовувати цей скрипт всередині VM для показу команд зміни розміру блокових пристроїв і fs: https://github.com/mircea-vutcovici/scripts/blob/master/vol_resize.sh .


3

Існує можливість збільшити розмір диска Вашого комп'ютера без перезавантаження VM, якщо ви використовуєте привід virtio та LVM.

  1. Використовуйте virt-менеджер або virsh, щоб визначити новий порожній диск
  2. Ядро повинно бачити новий / dev / vdb
  3. (Необов’язково) Створіть основний розділ за допомогою fdisk для отримання / dev / vdb1, а потім використовуйте kpartx -a / dev / vdb для перечитування таблиці розділів

  4. Використовуйте vgextend vg_name / dev / vdb1 (або / dev / vdb, якщо ви не створили розділ)

  5. Використовуйте lvextend -l + 100% БЕЗКОШТОВНО / dev / vg_name / lv_name
  6. Використовуйте resize2fs / dev / vg_name / lv_name для розширення вашої файлової системи

Ви закінчили.


2
Додам, що libguestfs.org/virt-resize.1.html також повинен допомогти.
Безстрашний

3

Таким чином ви можете розширити потрібний розділ:

    # see what partitions you have? 
    virt-filesystems --long -h --all -a olddisk

    truncate -r olddisk newdisk
    truncate -s +5G newdisk

    # Note "/dev/sda2" is a partition inside the "olddisk" file.
    virt-resize --expand /dev/sda2 olddisk newdisk

Дивіться більше прикладів тут .


2

Ще один спосіб зробити це

truncate -s +2G vm1.img 

перейдіть до створення Rescan диска і після того, як ви зможете змінити розмір lvm.


1

Якщо у вас в VM є LVM, це божевільно легко і швидко.

  1. Вимкніть VM (гостьова машина).
  2. У свій хост-апарат додайте новий пристрій зберігання даних.
  3. Увімкніть гостя.
  4. Відкрийте систему -> адміністрування -> логічне керування гучністю (або введіть sudo system-config-lvmтермінал) *.

Я знайшов графічний інтерфейс досить інтуїтивним, але виконайте наступні кроки, якщо у вас є проблеми.

  1. Відкрийте "Неініціалізовані об'єкти" та знайдіть свій новий диск.
  2. Вибравши новий диск, під зображенням слід знайти кнопку ініціалізації. Натисніть на нього.
  3. Він запитає вас про розділення - вам це не потрібно.
  4. По завершенні додайте диск у існуючу групу гучності.
  5. Нарешті, вам потрібно збільшити свої логічні обсяги - це робиться в логічному перегляді групи шляхом редагування властивостей вашого тома.
  6. Збережіть і зробите. Не потрібно перезапускати VM.

Примітка! Принаймні на CentOS 6 LVM GUI не встановлений за замовчуванням, але ви можете встановити його yum install system-config-lvm.


1
  1. Вимкнення VM
  2. Змінити розмір зображення:

    qemu-img resize vmdisk.img +16G
    

    збільшує розмір зображення на 16 Гб.

  3. Якщо у вашому зображенні є GPT (таблиця розділів GUID), то розмір диска, який використовується в GPT, буде відрізнятися від нового розміру, вам потрібно виправити це за допомогою gdisk:

    MY_DRIVE=/dev/vda
    gdisk $MY_DRIVE <<EOF
    w
    Y
    Y
    EOF
    

    або з parted:

    parted $MY_DRIVE print Fix
    

    З якихось причин partedвиправлення не працює, коли жодних файлів не представлено (наприклад, при наданні послуг Vagrant), тому я використовую gdisk.

  4. Збільшити розмір розділу, щоб заповнити все доступне місце:

    MY_PARTITION_GUID=$(
    gdisk $MY_DRIVE <<EOF | sed -n -e 's/^Partition unique GUID: //p'
    i
    EOF
    )
    
    MY_PARTITION_FIRST_SECTOR=$(
    gdisk $MY_DRIVE <<EOF | sed -n -e 's/^First sector: \([0-9]\+\).*/\1/p'
    i
    EOF
    )
    
    gdisk $MY_DRIVE <<EOF
    d
    n
    
    $MY_PARTITION_FIRST_SECTOR
    
    
    x
    a
    2
    
    c
    $MY_PARTITION_GUID
    w
    Y
    EOF
    

    x a 2 <Enter>Частина є необов'язковою і потрібно , якщо ви використовуєте успадкований BIOS. MY_PARTITION_GUID=...і c $MY_PARTITION_GUIDдеталі також необов'язкові і потрібні лише в тому випадку, якщо ви використовуєте UUID для розділу у /etc/fstabбудь-якому іншому місці.

  5. Перезавантажте або перечитайте розділи за допомогою partx -u $MY_DRIVEабо partprobe.

  6. Розгорніть розділ, наприклад ext2, ext3або ext4:

    MY_PARTITION="${MY_DRIVE}1"
    resize2fs $MY_PARTITION
    

0

Ви можете використовувати solus vm із встановленим gparted. Після використання з gparted ви можете легко завантажувати систему та регулювати простір. Переконайтеся, що у вас встановлений правильний пріоритет завантаження. В якості довідки зверніться до наведеної нижче URL-адреси, яка може стати в нагоді. https://greencloudvps.com/knowledgebase/11/How-to-Extend-the-Hard-drive-on-KVM-after-upgrading-VPS.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.