Shrink the disk on a virtual server with systemrescuecd utility and dd command

Modified on Thu, 8 Dec, 2022 at 2:43 PM

DON'T perform this unless absolutely necessary!
Make sure you have a system BACKUP!

1. Add new disk of the desired (target) size to the vm

2. Shutdown and boot into systemrescuecd 

3. New device should be listed, let's check that:


4. Start by > shrinking the partition(s) of disk(s) you would like to downsize 

5. Create a clone of the larger disk into smaller disk that was just added:

Depending on the size of your data, this may take some time

dd if=/dev/sdX of=/dev/sdY bs=$block-size status=progress

Be VERY careful here, IF is a SOURCE, OF is a DESTINATION, BS is a BLOCK SIZE (query this of your VM provider), STATUS is PROGRESS (to monitor the progress)

6. Once complete, verify the partitions on a new drive:

gdisk -l /dev/sdY

If you encounter Warning! Disk size is smaller than the main header indicates! 

To fix it: 

gdisk /dev/sdY

> x (experts mode)

> e (to relocate backup partition table to the end of the disk)

> w (to write changes)

> confirm

7. > Extend the partition on a new disk if possible 

8. Shutdown the vm

9. Swap the disks (to boot of the smaller clone)

10. Boot

11. Delete old (larger) disk


Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article