KVM 상의 Linux VM의 lvm 볼륨 사이즈 업을 하는 방법 안내
여기서는 19G -> 39G로 늘리는 것을 예제로 함.
.
서버 정보
KVM Hypervisor : kvm-host
VM : rocky88-mltest
현재 VM의 디스크(확장하고자 하는) 사이즈 확인 후 shutdown
[root@rocky88-mltest ~]# df -h | grep rocky-root
/dev/mapper/rocky-root 17G 3.3G 13G 21% /
[root@rocky88-mltest ~]# shutdown -h 0
(vm이 온라인 상태일 때 virt-filesystems 수행 시 vm의 /dev/sda에 확장이 반영되지 않음)
KVM 하이퍼바이저에서 해당 vm의 이미지 정보 확인
[root@kvm-host ~]# qemu-img info /nvme/vms/rocky-ml-test1698850995348.img
image: /nvme/vms/rocky-ml-test1698850995348.img
file format: qcow2
virtual size: 19G (20480000000 bytes)
disk size: 16G
cluster_size: 65536
Format specific information:
compat: 0.10
qcow2 image 파일 확장
[root@kvm-host ~]# qemu-img resize /nvme/vms/rocky-ml-test1698850995348.img +20G
Image resized.
[root@kvm-host ~]# qemu-img info /nvme/vms/rocky-ml-test1698850995348.img
image: /nvme/vms/rocky-ml-test1698850995348.img
file format: qcow2
virtual size: 39G (41954836480 bytes)
disk size: 16G
cluster_size: 65536
Format specific information:
compat: 0.10
vm의 디스크 확장
[root@kvm-host ~]# virt-filesystems --long --all -h -a /nvme/vms/rocky-ml-test1698850995348.img
Name Type VFS Label MBR Size Parent
/dev/sda1 filesystem xfs - - 1.0G -
/dev/rocky/root filesystem xfs - - 16G -
/dev/rocky/swap filesystem swap - - 1.9G -
/dev/rocky/root lv - - - 16G /dev/rocky
/dev/rocky/swap lv - - - 1.9G /dev/rocky
/dev/rocky vg - - - 18G /dev/sda2
/dev/sda2 pv - - - 18G -
/dev/sda1 partition - - 83 1.0G /dev/sda
/dev/sda2 partition - - 8e 18G /dev/sda
/dev/sda device - - - 39G -
[root@kvm-host ~]# qemu-img info /nvme/vms/rocky-ml-test1698850995348.img
image: /nvme/vms/rocky-ml-test1698850995348.img
file format: qcow2
virtual size: 39G (41954836480 bytes)
disk size: 16G
cluster_size: 65536
Format specific information:
compat: 0.10
파티션 확장
[root@rocky88-mltest ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 39.1G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 18.1G 0 part
├─rocky-root 253:0 0 16.2G 0 lvm /
└─rocky-swap 253:1 0 1.9G 0 lvm [SWAP]
sr0 11:0 1 11.6G 0 rom
[root@rocky88-mltest ~]# parted /dev/sda resizepart 2 100%
Information: You may need to update /etc/fstab.
[root@rocky88-mltest ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 39.1G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 38.1G 0 part
├─rocky-root 253:0 0 16.2G 0 lvm /
└─rocky-swap 253:1 0 1.9G 0 lvm [SWAP]
sr0 11:0 1 11.6G 0 rom
pv resize(extend)
[root@rocky88-mltest ~]# pvscan
PV /dev/sda2 VG rocky lvm2 [18.07 GiB / 0 free]
Total: 1 [18.07 GiB] / in use: 1 [18.07 GiB] / in no VG: 0 [0 ]
[root@rocky88-mltest ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rocky 1 2 0 wz--n- 18.07g 0
[root@rocky88-mltest ~]# pvresize /dev/sda2
Physical volume "/dev/sda2" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
[root@rocky88-mltest ~]# pvscan
PV /dev/sda2 VG rocky lvm2 [38.07 GiB / 20.00 GiB free]
Total: 1 [38.07 GiB] / in use: 1 [38.07 GiB] / in no VG: 0 [0 ]
lv resize(extend)
[root@rocky88-mltest ~]# lvscan
ACTIVE '/dev/rocky/swap' [1.91 GiB] inherit
ACTIVE '/dev/rocky/root' [16.16 GiB] inherit
[root@rocky88-mltest ~]# lvextend -r -l +100%FREE /dev/mapper/rocky-root
Size of logical volume rocky/root changed from 16.16 GiB (4137 extents) to 36.16 GiB (9257 extents).
Logical volume rocky/root successfully resized.
meta-data=/dev/mapper/rocky-root isize=512 agcount=4, agsize=1059072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=4236288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 4236288 to 9479168
[root@rocky88-mltest ~]# lvscan
ACTIVE '/dev/rocky/swap' [1.91 GiB] inherit
ACTIVE '/dev/rocky/root' [36.16 GiB] inherit
[root@rocky88-mltest ~]# df -h | grep rocky-root
/dev/mapper/rocky-root 37G 3.5G 33G 10% /
=============================================================================
실수로 늘린 qcow2 이미지(OS영역) 사이즈 축소(롤백)하기
VM OS 영역의 Disk 이미지 크기를 32G -> 6000G -> 32G로 변경하는 내용
##### 이슈 현상 #####
## vm-guest의 disk 현황은 아래와 같다.
[root@vm-guest ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 32G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 31G 0 part
├─rhel-root 253:0 0 27.8G 0 lvm /
└─rhel-swap 253:1 0 3.2G 0 lvm [SWAP]
sdb 8:16 0 5.5T 0 disk /home
## kvm-host에 매핑된 vm-guest의 disk는 아래와 같다.
[root@kvm-host ~]# ls -lA *.img
-rw-r--r-- 1 qemu qemu 9298640896 Mar 23 19:55 rhel-disk1.img --> vm-guest의 /dev/sda disk 다.
-rw------- 1 qemu qemu 942539276288 Mar 23 19:54 rhel-disk2.img --> vm-guest의 /dev/sdb disk 다.
[root@kvm-host ~]# qemu-img info rhel-disk1.img
image: rhel-disk1.img
file format: qcow2
virtual size: 32G (6000069312512 bytes)
disk size: 8.7G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
## vm을 끄고, rhel-disk2.img의 사이즈를 기존 5.5T에서 6T로 늘리고자 명령을 수행하였는데 실수로 rhel-disk1.img의 사이즈를 늘렸버렸다.
[root@kvm-host ~]# qemu-img resize rhel-disk1.img 6000G
[root@kvm-host ~]# qemu-img info rhel-disk1.img
image: rhel-disk1.img
file format: qcow2
virtual size: 6.0T (6657199308800 bytes) --> 기존에 32G였던게 6000G(6T)가 되어 버림.
disk size: 8.7G
cluster_size: 65536
Format specific information:
compat: 0.10
[root@kvm-host ~]# virt-filesystems --long --human-readable --all -a rhel-disk1.img
Name Type VFS Label MBR Size Parent
/dev/sda1 filesystem xfs - - 1.0G -
/dev/rhel/root filesystem xfs - - 28G -
/dev/rhel/swap filesystem swap - - 3.2G -
/dev/rhel/root lv - - - 28G /dev/rhel
/dev/rhel/swap lv - - - 3.2G /dev/rhel
/dev/rhel vg - - - 31G /dev/sda2
/dev/sda2 pv - - - 31G -
/dev/sda1 partition - - 83 1.0G /dev/sda
/dev/sda2 partition - - 8e 31G /dev/sda
/dev/sda device - - - 6.0T - --> rhel-disk1.img에 맵핑된 vm-guest의 /dev/sda가 6T로 변경됨
## resize 명령으로 원래 크기로 축소를 시도해 보지만 지원되지 않는다.
[root@kvm-host ~]# qemu-img resize rhel-disk1.img 32G
qemu-img: qcow2 doesn't' support shrinking images yet
qemu-img: This image does not support resize.
##### 아래부터는 해결 방법을 안내한다. #####
## VM을 끄고 32G 크기의 rhel-temp.img 파일을 만든다.
[root@kvm-host ~]# qemu-img create -f qcow2 rhel-temp.img 32G
-> 이때 파일 사이즈가 기존보다 작으면 안된다 (xfs가 shrink(축소)가 안되기 때문)
같거나 더 커야함.
## virt-resize로 파티션 축소 복사를 한다.
[root@kvm-host ~]# virt-resize --shrink /dev/sda2 \
--LV-expand /dev/rhel/root \
rhel-disk1.img \
rhel-temp.img
[ 0.0] Examining rhel-disk1.img
**********
Summary of changes:
/dev/sda1: This partition will be left alone.
/dev/sda2: This partition will be resized from 31.0G to 31.0G. The LVM PV
on /dev/sda2 will be expanded using the ‘pvresize’ method.
/dev/rhel/root: This logical volume will be expanded to maximum size.
**********
[ 1.5] Setting up initial partition table on rhel-temp.img
[ 1.7] Copying /dev/sda1
100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
[ 5.4] Copying /dev/sda2
100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
[ 219.7] Expanding /dev/sda2 using the ‘pvresize’ method
Resize operation completed with no errors. Before deleting the old disk,
carefully check that the resized disk boots and works correctly.
## 6T 크기의 rhel-disk1.img 파일의 이름을 변경하고, rhel-temp.img 파일을 rhel-disk1.img로 변경
[root@kvm-host ~]# mv rhel-disk1.img rhel-disk1-6T.img
[root@kvm-host ~]# mv rhel-temp.img rhel-disk1.img
## rhel-disk1.img의 파티션 크기를 확인 (/dev/sda가 32G임이 확인)
[root@kvm-host ~]# virt-filesystems --long --human-readable --all -a rhel-disk1.img
Name Type VFS Label MBR Size Parent
/dev/sda1 filesystem xfs - - 1.0G -
/dev/rhel/root filesystem xfs - - 28G -
/dev/rhel/swap filesystem swap - - 3.2G -
/dev/rhel/root lv - - - 28G /dev/rhel
/dev/rhel/swap lv - - - 3.2G /dev/rhel
/dev/rhel vg - - - 31G /dev/sda2
/dev/sda2 pv - - - 31G -
/dev/sda1 partition - - 83 1.0G /dev/sda
/dev/sda2 partition - - 8e 31G /dev/sda
/dev/sda device - - - 32G -
## vm을 부팅 후 disk 사이즈를 확인한다.
[root@vm-guest ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 32G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 31G 0 part
├─rhel-root 253:0 0 27.8G 0 lvm /
└─rhel-swap 253:1 0 3.2G 0 lvm [SWAP]
sdb 8:16 0 5.5T 0 disk /home
## vm을 끄고, rhel-disk1-6T.img를 삭제
[root@kvm-host ~]# rm -f rhel-disk1-6T.img
## rhel-disk2.img의 virtual size를 6T로 늘리기
[root@kvm-host ~]# qemu-img info rhel-disk2.img
image: rhel-disk2.img
file format: qcow2
virtual size: 5.5T (6000069312512 bytes)
disk size: 878G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
[root@kvm-host ~]# qemu-img resize rhel-disk2.img 6000G
[root@kvm-host ~]# qemu-img info rhel-disk2.img
Image resized.
[root@inviten-storbak01 images]# qemu-img info rhel-disk2.img
image: rhel-disk2.img
file format: qcow2
virtual size: 5.9T (6442450944000 bytes)
disk size: 878G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
## vm 부팅 후 파일시스템 사이즈 늘리기
[root@vm-guest ~]# df -h | grep sdb
Filesystem Size Used Avail Use% Mounted on
/dev/sdb 5.5T 862G 4.7T 16% /home
[root@vm-guest ~]# blkid | grep sdb
/dev/sdb: UUID="891b6e35-5dde-4c3a-b7f3-e3baecc9d7c8" UUID_SUB="91af8ba0-ad12-4bb1-9765-e7201037a8c3" TYPE="btrfs"
[root@vm-guest ~]# btrfs filesystem resize max /home
Resize device id 1 (/dev/sdb) from 5.46TiB to max
WARNING: the new size 0 (0.00B) is < 256MiB, this may be rejected by kernel
[root@vm-guest ~]# df -h | grep sdb
/dev/sdb 5.9T 862G 5.1T 15% /home
Extend qcow img on KVM and resize lvm on VM