Bagaimana Anda meningkatkan ruang disk tamu KVM?


Jawaban:


116
  1. hentikan VM
  2. jalankan qemu-img resize vmdisk.img +10Guntuk meningkatkan ukuran gambar sebesar 10Gb
  3. mulai VM, mengubah ukuran partisi dan struktur LVM di dalamnya secara normal

Ah, Anda mengalahkan saya untuk itu, saya hanya memperhatikan opsi ukuran pada qemu-img di halaman manual. Jadi ini menghemat beberapa langkah. Bagus!
slm

1
Dikerjakan untuk mengubah ukuran saya * .qcow2 img di RHEL6.6. Terima kasih!
Jacob Goulden

8
start the VM, resize the partitions and LVM structure within it normallyBagaimana cara melakukannya? Tolong jelaskan itu.
Waki

1
Anda tidak bisa memiliki semuanya diserahkan kepada Anda di piring. Jika Anda telah mencoba dan gagal mengubah ukuran partisi atau LV, buka pertanyaan baru, jelaskan apa yang Anda coba dan yang tidak berhasil
dyasny

4
Untuk mengubah ukuran tiap partisi dan LVM, ikuti semua langkah seperti yang dijelaskan dalam artikel ini sangat baik: sandilands.info/sgordon/...
skonsoft

32

Metode Online (menggunakan qemu, libvirt, dan virtio-block)

Untuk lebih baik atau lebih buruk, perintah di bawah ini akan berjalan bahkan jika disk virtual target dipasang. Ini dapat berguna dalam lingkungan di mana disk tidak dapat di-unmount (seperti partisi root), VM harus tetap aktif, dan pemilik sistem bersedia menanggung risiko korupsi data . Untuk menghapus risiko itu, Anda harus masuk ke VM dan melepas dahulu disk target, sesuatu yang tidak selalu mungkin.

Lakukan hal berikut dari hypervisor KVM.

  1. Tambah ukuran file gambar disk itu sendiri (tentukan jumlah yang akan ditingkatkan):

    qemu-img resize <my_vm>.img +10G
    
  2. Dapatkan nama perangkat virtio, melalui shell libvirt ( drive-virtio-disk0dalam contoh ini):

    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. Memberi sinyal driver virtio untuk mendeteksi ukuran baru (tentukan total kapasitas baru):

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

Kemudian masuk ke VM. Menjalankan dmesgharus melaporkan bahwa disk virtio mendeteksi perubahan kapasitas. Pada titik ini, silakan ubah ukuran partisi dan struktur LVM Anda sesuai kebutuhan.


4
Halaman manual untuk qemu-img (milik saya bertanggal 2016-05-08) mengatakan: " Peringatan: Jangan pernah menggunakan qemu-img untuk memodifikasi gambar yang digunakan oleh mesin virtual yang sedang berjalan atau proses lainnya; ini dapat merusak gambar. Juga, perlu diketahui bahwa meminta gambar yang sedang dimodifikasi oleh proses lain mungkin mengalami kondisi tidak konsisten. " Jadi saya tidak yakin apakah (langkah pertama) aman ketika mesin virtual masih berjalan.
user44400

Tidak berfungsi pada centos7 + kvm
e-info128

1
Ini bekerja dengan baik untuk saya. Menggunakan perangkat ceph dan virtio block. kami menyimpan data aplikasi / MySQL db pada partisi terpisah. Hentikan aplikasi yang mengakses partisi ini. Lepaskan ikatannya. Ubah ukurannya. fsck. lalu pasang kembali dengan ukuran baru. Tidak perlu mematikan.
nelaaro

Sama seperti jawaban ini, tetapi menggunakan libvirt alih-alih konsol monitor: serverfault.com/a/952868/30946
Mircea Vutcovici

21

Pertanyaan-pertanyaan serverfault ini serupa tetapi lebih spesifik, ukuran disk KVM online? & Centos Xen mengubah ukuran partisi DomU dan grup volume . Yang pertama menanyakan pertanyaan tentang bagaimana meningkatkan tamu KVM saat online, sedangkan yang ke-2 adalah spesifik XEN menggunakan LVM. Saya bertanya bagaimana menyelesaikan ini saat KVM sedang offline.

CATATAN: Tautan ini berguna untuk METHOD # 1, dan menunjukkan cara menyelesaikan peningkatan ruang disk KVM (berbasis ext3), HOWTO: Mengubah ukuran Gambar Mesin Virtual KVM .

Satu hal yang perlu diperhatikan dengan tamu KVM adalah bahwa partisi yang mereka gunakan di dalam dapat mempengaruhi metode mana yang dapat Anda gunakan untuk menambah ruang disk mereka.

METODE # 1: Partisi berbasis ext2 / ext3 / ext4

Kacang metode ini adalah sebagai berikut:

# 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

Sekarang dengan file mykvm.img yang lebih besar di tangan, boot gparted dan perpanjang partisi yang ada ke dalam ruang disk yang baru ditambahkan. Langkah terakhir ini pada dasarnya memperluas partisi OS sehingga dapat memanfaatkan ruang ekstra.

METODE # 2: Partisi berbasis LVM

Berikut adalah langkah-langkah yang saya ikuti secara kasar untuk mengubah ukuran tamu KVM yang menggunakan LVM secara internal.

  1. Matikan VM
  2. tambahkan lebih banyak ruang ke "file gambar" tamu (sesuatu seperti: cat old.img 10G_addon.raw >> new.img
  3. mulai VM (menggunakan new.img yang baru dibuat)
  4. jalankan fdisk di dalam VM dan hapus & buat kembali partisi 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. Nyalakan ulang VM

  6. Ubah ukuran volume fisik 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. Ubah ukuran Volume Logika LVM

      % lvresize /dev/VolGroup00/LogVol00 -l +640
      Extending logical volume LogVol00 to 43.88 GB
      Logical volume LogVol00 successfully resized
    
  8. Kembangkan sistem File

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

Di atas adalah contoh saya, tetapi saya mengikuti langkah-langkah di situs web ini


metode # 1 dalam posting ini tampaknya tidak berfungsi dengan baik - manajer mesin virtual dengan topi merah tidak melaporkan ukuran baru setelahnya. Metode yang disarankan oleh @dyasny tampaknya bekerja lebih baik setidaknya dalam hal ini.
Iwan Aucamp

@IwanAucamp - menarik, saya menggunakan virt-managerdan telah menggunakan metode # 1 & # 2 secara ekstensif sebelum saya memigrasi server KVM kami ke versi KVM yang lebih baru (CentOS 5 -> CentOS 6). Saya sekarang menggunakan qemu-img resizemetode ini juga.
slm

Untuk metode # 2, Anda mungkin menemukan handier lvextend sebagai langkah 7: lvextend /dev/Volgroup/lvname /dev/vda2(semua dalam satu baris, di mana / dev / vda2 akan menjadi volume fisik Anda). Tanpa opsi lain, itu akan menggunakan ukuran maksimum dalam grup volume itu.
Mike S

Metode # 2, langkah 4 tidak akan berfungsi jika ada volume logis di tabel partisi. Setelah rekreasi jenis partisi yang diperpanjang, sektor pertama yang tersedia tidak akan lagi cocok dengan apa yang dimiliki sebelum perubahan. Misalnya jika sektor pertama dari partisi logis Anda adalah 1001472, setelah perubahan itu akan menjadi 1003518 (dengan asumsi 10G disk sebelum dan 50G setelah mengubah ukuran). Adakah yang tahu cara membuat ulang, jika mungkin, volume logis di sektor pertama yang sama?
ILIV

1
Ini karena fdisk secara default menerapkan batasan penyelarasan (langkah 1MB) ke partisi. Untuk mengatasinya, terima nilai default 1003518, masukkan mode pakar (x) lalu pilih b dan atur sektor pertama ke 1001472. Lihat unix.stackexchange.com/a/320447 untuk detailnya.
ILIV

11

Ubah Ukuran dan Perluas Partisi Internal dalam Satu Langkah

Saya memiliki host Ubuntu dengan gambar file tamu qcow2 dan ingin mengubah ukuran disk dan memperluas partisi yang sesuai semua dalam satu langkah. Ini mengharuskan Anda untuk mengatur utilitas sistem file guest libvirt, tetapi itu berguna untuk tetap ada.

Inspirasi dari sini: http://libguestfs.org/virt-resize.1.html

Perintah kuncinya di sini adalah: virt-resize

  • ini adalah utilitas libvirt
  • itu dapat memperluas disk tamu DAN memperluas partisi di dalam dalam satu langkah
  • itu menyalin disk, itu tidak memperluasnya di tempat
    • ini bagus karena Anda memiliki dokumen asli yang belum tersentuh sebagai cadangan

Persiapan:

* 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

Sekarang lakukan hal berikut:

1) mematikan tamu:

2) Periksa ukuran saat ini dan lihat nama partisi yang ingin Anda kembangkan menggunakan utilitas libvirt:

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

3) Buat disk keluaran (40G) baru:

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

4) Salin yang lama ke yang baru sambil memperluas partisi yang sesuai (dengan asumsi partisi disk Anda dari langkah 2 adalah / dev / sda1):

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

5) Ganti nama file indisk sebagai cadangan, ganti nama outdisk sebagai indisk (atau ubah XML tamu)

6) Reboot tamu dan uji file disk baru dengan hati-hati sebelum menghapus file asli

7) Untung!


Ini hampir berhasil dalam kasus saya. Sedihnya, hampir. Ketika tamu (server CentOS 7) di-boot-ulang, ia menemukan disk yang diperluas tidak dapat di-boot.
Urhixidur

1
Ini bekerja sangat baik untuk saya. Menghilangkan -o preallocation=metadatamembuat file jarang. Dengan opsi itu, pra-mengalokasikan seluruh ukuran.
Dennis Williamson

Luar biasa, jawaban ini cocok untuk saya. Terima kasih banyak! Dokumentasi "resmi" untuk libguestfs ( libguestfs.org/virt-resize.1.html ), sayangnya tidak ditulis dengan baik dan akhirnya cukup membingungkan.
mbello

1
Bekerja dengan baik untuk saya, ingat bahwa Anda tidak benar-benar perlu menggunakan -o preallocation=metadatadan jika tidak, Anda juga harus melewati truncatelangkah ini. virt-resizeakan tumbuh file yang sesuai pula.
amoe

5

Jika Anda menggunakan LVM dalam VM, cara paling sederhana untuk melakukannya adalah dengan menambahkan disk virtual baru ke VM dan memperluas grup volume dan volume logis ke dalamnya.

Untuk memeriksa apakah Anda menggunakan LVM run sudo pvs; sudo vgs; sudo lvs, Anda akan mendapatkan sesuatu seperti ini:

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

jika OS VM menggunakan LVM. Dalam contoh di atas VM memiliki vdisk 30Gbyte, dikonfigurasi menggunakan LVM dengan satu grup volume bernama vgWWW yang berisi dua volume logis, satu untuk swap dan satu untuk yang lainnya.

Jika LV digunakan di VM:

  1. Matikan VM
  2. Pada host buat file disk virtual baru dan tambahkan ke VM
  3. Mulai ulang VM dan login
  4. Tandai drive baru sebagai volume fisik untuk LVM dengan sudo pvcreate /dev/vdb
  5. Perpanjang grup volume untuk menyertakan blok disk baru ini dengan sudo vgextend vgWWW /dev/vdb
  6. Perluas volume logis untuk mengambil ruang baru dengan sudo lvextend --extents +100%FREE /dev/vgWWW/root(atau sesuatu seperti sudo lvextend --size +8G /dev/vgWWW/rootjika Anda tidak ingin tumbuh sepanjang jalan, contoh ini akan menambah 8Gb ke volume)
  7. Ubah ukuran sistem file dengan resize2fs /dev/vgWWW/root

Catatan: di atas mengasumsikan nama vg / lv sama dengan contoh saya yang tidak mungkin, ubah sesuai kebutuhan, juga jika VM sudah memiliki drive virtual yang disebut vdbyang baru akan menjadi sesuatu yang lain ( vdc, dan seterusnya)

Catatan: resize2fs hanya akan bekerja pada sistem file ext2, ext3 dan ext4. Jika Anda menggunakan sesuatu yang lain itu akan kesalahan dan tidak melakukan apa pun.

Catatan: karena Anda mengubah ukuran sistem file langsung resize2fstidak akan meminta Anda untuk menjalankannya fsckterlebih dahulu seperti halnya untuk sistem file yang tidak di-mount, itu hanya akan berjalan terus. Anda mungkin ingin menjalankan sistem file read-only memeriksa tidak ada masalah sebelum melanjutkan.


Ini juga dapat dilakukan dengan GUI yang cukup bagus centos.org/docs/5/html/Deployment_Guide-en-US/…
Nux

5

Dimungkinkan untuk melakukan pengubahan ukuran online. libvirtd mendukung ini secara asli:

Temukan nama perangkat blok. Seharusnya sesuatu seperti "vda"

$ virsh domblklist <libvirtd_vm_name>

Ubah ukuran perangkat virtual:

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

Berikut adalah contoh di mana saya memperluas vdadisk dari 50GBke 51GBuntuk undercloudVM.

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

Sekarang lihat detail file gambar .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

Sekarang mari kita mengubah ukuran perangkat blok vda:

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

Dan konfirmasikan:

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

Kemudian Anda dapat menggunakan skrip ini di dalam VM untuk menampilkan perintah untuk mengubah ukuran perangkat blok dan fs: https://github.com/mircea-vutcovici/scripts/blob/master/vol_resize.sh .


3

Ada kemungkinan untuk meningkatkan ukuran disk VM Anda tanpa me-reboot VM jika Anda menggunakan virtio drive dan LVM.

  1. Gunakan virt-manager atau virsh untuk mendefinisikan disk kosong baru
  2. Kernel akan melihat / dev / vdb baru
  3. (Opsional) Buat partisi utama dengan fdisk untuk mendapatkan / dev / vdb1, kemudian gunakan kpartx -a / dev / vdb untuk membaca ulang tabel partisi

  4. Gunakan vgextend vg_name / dev / vdb1 (atau / dev / vdb jika Anda tidak membuat partisi)

  5. Gunakan lvextend -l + 100% GRATIS / dev / vg_name / lv_name
  6. Gunakan resize2fs / dev / vg_name / lv_name untuk memperluas sistem file Anda

Kamu sudah selesai.


2
Saya akan menambahkan bahwa libguestfs.org/virt-resize.1.html juga akan membantu.
FearlessFuture

3

Dengan cara ini Anda dapat memperluas partisi yang Anda inginkan:

    # 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

Lihat lebih banyak contoh di sini .


2

Cara lain untuk melakukannya

truncate -s +2G vm1.img 

pergi di make a disk scan ulang dan setelah Anda dapat melakukan ukuran lvm Anda.


1

Jika Anda memiliki LVM di VM Anda maka ini gila mudah dan cepat.

  1. Matikan VM (mesin tamu).
  2. Di mesin host Anda, tambahkan perangkat penyimpanan baru.
  3. Nyalakan tamu.
  4. Sistem Terbuka -> Administrasi -> Manajemen Volume Logis (atau ketik sudo system-config-lvmterminal) *.

Saya menemukan GUI cukup intuitif, tetapi ikuti langkah selanjutnya jika Anda memiliki masalah.

  1. Buka "Entitas yang tidak diinisialisasi" dan temukan drive baru Anda.
  2. Setelah memilih drive baru, di bawah gambar Anda harus menemukan tombol inisialisasi. Tekan itu.
  3. Ini akan menanyakan tentang partisi - Anda tidak membutuhkannya.
  4. Setelah selesai, tambahkan drive Anda ke grup volume yang ada.
  5. Akhirnya Anda perlu menumbuhkan volume logis Anda - ini dilakukan di Logical View grup dengan mengedit properti volume Anda.
  6. Simpan dan selesai. Tidak perlu me-restart VM.

Catatan! Setidaknya pada CentOS 6 LVM GUI tidak diinstal secara default, tetapi Anda dapat menginstalnya dengan yum install system-config-lvm.


1
  1. Matikan VM
  2. Ubah ukuran gambar:

    qemu-img resize vmdisk.img +16G
    

    meningkatkan ukuran gambar sebesar 16 GB.

  3. Jika gambar Anda memiliki GPT (GUID Partition Table) maka ukuran drive yang digunakan dalam GPT akan berbeda dari ukuran baru, Anda harus memperbaikinya dengan gdisk:

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

    atau dengan parted:

    parted $MY_DRIVE print Fix
    

    Untuk beberapa alasan partedperbaikan tidak berfungsi ketika tidak ada tty yang disajikan (misalnya saat penyediaan dengan Vagrant) jadi saya gunakan gdisk.

  4. Tambah ukuran partisi untuk mengisi semua ruang yang tersedia:

    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
    

    Bagian x a 2 <Enter>ini opsional dan diperlukan jika Anda menggunakan BIOS lawas. MY_PARTITION_GUID=...dan c $MY_PARTITION_GUIDbagian juga opsional dan hanya diperlukan jika Anda menggunakan UUID partisi di /etc/fstabatau di tempat lain.

  5. Reboot atau baca ulang partisi dengan partx -u $MY_DRIVEatau partprobe.

  6. Perpanjang partisi, contoh untuk ext2, ext3atau ext4:

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.