one of my KVM VMs keeps data on BTRFS on top of encrypted LUKS drive. that drive is a block device passed from virtualization server to VM… a block device which is mdadm software RAID10. below – steps taken to resize it.
how is the block device passed to the VM? by using driver’s type=’raw’, here’s the relevant part of /etc/libvirt/qemu/myvm.xml:
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/mnt/kvm/myvm/myvm-disk1.qcow2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
</disk>
<disk type='block' device='disk'>
<driver name='qemu' type='raw'/>
<source dev='/dev/md127'/>
<target dev='vdb' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
</disk>
...
that’s how block devices look like on the virtualization host:
root@virtserver ~ # lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 5.5T 0 disk
├─sda1 8:1 0 1G 0 part
│ └─md0 9:0 0 1022M 0 raid1 /boot
├─sda2 8:2 0 10G 0 part
│ └─md1 9:1 0 10G 0 raid1 /
├─sda3 8:3 0 1M 0 part
└─sda4 8:4 0 2.1T 0 part
└─md127 9:127 0 4.2T 0 raid10
sdb 8:16 0 5.5T 0 disk
├─sdb1 8:17 0 1G 0 part
│ └─md0 9:0 0 1022M 0 raid1 /boot
├─sdb2 8:18 0 10G 0 part
│ └─md1 9:1 0 10G 0 raid1 /
├─sdb3 8:19 0 1M 0 part
└─sdb4 8:20 0 2.1T 0 part
└─md127 9:127 0 4.2T 0 raid10
sdc 8:32 0 5.5T 0 disk
└─sdc1 8:33 0 2.1T 0 part
└─md127 9:127 0 4.2T 0 raid10
sdd 8:48 0 5.5T 0 disk
└─sdd1 8:49 0 2.1T 0 part
└─md127 9:127 0 4.2T 0 raid10
root@virtserver ~ # parted /dev/sda print
Model: ATA HGST HUS726060AL (scsi)
Disk /dev/sda: 6001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: pmbr_boot
Number Start End Size File system Name Flags
3 1049kB 2097kB 1049kB bios_grub
1 2097kB 1076MB 1074MB raid
2 1076MB 11.8GB 10.7GB raid
4 11.8GB 2299GB 2287GB backup
root@virtserver ~ # parted /dev/sdb print
Model: ATA HGST HUS726060AL (scsi)
Disk /dev/sdb: 6001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: pmbr_boot
Number Start End Size File system Name Flags
3 1049kB 2097kB 1049kB bios_grub
1 2097kB 1076MB 1074MB raid
2 1076MB 11.8GB 10.7GB raid
4 11.8GB 2299GB 2287GB backup
root@virtserver ~ # parted /dev/sdc print
Model: ATA HGST HUS726060AL (scsi)
Disk /dev/sdc: 6001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2287GB 2287GB backup
root@virtserver ~ # parted /dev/sdd print
Model: ATA HGST HUS726060AL (scsi)
Disk /dev/sdd: 6001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 2287GB 2287GB backup
root@virtserver ~ # cat /proc/mdstat
Personalities : [raid10] [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1] sda1[0]
1046528 blocks super 1.2 [2/2] [UU]
md1 : active raid1 sdb2[1] sda2[0]
10476544 blocks super 1.2 [2/2] [UU]
md127 : active raid10 sda4[0] sdb4[1] sdd1[3] sdc1[2]
4466530304 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
bitmap: 0/17 pages [0KB], 131072KB chunk
unused devices: <none>
and that’s what the myvm sees:
root@myvm:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 254:0 0 2.8G 0 disk └─vda1 254:1 0 2.8G 0 part / vdb 254:16 0 4.2T 0 disk └─backup 253:0 0 4.2T 0 crypt /mnt/backup
as you can see on each of the physical drives – sda-sdd – there’s over 3700GB of unallocated space. my aim is to use some of that space and increase size of /dev/mapper/backup on myvm by enlarging /dev/md127 on the virtualization server.
#1 – shut down the myvm virtual machine. possibly unnecessarily.
#2 – resize the sda4, sdb4, sdc1, sdd1 by adding 2000GB of space to each:
root@virtserver ~ # parted /dev/sda GNU Parted 3.2 Using /dev/sda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Model: ATA HGST HUS726060AL (scsi) Disk /dev/sda: 6001GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: pmbr_boot Number Start End Size File system Name Flags 3 1049kB 2097kB 1049kB bios_grub 1 2097kB 1076MB 1074MB raid 2 1076MB 11.8GB 10.7GB raid 4 11.8GB 2299GB 2287GB backup (parted) resizepart 4 End? [2299GB]? 4299GB (parted) Information: You may need to update /etc/fstab. root@virtserver ~ # parted /dev/sdb GNU Parted 3.2 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Model: ATA HGST HUS726060AL (scsi) Disk /dev/sdb: 6001GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: pmbr_boot Number Start End Size File system Name Flags 3 1049kB 2097kB 1049kB bios_grub 1 2097kB 1076MB 1074MB raid 2 1076MB 11.8GB 10.7GB raid 4 11.8GB 2299GB 2287GB backup (parted) resizepart 4 End? [2299GB]? 4299GB (parted) Information: You may need to update /etc/fstab. root@virtserver ~ # parted /dev/sdc GNU Parted 3.2 Using /dev/sdc Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Model: ATA HGST HUS726060AL (scsi) Disk /dev/sdc: 6001GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 2287GB 2287GB backup (parted) resizepart 1 End? [2287GB]? 4287GB (parted) Information: You may need to update /etc/fstab. root@virtserver ~ # parted /dev/sdd GNU Parted 3.2 Using /dev/sdd Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Model: ATA HGST HUS726060AL (scsi) Disk /dev/sdd: 6001GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 2287GB 2287GB backup (parted) resizepart 1 End? [2287GB]? 4287GB (parted) Information: You may need to update /etc/fstab.
#3 resize mdadm raid on top of sda4, sdb4, sdc1, sdd1:
root@virtserver ~ # dmesg
[32503.362525] md127: detected capacity change from 4573727031296 to 8573726752768
[32503.405402] md: resync of RAID array md127
root@virtserver ~ # cat /proc/mdstat
Personalities : [raid10] [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1] sda1[0]
1046528 blocks super 1.2 [2/2] [UU]
md1 : active raid1 sdb2[1] sda2[0]
10476544 blocks super 1.2 [2/2] [UU]
md127 : active raid10 sda4[0] sdb4[1] sdd1[3] sdc1[2]
8372780032 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
[==========>..........] resync = 54.5% (4567488064/8372780032) finish=310.4min speed=204265K/sec
bitmap: 15/32 pages [60KB], 131072KB chunk
unused devices: <none>
#4 start the myvm VM again
root@virtserver ~ # virsh start myvm
#5 on myvm – open the luks container and resize it
root@myvm:~# cryptsetup luksOpen /dev/vdb backup Enter passphrase for /dev/vdb: root@myvm:~# cryptsetup resize backup -v Enter passphrase for /dev/vdb: Key slot 0 unlocked. Command successful. root@myvm:~# mount /dev/mapper/backup /mnt/backup/ root@myvm:~# btrfs filesystem resize max /mnt/backup/ Resize '/mnt/backup/' of 'max' root@myvm:~# dmesg [ 130.727318] BTRFS info (device dm-0): new size for /dev/mapper/backup is 8573709975552 root@myvm:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 254:0 0 2.8G 0 disk └─vda1 254:1 0 2.8G 0 part / vdb 254:16 0 7.8T 0 disk └─backup 253:0 0 7.8T 0 crypt /mnt/backup
there we have it – more space available for the /mnt/backup!