[PVE-User] BTRFS...

Adam Thompson athompso at athompso.net
Tue Feb 2 20:07:26 CET 2016



On 16-02-02 11:24 AM, Gilberto Nunes wrote:
> Hi
>
> And what if I work with BTRFS inside the VM???
> The FS where VM image lay could be any other FS... Currently, I am use 
> GlusterFS + XFS.
> I need LVM or BRTFS inside the VM, in order to resize disk partition...
> And I am between LVM or BRTFS....

Only if you need to do *online* resizes (without unmounting the 
filesystem).  If you can live with unmounting the filesystem, plain old 
ext3 (and ext4) can do what you need.  Of course, if it's the root 
filesystem you need to resize, the only way to unmount it is to shut 
down the VM and reboot it in single-user mode.  I think you might need 
to boot off a CD to resize the root fs, can't remember if there's a way 
around it.

But let's say you create your VMs with two vdisks: one for boot+root 
(these don't even have to be separate partitions), one for /home.
To make this a concrete example, let's say Disk 0 (sda) is 10GB and Disk 
1 (sdb) is 10GB.
Ensure the VM has hot-plugging enabled for disk devices.
Let's say /dev/sda1 (/) is ext4 and /dev/sdb1 (/home) is ext4.  No LVM 
and no BTRFS.
/dev/sdb is MBR-partitioned for simplicity.
Make sure no processes at all are using /home.
Unmount /home.
In PVE management UI, resize Disk 1 to (for example) 20GB.
If the Linux kernel doesn't pick up the change immediately, make sure 
you are running acpid, and you may want to run "rescan-scsi-bus.sh 
--remove --forcerescan" (in RPM: sg3_utils, and in DEB: scsitools) 
and/or "sfdisk --re-read /dev/sdb".
Use fdisk/gdisk/parted/whatever to grow the partition.
Now run "resize2fs /dev/sdb1" and it'll grow the filesystem to the new 
disk size.
Finally remount /home and restart any services depending on it.


Instead, if you used LVM, you could just add a new SCSI disk entirely 
(not resize the existing one), then "pvcreate /dev/sdc" + "vgextend 
my-existing-vg-name /dev/sdc" + "lvextend --extents +100%FREE --resizefs 
my-vg-name/mv-lv-name /dev/sdc".  It's definitely 
simpler/easier/less-disruptive.

(You can also resize the PV in LVM, but if zero-downtime is the goal, 
it's much easier to keep adding new SCSI devices and extending the VG+LV.)

Or do you need to *shrink* the disks?  That's a whole different story... 
I don't think PVE can even shrink virtual disks in the first place.  You 
can do the first scenario I described above, except instead, use 
"resize2fs -M /dev/sdb1" to shrink it instead.

If you consistently need to shrink filesystems, I would use ext3 on top 
of LVM; use "resize2fs -M /dev/vg/lv" first, then "lvreduce --size -10G 
/dev/vg/lv" but be REALLY careful with the size you provide to 
lvreduce!  (You can also use lvresize, there isn't much difference.)

Lastly, if you're using QCOW2 for VM disks, that's a whole 'nother level 
you have to worry about if you're trying to shrink disks; if you're 
using virt-scsi, I think you can do an "fstrim /home" first to signal 
that some blocks can be reclaimed, then just compact the QCOW2 file.  
(See https://pve.proxmox.com/wiki/Shrink_Qcow2_Disk_Files for the older 
approach.)  Then you have to take the VM offline, copy the QCOW2 out to 
a smaller, compacted, file, and reboot the VM with that file attached 
instead of the original QCOW2 file.


You'll need to provide *exact* details of what your actual goal is here, 
if nothing I've said so far covers it.

-Adam




More information about the pve-user mailing list