Назад | Перейти на главную страницу

Как увеличить гостевое дисковое пространство KVM?

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

РЕДАКТИРОВАТЬ №1: я использую файл образа диска (qemu).

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

Онлайн-метод (с использованием qemu, libvirt и virtio-block)

Хорошо это или плохо, но приведенные ниже команды будут выполняться, даже если целевой виртуальный диск смонтирован. Это может быть полезно в средах, где диск не может быть отключен (например, в корневом разделе), виртуальная машина должна оставаться включенной и владелец системы готов взять на себя риск повреждения данных. Чтобы устранить этот риск, вам нужно будет войти в виртуальную машину и сначала отключить целевой диск, что не всегда возможно.

Выполните следующее из гипервизора KVM.

  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
    

Затем войдите в виртуальную машину. Бег dmesg должен сообщить, что диск virtio обнаружил изменение емкости. На этом этапе измените размер разделов и структуру LVM по мере необходимости.

Эти вопросы о сбоях сервера похожи, но более конкретны, KVM онлайн-изменение размера диска? & Centos Xen изменяет размер раздела DomU и группы томов. Первый задает вопрос о том, как увеличить количество гостя KVM, пока он находится в сети, а второй - это XEN, использующий LVM. Я спрашиваю, как это сделать, когда KVM отключен.

НОТА: Эта ссылка была полезна для МЕТОДА №1 и показывает, как увеличить дисковое пространство KVM (на основе ext3), HOWTO: изменение размера образа виртуальной машины 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. Выключите виртуальную машину
  2. добавьте больше места в гостевой "файл образа" (что-то вроде: cat old.img 10G_addon.raw >> new.img
  3. запустить виртуальную машину (используя только что созданный new.img)
  4. запустите fdisk внутри виртуальной машины и удалите и заново создайте раздел 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. Перезагрузите виртуальную машину

  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.
    

Это мой пример, но я выполнил шаги на этом интернет сайт

Изменение размера и расширение внутренних разделов за один шаг

У меня был хост 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) Создайте новый выходной диск (40 ГБ):

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 как резервную копию, переименуйте исходящий диск как indisk (или измените гостевой XML)

6) Перезагрузите гостевую систему и внимательно проверьте новый файл на диске перед удалением исходного файла.

7) Прибыль!

Если вы используете LVM внутри виртуальной машины, самый простой способ сделать это - добавить новый виртуальный диск к виртуальной машине и расширить на нем группу томов и логические тома.

Чтобы проверить, используете ли вы LVM, запустите 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. В приведенном выше примере виртуальная машина имеет виртуальный диск емкостью 30 ГБ, настроенный с использованием LVM, с одной группой томов с именем vgWWW, содержащей два логических тома, один для подкачки и один для всего остального.

Если LV используется в виртуальной машине:

  1. Выключите виртуальную машину
  2. На хосте создайте новый файл виртуального диска и добавьте его в виртуальную машину.
  3. Перезагрузите виртуальную машину и войдите в систему.
  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 если вы не хотите увеличивать его полностью, в этом примере к тому добавится 8 ГБ)
  7. Измените размер файловой системы с помощью resize2fs /dev/vgWWW/root

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

Примечание: resize2fs будет работать только с файловыми системами ext2, ext3 и ext4. Если вы используете что-то еще, произойдет ошибка и ничего не произойдет.

Примечание: когда вы изменяете размер живой файловой системы resize2fs не предложит вам бежать fsck сначала, как это было бы с размонтированной файловой системой, он просто продолжит работу. Возможно, вы захотите запустить файловую систему, доступную только для чтения, и проверить, нет ли проблем, прежде чем продолжить.

Возможно изменение размера онлайн. libvirtd изначально поддерживает это:

Найдите имя блочного устройства. Должно быть что-то вроде "вда"

$ virsh domblklist <libvirtd_vm_name>

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

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

Вот пример, когда я расширил vda диск из 50GB к 51GB для undercloud ВМ.

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

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

[root@localhost ~]# 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@localhost ~]# virsh blockresize undercloud vda 51G
Block device 'vda' is resized

И подтверждаем:

[root@localhost ~]# 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@localhost ~]#

Затем вы можете использовать этот скрипт внутри виртуальной машины, чтобы показать команды для изменения размера блочных устройств и fs: https://github.com/mircea-vutcovici/scripts/blob/master/vol_resize.sh.

Существует возможность увеличить размер диска вашей виртуальной машины без перезагрузки виртуальной машины, если вы используете диск virtio и LVM.

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

  4. Используйте vgextend vg_name / dev / vdb1 (или / dev / vdb, если вы не создавали раздел)

  5. Используйте lvextend -l + 100% FREE / dev / vg_name / lv_name
  6. Используйте resize2fs / dev / vg_name / lv_name для расширения вашей файловой системы

Готово.

Таким образом вы можете расширить нужный раздел:

    # 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

Посмотреть больше примеров Вот.

Другой способ сделать это

truncate -s +2G vm1.img 

зайдите в make a disk rescan и после того, как вы сможете изменить размер lvm.

Если у вас есть LVM в вашей виртуальной машине, это безумно просто и быстро.

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

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

  1. Откройте «Неинициализированные объекты» и найдите свой новый диск.
  2. После выбора нового диска под изображением вы должны найти кнопку инициализации. Нажмите это.
  3. Он спросит вас о разделении - вам это не нужно.
  4. По завершении добавьте диск в существующую группу томов.
  5. Наконец, вам нужно увеличить свой логический том (ы) - это делается в логическом представлении группы путем редактирования свойств вашего тома.
  6. Сохраните и готово. Нет необходимости перезагружать виртуальную машину.

Заметка! По крайней мере, в CentOS 6 LVM GUI не установлен по умолчанию, но вы можете установить его с помощью yum install system-config-lvm.

  1. Выключите виртуальную машину
  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 fix не работает, когда tty не отображается (например, при инициализации с помощью 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
    

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