KVM 게스트의 디스크 공간을 어떻게 늘리십니까?


답변:


115
  1. VM을 중지
  2. qemu-img resize vmdisk.img +10G이미지 크기를 10Gb 늘리기 위해 실행
  3. VM을 시작하고 파티션 및 LVM 구조의 크기를 정상적으로 조정하십시오.

아, 당신이 그것을 이길, 방금 man 페이지에서 qemu-img의 크기 조정 옵션을 발견했습니다. 따라서 몇 단계 만 거치면됩니다. 좋은!
slm

1
RHEL6.6에서 * .qcow2 img의 크기를 조정하기 위해 노력했습니다. 감사!
Jacob Goulden

8
start the VM, resize the partitions and LVM structure within it normally어떻게합니까? 설명해주세요.
Waki

1
플래터에 모든 것을 건네 줄 수는 없습니다. 당신이 시도하고 파티션 또는 정맥 주사의 크기를 조정하지 못한 경우, 새로운 질문을 열고 당신이 시도 무엇을 설명하고 무엇을 작동하지 않았다
dyasny

4
파티션과 LVM의 크기를 조정하려면이 훌륭한 기사에 설명 된 모든 단계를 따르십시오. sandilands.info/sgordon/…
skonsoft

32

온라인 방법 (qemu, libvirt 및 virtio-block 사용)

더 좋든 나쁘 든 대상 가상 디스크가 마운트되어 있어도 아래 명령이 실행됩니다. 이는 디스크를 마운트 해제 할 수없는 환경 (예 : 루트 파티션)에서 VM이 켜져 있어야 하며 시스템 소유자가 데이터 손상의 위험을 감수하려고하는 환경에서 유용 할 수 있습니다 . 이러한 위험을 제거하려면 항상 가능하지는 않지만 VM에 로그인하고 대상 디스크를 먼저 마운트 해제해야합니다.

KVM 하이퍼 바이저에서 다음을 수행하십시오.

  1. 디스크 이미지 파일 자체의 크기를 늘리십시오 (증가량 지정).

    qemu-img resize <my_vm>.img +10G
    
  2. libvirt 쉘을 통해 virtio 장치의 이름을 가져옵니다 ( 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중 virtio 디스크가 용량 변경을 감지했다고보고해야합니다. 이제 필요에 따라 파티션과 LVM 구조의 크기를 조정하십시오.


4
qemu-img (내 날짜는 2016-05-08)의 맨 페이지에 다음과 같이 나와 있습니다. " 경고 : qemu-img를 사용하여 실행중인 가상 시스템이나 다른 프로세스에서 사용중인 이미지를 수정하지 마십시오. 이미지가 손상 될 수 있습니다. 다른 프로세스에서 수정중인 이미지를 쿼리하면 상태가 일치하지 않을 수 있습니다. " 따라서 가상 컴퓨터가 여전히 실행 중일 때 (첫 번째 단계) 안전한지 확실하지 않습니다.
user44400 2016 년

centos7 + kvm에서 작동하지 않습니다
e-info128

1
이것은 나를 위해 완벽하게 작동했습니다. ceph 및 virtio 블록 장치 사용 우리는 별도의 파티션에 응용 프로그램 데이터 / MySQL db를 저장합니다. 이 파티션에 액세스하는 애플리케이션을 중지하십시오. 마운트 해제하십시오. 크기를 조정하십시오. fsck. 그런 다음 새 크기로 다시 마운트하십시오. 종료가 필요하지 않습니다.
nelaaro

이 답변과 동일하지만 모니터 콘솔 대신 libvirt 사용 : serverfault.com/a/952868/30946
Mircea Vutcovici

21

이러한 serverfault 질문은 비슷하지만보다 구체적인 KVM 온라인 디스크 크기는? & Centos Xen 크기 조정 DomU 파티션 및 볼륨 그룹 . 첫 번째는 온라인 상태 일 때 KVM 게스트를 늘리는 방법에 대한 질문을하고 두 번째는 LVM을 사용하여 XEN 전용입니다. 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를 새로 추가 된 디스크 공간으로 기존 파티션을 확장 할 수 있습니다. 이 마지막 단계는 기본적으로 추가 공간을 사용할 수 있도록 OS 파티션을 확장합니다.

방법 # 2 : 파티션은 LVM 기반입니다

다음은 LVM을 내부적으로 사용한 KVM 게스트의 크기를 조정하기 위해 수행 한 단계입니다.

  1. VM 종료
  2. 게스트의 "이미지 파일"에 더 많은 공간을 추가하십시오 (예 : cat old.img 10G_addon.raw >> new.img
  3. 새로 만든 new.img를 사용하여 VM을 시작합니다.
  4. VM 내부에서 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. 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-managerKVM 서버를 최신 버전의 KVM (CentOS 5-> CentOS 6)으로 마이그레이션하기 전에 방법 1과 2를 광범위하게 사용했습니다. 이제이 qemu-img resize방법도 사용합니다 .
slm

방법 # 2의 경우, 7 단계에서 lvextend 핸디 어를 찾을 수 있습니다 lvextend /dev/Volgroup/lvname /dev/vda2(여기에서 / dev / vda2는 물리적 볼륨입니다). 다른 옵션이 없으면 해당 볼륨 그룹의 최대 크기가 사용됩니다.
Mike S

파티션 테이블에 논리 볼륨이 있으면 방법 # 2, 4 단계가 작동하지 않습니다. 확장 유형의 파티션을 재생성 한 후, 첫 번째 사용 가능한 섹터는 더 이상 변경 이전의 섹터와 일치하지 않습니다. 예를 들어 논리 파티션의 첫 번째 섹터가 1001472 인 경우 변경 후 1003518이됩니다 (크기 변경 전 10G 디스크, 크기 조정 후 50G로 가정). 가능한 경우 동일한 첫 번째 섹터에서 논리 볼륨을 다시 작성하는 방법을 아는 사람이 있습니까?
ILIV

1
이는 기본적으로 파티션에 정렬 제한 조건 (1MB 단계)을 적용하는 fdisk 때문입니다. 이 문제를 해결하려면 기본값 1003518을 그대로 사용하고 전문가 모드 (x)를 입력 한 다음 b를 선택하고 첫 번째 섹터를 1001472로 설정 하십시오. 자세한 내용 은 unix.stackexchange.com/a/320447 을 참조하십시오.
ILIV

11

한 번에 내부 파티션 크기 조정 및 확장

qcow2 게스트 파일 이미지가있는 Ubuntu 호스트가 있었고 디스크 크기를 조정하고 적절한 파티션을 한 번에 모두 확장하려고했습니다. 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) 이익!


이것은 내 경우에 거의 일을합니다. 슬프게도, 거의. 게스트 (CentOS 7 서버)를 재부팅하면 확장 디스크를 부팅 할 수 없습니다.
Urhixidur

1
그것은 나를 위해 잘 작동했습니다. 생략 -o preallocation=metadata하면 스파 스 파일이 생성됩니다. 이 옵션을 사용하면 전체 크기를 미리 할당합니다.
Dennis Williamson

훌륭합니다.이 답변은 저를 위해 못 박았습니다. 정말 고마워! 불행히도 libguestfs ( libguestfs.org/virt-resize.1.html )에 대한 "공식"문서 는 잘 작성되지 않았고 혼란스러워졌습니다.
mbello

1
나를 위해 잘 작동했습니다. 실제로 사용할 필요가 없으며 사용 -o preallocation=metadata하지 않으면 truncate단계를 건너 뛰십시오 . virt-resize어쨌든 파일을 적절하게 확장합니다.
amoe

5

VM 내에서 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의 OS가 LVM을 사용중인 경우 위의 예에서 VM에는 LVM을 사용하여 vgWWW라는 하나의 볼륨 그룹과 두 개의 논리 볼륨 (스왑 용 및 다른 하나 용)이 포함 된 LVM을 사용하여 구성된 30GB vdisk가 있습니다.

VM에서 LV를 사용중인 경우 :

  1. VM 종료
  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. 계속 진행하기 전에 문제가없는 읽기 전용 파일 시스템 검사를 실행할 수 있습니다.



5

온라인 크기 조정이 가능합니다. libvirtd는 이것을 기본적으로 지원합니다 :

블록 장치 이름을 찾으십시오. "vda"와 같은 것이어야합니다

$ virsh domblklist <libvirtd_vm_name>

가상 장치의 크기를 조정하십시오.

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

저는 여기에 확장했다 예입니다 vda에서 디스크 50GB51GB대한 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 ~]#

: 그럼 당신은 블록 장치 및 FS 크기를 조정하는 명령을 보여주기 위해 VM 내에서이 스크립트를 사용할 수 https://github.com/mircea-vutcovici/scripts/blob/master/vol_resize.sh을 .


3

virtio 드라이브 및 LVM을 사용하는 경우 VM을 재부팅하지 않고 VM 디스크 크기를 늘릴 수 있습니다.

  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을 사용하십시오

끝났습니다.


2
libguestfs.org/virt-resize.1.html 도 도움 이 될 것이라고 덧붙 입니다.
FearlessFuture 17

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 

디스크를 다시 스캔하고 lvm 크기 조정을 수행 한 후에 이동하십시오.


1

VM에 LVM이 있으면 쉽고 빠릅니다.

  1. VM (게스트 머신)을 끕니다.
  2. 호스트 시스템에서 새 저장 장치를 추가하십시오.
  3. 손님을 켭니다.
  4. 시스템-> 관리-> 논리 볼륨 관리 (또는 sudo system-config-lvm터미널 입력) 를 엽니 다 . *.

GUI는 매우 직관적이지만 문제가 있으면 다음 단계를 따르십시오.

  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
    

    이미지 크기를 16GB 늘립니다.

  3. 이미지에 GPT (GUID 파티션 테이블)가있는 경우 GPT에 사용 된 드라이브 크기가 새 크기와 다르면 다음과 gdisk같이 수정해야합니다 .

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

    또는 함께 parted:

    parted $MY_DRIVE print Fix
    

    어떤 이유로 partedtty가 표시되지 않으면 (예 : 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
    

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.