How to script parted to resize partition on running root filesystem?

9,720

I've figured out how to do this. The key is kpartx to make the LVM usable by parted outside the VM (so on the Hypervisor host). Then you modify the partition size, then you boot the guest and increase the filesystem.

So if you have a guest named TESTVM that has its storage at /dev/VMS/VIRT-TESTVM, you'd do the following on the hypervisor host:

# kpartx -a /dev/VMS/VIRT-TESTVM
# parted /dev/VMS/VIRT-TESTVM rm 1
# parted /dev/VMS/VIRT-TESTVM mkpart -a optimal p ext4 0% 100% 
# kpartx -d /dev/VMS/VIRT-TESTVM

Then simply start the machine, login and do

# resize2fs /dev/vda1 

Reboot again just to be on the safe side.

Share:
9,720

Related videos on Youtube

Anonymouslemming
Author by

Anonymouslemming

Updated on September 18, 2022

Comments

  • Anonymouslemming
    Anonymouslemming over 1 year

    I have a VM template that I use for building other VMs using virt-clone / KVM. The VM template is 4GB to save space. The storage for VMs that I build from this are on iSCSI targets or LVM volumes (depending on function), and their filesystem sizes differ depending on the role of the machine.

    After creating a new VM from the template, I have to resize the root partition if I'm building something that will need more than 4GB of disk. This works fine while using parted interactively, but not scripted. When trying to remove the file system, I'm asked if I want to continue despite using '-s'

    The output below shows a failed script attempt and a working interactive session to achieve this.

    What's the best way about resizing my root partition post-clone that can be simply scripted ?

    Failed parted script attempt

    Partition after cloning

    # parted /dev/vda p
    Model: Virtio Block Device (virtblk)
    Disk /dev/vda: 10.7GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start   End     Size    Type     File system  Flags
     1      1049kB  4294MB  4293MB  primary  ext4         boot
    

    Script removal attempt

    # parted /dev/vda -s rm 1
    Warning: Partition /dev/vda1 is being used. Are you sure you want to continue?
    #
    

    Partition after failed removal

    # parted /dev/vda p
    Model: Virtio Block Device (virtblk)
    Disk /dev/vda: 10.7GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start   End     Size    Type     File system  Flags
     1      1049kB  4294MB  4293MB  primary  ext4         boot
    

    Working interactive resize (followed by reboot)

    Partition before removal

    # parted /dev/vda p
    Model: Virtio Block Device (virtblk)
    Disk /dev/vda: 10.7GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start   End     Size    Type     File system  Flags
     1      1049kB  4294MB  4293MB  primary  ext4         boot
    

    Removal and creation of new partition that uses all of disk

    # parted /dev/vda
    (parted) rm 1
    Warning: Partition /dev/vda1 is being used. Are you sure you want to continue?
    Yes/No? y
    Error: Partition(s) 1 on /dev/vda have been written, but we have been unable to
    inform the kernel of the change, probably because it/they are in use.  As a
    result, the old partition(s) will remain in use.  You should reboot now before
    making further changes.
    Ignore/Cancel? I
    (parted) mkpart p ext4 1 -1
    (parted)
    
    # parted /dev/vda p
    Model: Virtio Block Device (virtblk)
    Disk /dev/vda: 10.7GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start   End     Size    Type     File system  Flags
     1      1049kB  10.7GB  10.7GB  primary  ext4
    

    Filesystem resize

    # resize2fs /dev/vda1
    resize2fs 1.42.9 (4-Feb-2014)
    Filesystem at /dev/vda1 is mounted on /; on-line resizing required
    old_desc_blocks = 1, new_desc_blocks = 1
    The filesystem on /dev/vda1 is now 2621184 blocks long.
    
    # df -kh  .
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vda1       9.8G  1.6G  7.9G  17% /
    
    • NukaRakuForgotEmail
      NukaRakuForgotEmail about 9 years
      If you haven't already, you should consider having a minimal PV that's, for example, 4GB. If you need more space, add a new disk as a PV and extend the LV. You can't get a better LVM use case than that.
    • Anonymouslemming
      Anonymouslemming about 9 years
      The PVs and LVs aren't seen by the virt though - the virt just sees vda, which means that I still have to resize the partition and the associated filesystem.
    • NukaRakuForgotEmail
      NukaRakuForgotEmail about 9 years
      Ah, I see. Missed that detail.