Вопрос: Как вы увеличиваете дисковое пространство гостя KVM?


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

EDIT # 1: Я использую файл образа диска (qemu).


81
2017-10-24 14:23


Источник


Используете ли вы LVM или образ диска в файле? - Selivanov Pavel


Ответы:


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

103
2017-10-24 15:32



Ах, вы избили меня до этого, я просто заметил параметры изменения размера на qemu-img на странице руководства. Таким образом, это сэкономит пару шагов. Ницца! - slm
Работал для переориентации моего * .qcow2 img на RHEL6.6. Благодаря! - Jacob Goulden
start the VM, resize the partitions and LVM structure within it normally Как это сделать? Пожалуйста, объясните это. - Waki
Вы не можете все передать вам на блюде. Если вы пробовали и не изменяли размер разделов или LV, открываете новый вопрос, описываете, что вы пытались и что не работало - dyasny
Чтобы изменить размеры разделов и LVM, выполните все шаги, как описано в этой замечательной статье: sandilands.info/sgordon/... - skonsoft


Интернет-метод (с использованием 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 должен сообщать, что виртуозный диск обнаружил изменение емкости. На этом этапе, по мере необходимости, измените размеры разделов и структуры LVM.


20
2017-09-22 23:08



Страница руководства для qemu-img (моя датирована 2016-05-08) говорит:Предупреждение: Никогда не используйте qemu-img для изменения изображений, используемых виртуальной машиной или любым другим процессом; это может уничтожить изображение. Кроме того, имейте в виду, что запрос изображения, который изменяется другим процессом, может столкнуться с несогласованным состоянием ». Поэтому я не уверен, является ли (первый шаг) безопасным, когда виртуальная машина все еще работает. - user44400
Не работает на centos7 + kvm - e-info128
Это отлично сработало для меня. Использование устройств ceph и virtio block. мы сохраняем данные приложения / MySQL db на отдельном разделе. Остановите приложения, обращающиеся к этому разделу. Отключите его. Измените его размер. Fsck. затем установите его снова с новым размером. Не нужно останавливать. - nelaaro


Эти вопросы с сервером похожи, но более конкретны, Изменение размера дискового пространства KVM? & Изменение размера и объема группы разделов Centos Xen, Первый задает вопрос о том, как увеличить гость 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.
    

Вышеприведенный пример - это мой пример, но я выполнил шаги по этому Веб-сайт


16
2017-10-24 14:36



метод # 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 будет вашим физическим объемом). Без каких-либо других опций он будет использовать максимальный размер в этой группе томов. - Mike S
Метод № 2, шаг 4 не будет работать, если в таблице разделов есть логические тома. После восстановления расширенного типа раздела первый доступный сектор больше не будет соответствовать тому, что было до изменений. Например. если первый сектор вашего логического раздела был 1001472, после изменений он будет равен 1003518 (при условии, что диск 10G до и 50G после изменения размера). Кто-нибудь знает, как воссоздать, если вообще возможно, логические тома в том же первом секторе? - ILIV
Это связано с тем, что fdisk по умолчанию применяет ограничения выравнивания (шаг 1 МБ) к разделам. Чтобы работать, принимайте значение по умолчанию 1003518, введите экспертный режим (x), затем выберите b и установите первый сектор на 1001472. См. unix.stackexchange.com/a/320447 для деталей. - ILIV


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

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

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

7) Прибыль!


11
2018-06-13 14:02



Это почти делает работу в моем случае. К сожалению, почти. Когда гость (сервер CentOS 7) перезагружается, он обнаруживает, что расширенный диск не загружается. - Urhixidur
Это отлично поработало для меня. Опуская -o preallocation=metadata создает разреженный файл. С помощью этой опции он предварительно выделяет весь размер. - Dennis Williamson
Отлично, этот ответ прибил его мне. Спасибо! «Официальная» документация для libguestfs (libguestfs.org/virt-resize.1.html), к сожалению, не очень хорошо написано и заканчивается довольно запутанным. - mbello
Хорошо работал для меня, помните, что вам действительно не нужно использовать -o preallocation=metadata и если вы этого не сделаете, вы также должны пропустить truncate шаг. virt-resize в любом случае будет расти файл. - amoe


Если вы используете 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

если ОС VM использует LVM. В приведенном выше примере VM имеет 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 сначала, как это было бы для размонтированной файловой системы, это будет просто идти вперед. Возможно, вы захотите запустить проверку файловой системы только для чтения, прежде чем продолжить, проблем нет.


5
2017-10-24 15:10



Это также можно сделать с помощью графического интерфейса, который довольно хорош centos.org/docs/5/html/Deployment_Guide-en-US/... - Nux


Существует возможность увеличить размер диска вашей виртуальной машины без перезагрузки виртуальной машины, если вы используете диск 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% БЕСПЛАТНО / dev / vg_name / lv_name
  6. Используйте resize2fs / dev / vg_name / lv_name для расширения вашей файловой системы

Все готово.


3
2017-07-12 10:25



Я добавлю, что libguestfs.org/virt-resize.1.html также должны помочь. - FearlessFuture


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

truncate -s +2G vm1.img 

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


2
2018-04-18 17:50





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

    # 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
2017-10-01 15:50





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

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

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

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

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


1
2018-06-07 16:12





  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 исправление не работает, если нет 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
    

1
2018-04-05 22:32





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


0
2017-07-31 12:52