Soru Bir KVM kullanıcısının disk alanını nasıl arttırıyorsunuz?


Başlangıçta 6GB disk alanı olan bir CentOS KVM ana bilgisayarında bir Ubuntu konuğu kurdum. Ubuntu konuğunun disk alanını komut satırından arttırmaya nasıl giderim?

EDIT # 1: Bir disk imaj dosyası kullanıyorum (qemu).


84
2017-10-24 14:23


Menşei


LVM veya disk imajını bir dosyada mı kullanıyorsunuz? - Selivanov Pavel


Cevaplar:


  1. VM'yi durdur
  2. koşmak qemu-img resize vmdisk.img +10G görüntü boyutunu 10 Gb arttırmak için
  3. VM'yi başlatın, bölümleri ve LVM yapısını normal olarak yeniden boyutlandırın

105
2017-10-24 15:32



Ah, beni bana dövdün, adam sayfasında qemu-img'deki yeniden boyutlandırma seçeneklerini fark ettim. Yani bu birkaç adımı kurtardı. Güzel! - slm
RHEL6.6'da * .qcow2 img'imi yeniden boyutlandırmak için çalıştı. Teşekkürler! - Jacob Goulden
start the VM, resize the partitions and LVM structure within it normally Nasıl yapılır? Lütfen açıkla. - Waki
Her şeyin bir tabağında size teslim edilemez. Bölümleri veya AG'leri yeniden boyutlandırmayı denediyseniz ve çalıştıramadıysanız, yeni bir soru açın, neyi denediğinizi ve nelerin işe yaramadığını açıklayın. - dyasny
Bölümleri ve LVM'yi yeniden boyutlandırmak için, bu mükemmel makalede açıklanan tüm adımları izleyin: sandilands.info/sgordon/... - skonsoft


Çevrimiçi Yöntem (qemu, libvirt ve virtio-block kullanarak)

Daha iyi veya daha kötüsü için, hedef sanal disk monte edilmiş olsa bile aşağıdaki komutlar çalışacaktır. Bu, diskin bağlantısının kesilemediği ortamlarda (kök bölümleme gibi) yararlı olabilir, VM'nin kalması gerekir ve Sistem sahibi veri bozulma riskini üstlenmeye istekli. Bu riski kaldırmak için, sanal makineye giriş yapmanız ve önce hedef diski çıkarmanız gerekir, bu her zaman mümkün olmayan bir şey.

KVM hipervizöründen aşağıdakileri gerçekleştirin.

  1. Disk imaj dosyasının boyutunu arttırın (artırılacak miktarı belirtin):

    qemu-img resize <my_vm>.img +10G
    
  2. Libvirt kabuğu aracılığıyla virtio cihazının adını alın (drive-virtio-disk0 bu örnekte):

    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. Yeni boyutu algılamak için virtio sürücüsünü işaretleyin (toplam yeni kapasiteyi belirtin):

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

Ardından VM'ye giriş yapın. Koşu dmesg virtio diskin kapasite değişikliği tespit ettiğini bildirmelidir. Bu noktada, devam edip bölümlerinizi ve LVM yapınızı gerektiği gibi yeniden boyutlandırın.


24
2017-09-22 23:08



Qemu-img için adam sayfası (benimki 2016-05-08 tarihli) diyor ki: "Uyarı: Çalışan bir sanal makine veya başka bir işlem tarafından kullanılan görüntüleri değiştirmek için asla qemu-img kullanmayın; Bu görüntüyü yok edebilir. Ayrıca, başka bir işlem tarafından değiştirilmekte olan bir görüntünün sorgulanmasının tutarsız bir durumla karşılaşabileceğini unutmayın. "Dolayısıyla, sanal makine hala çalışırken (ilk adımın) güvenli olup olmadığından emin değilim. - user44400
Centos7 + kvm üzerinde çalışmıyor - e-info128
Bu benim için mükemmel çalıştı. Ceph ve virtio blok cihazlarını kullanma. Uygulama verilerini / MySQL db'yi ayrı bir bölümde saklıyoruz. Bu bölüme erişen uygulamaları durdurun. Çıkarın. Yeniden boyutlandır. Fsck. daha sonra yeni boyut ile tekrar monte edin. Kapatmaya gerek yok. - nelaaro


Bu sunucu hatası soruları benzer ancak daha spesifiktir KVM çevrimiçi disk yeniden boyutlandırılıyor mu? & Centos Xen DomU bölümü ve birim grubu yeniden boyutlandırılıyor. Birincisi, çevrimiçi iken bir KVM konusunun nasıl artırılacağı sorusunu sorarken, 2. LVM'yi kullanarak XEN'e özgüdür. KVM çevrimdışıyken bunu nasıl başaracağımı soruyorum.

NOT: Bu bağlantı, METHOD # 1 için yararlı oldu ve bir KVM'nin disk alanını (ext3 tabanlı) artırmanın nasıl gerçekleştirileceğini gösterir, NASIL: Bir KVM Sanal Makine Görüntüsünü Yeniden Boyutlandır.

KVM misafirleriyle ilgili olarak bilmeniz gereken bir şey, içinde kullanacakları bölümlerin, disk alanlarını artırmak için hangi yöntemi kullanabileceğinizi etkilemesidir.

YÖNTEM 1: Bölümler ext2 / ext3 / ext4 tabanlı

Bu yöntemin fındık aşağıdaki gibidir:

# 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

Şimdi eldeki büyük mykvm.img dosyası ile, önyükleme GParted varolan bölümü yeni eklenen disk alanına genişletir. Bu son adım temel olarak OS bölümünü genişleterek ekstra alandan faydalanabiliyor.

YÖNTEM # 2: Bölümler LVM tabanlı

İşte, LVM'yi dahili olarak kullanan bir KVM konağını yeniden boyutlandırmak için takip ettiğim adımlar.

  1. Sanal makineyi kapat
  2. Konuğun “görüntü dosyası” na daha fazla alan ekleyin (bir şey gibi: kedi old.img 10G_addon.raw >> new.img
  3. VM'yi başlat (yeni oluşturulan new.img kullanarak)
  4. VM içinde fdisk'i çalıştırın ve LVM bölümünü silin ve yeniden oluşturun

    % 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. Sanal makineyi yeniden başlat

  6. LVM fiziksel ses düzeyini yeniden boyutlandır

    % 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 Mantıksal Sesini yeniden boyutlandır

      % lvresize /dev/VolGroup00/LogVol00 -l +640
      Extending logical volume LogVol00 to 43.88 GB
      Logical volume LogVol00 successfully resized
    
  8. Dosya sistemini büyütün

      % 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.
    

Yukarıdaki benim örneğim, ancak bu konuda adımları takip ettim Web sitesi


17
2017-10-24 14:36



Bu yazıdaki # 1 numaralı yöntem işe yaramıyor gibi görünmüyor - kırmızı şapkalı sanal makine yöneticisi daha sonra yeni boyutu bildirmiyor. @ Dyasny tarafından önerilen yöntem, bu konuda daha iyi çalışmaktadır. - Iwan Aucamp
@IwanAucamp - ilginç, kullanıyorum virt-manager ve KVM sunucularımızı KVM'nin daha yeni bir sürümüne (CentOS 5 -> CentOS 6) geçirmeden önce # 1 ve # 2 yöntemini kullandık. Şimdi kullanıyorum qemu-img resize yöntem de. - slm
2. yöntem için, lvextend handier'i adım 7 olarak bulabilirsiniz: lvextend /dev/Volgroup/lvname /dev/vda2 (hepsi bir satırda, / dev / vda2 fiziksel hacminiz olur). Başka seçenekler olmadan, bu cilt grubundaki maksimum boyutu kullanacaktır. - Mike S
Bir bölüm tablosunda mantıksal birimler varsa Yöntem # 2, adım 4 çalışmaz. Bir bölümün genişletilmiş türünün rekreasyonundan sonra, ilk mevcut sektör artık değişikliklerden önce olanla eşleşmeyecektir. Örneğin. Eğer mantıksal bölümünüzün ilk sektörü 1001472 ise, değişikliklerden sonra 1003518 olacaktır (yeniden boyutlandırmadan sonra 10G diski ve 50G varsayarak). Herkes, mümkün olduğunda, aynı birinci sektördeki mantıksal hacimleri nasıl yeniden üreteceğini biliyor mu? - ILIV
Bu, varsayılan olarak hizalama kısıtlamalarını (1 MB adım) bölümlere uygulayarak fdisk'e bağlıdır. Çalışmak için 1003518 varsayılan değerini kabul edin, uzman moduna girin (x) ve b'yi seçin ve ilk sektörü 1001472'ye ayarlayın. unix.stackexchange.com/a/320447 detaylar için. - ILIV


Tek Adımda Dahili Bölümleri Yeniden Boyutlandır ve Genişlet

Qcow2 konuk dosyası görüntüsüne sahip bir Ubuntu ana bilgisayarım vardı ve diski yeniden boyutlandırmak ve uygun bölümleri tek bir adımda genişletmek istedim. Libvirt konuk dosya sistemi yardımcı programlarını ayarlamanızı gerektirir, ancak bunlar zaten etrafta olmak için yararlıdır.

Buradan ilham: http://libguestfs.org/virt-resize.1.html

Buradaki anahtar komut şöyledir: virt-resize

  • Bu bir libvirt programı
  • Bir konuk diskini genişletebilir ve bir adımda bölümleri genişletebilir
  • diski kopyalar, yerinde genişletmez
    • Bu iyi çünkü el değmemiş orijinali yedek

Hazırlık:

* 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

Şimdi aşağıdakileri yapın:

1) konuğu kapatma:

2) Mevcut boyutlandırmaya göz atın ve libvirt yardımcı programını kullanarak genişletmek istediğiniz bölüm adını görüntüleyin:

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

3) Yeni (40G) çıktı diskini oluşturun:

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

4) Eskiyi yeni bölüme kopyalayın ve uygun bölümü genişletin (disk bölümünüzün 2. adımdaki varsayımının / dev / sda1 olduğu varsayılarak):

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

5) Indisk dosyasını yedek olarak yeniden adlandırın, outdisk'i indisk olarak yeniden adlandırın (veya misafir XML'i değiştirin)

6) Orijinal dosyayı silmeden önce konuyu yeniden başlatın ve yeni disk dosyasını test edin

7) Kar!


11
2018-06-13 14:02



Bu neredeyse benim durumumdaki işi yapıyor. Ne yazık ki, neredeyse. Konuk (bir CentOS 7 sunucusu) yeniden başlatıldığında, genişletilen diskin önlenemez olduğunu bulur. - Urhixidur
Çok işime yaradı. atlanması -o preallocation=metadata seyrek bir dosya oluşturur. Bu seçenekle, tüm boyutu önceden ayırır. - Dennis Williamson
Mükemmel, bu cevap benim için çivilenmiş. Çok teşekkürler! Libguestfs için "resmi" belgeler (libguestfs.org/virt-resize.1.html) maalesef iyi yazılmış değil ve oldukça kafa karıştırıcı oluyor. - mbello
Benim için iyi çalıştı, aslında kullanmaman gerektiğini hatırlıyorum -o preallocation=metadata ve eğer yapmazsanız, truncate adım. virt-resize Dosyayı yine de uygun şekilde büyütecektir. - amoe


VM içinde LVM kullanıyorsanız, bunu yapmanın en basit yolu, VM'ye yeni bir sanal disk eklemek ve ses grubunu ve mantıksal birimleri genişletmektir.

LVM çalıştırmayı kullanıp kullanmadığınızı kontrol etmek için sudo pvs; sudo vgs; sudo lvsböyle bir şey alacaksın:

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'nin işletim sistemi LVM kullanıyorsa. Yukarıdaki örnekte, VM, bir tane takas için ve diğeri için bir tane olmak üzere iki mantıksal hacim içeren vgWWW adında bir hacim grubu ile LVM kullanılarak yapılandırılmış bir 30Gbyte vdisk'e sahiptir.

VM'de LV kullanılıyorsa:

  1. Sanal makineyi kapat
  2. Ana bilgisayarda yeni bir sanal disk dosyası oluşturun ve sanal makineye ekleyin.
  3. VM'yi yeniden başlatın ve giriş yapın
  4. Yeni sürücüyü, LVM için fiziksel bir birim olarak işaretleyin. sudo pvcreate /dev/vdb
  5. Bu yeni disk bloğunu içerecek şekilde hacim grubunu genişletin. sudo vgextend vgWWW /dev/vdb
  6. Yeni alanı almak için mantıksal hacmi artırın sudo lvextend --extents +100%FREE /dev/vgWWW/root (ya da bir şey gibi sudo lvextend --size +8G /dev/vgWWW/root Tüm yolu büyütmek istemiyorsanız, bu örnek cihaza 8 Gb ekleyecektir.
  7. Dosya sistemini ile yeniden boyutlandırın resize2fs /dev/vgWWW/root

Not: Yukarıdakiler vg / lv isimlerinin benim örneğim ile aynı olmadığına inanmaktadır, bu da uygun olmayan bir şekilde değişmektedir, eğer VM zaten bir sanal sürücüye sahipse vdb yeni olan başka bir şey olacak (vdc, ve bunun gibi)

Not:  resize2fs Sadece ext2, ext3 ve ext4 dosya sistemi üzerinde çalışacak. Başka bir şey kullanıyorsanız, hata yapar ve hiçbir şey yapmaz.

Not: canlı bir dosya sistemini yeniden boyutlandırırken resize2fs koşmanı istemez fsck İlk olarak tekil olmayan bir dosya sistemi için olduğu gibi, sadece devam edecek. Devam etmeden önce herhangi bir sorun bulunmadığını kontrol etmek için salt okunur dosya sistemi çalıştırmak isteyebilirsiniz.


5
2017-10-24 15:10



Bu da oldukça güzel GUI ile yapılabilir centos.org/docs/5/html/Deployment_Guide-en-US/... - Nux


Eğer virtio sürücüsü ve LVM kullanıyorsanız, VM'yi yeniden başlatmadan VM diskinizin boyutunu arttırmak mümkündür.

  1. Yeni bir boş disk tanımlamak için virt-manager veya virsh kullanın
  2. Çekirdek yeni / dev / vdb görmeli
  3. (İsteğe bağlı) / dev / vdb1 almak için fdisk ile bir birincil bölüm oluşturun, sonra bölüm tablosunu yeniden okumak için kpartx -a / dev / vdb'yi kullanın

  4. Vgextend vg_name / dev / vdb1 kullanın (veya bölüm oluşturmadıysanız / dev / vdb)

  5. Lvextend -l +% 100 FREE / dev / vg_name / lv_name öğesini kullanın
  6. Dosya sisteminizi genişletmek için resize2fs / dev / vg_name / lv_name kullanın

Sen bittin.


3
2017-07-12 10:25



Bunu ekleyeceğim libguestfs.org/virt-resize.1.html ayrıca yardım etmeli. - FearlessFuture


Bunu yapmanın başka bir yolu

truncate -s +2G vm1.img 

Bir diskin yeniden taranmasını sağlayın ve lvm yeniden boyutlandırmayı yaptıktan sonra.


2
2018-04-18 17:50