How Do I Resize a Cloud Server File System?

Updated on September 20, 2021
How Do I Resize a Cloud Server File System? header image

Introduction

This guide explains how to expand the file system on a Vultr cloud server instance. If you have upgraded your cloud server to a plan with a larger disk or need to expand a partition while preserving data, follow these steps. A cloud server instance is sometimes called a Virtual Private Server or VPS.

This guide uses Ubuntu 20.04 as an example but applies to any Linux distribution with the fdisk and resize2fs tools. The example server has a 10 GB virtual disk with two partitions:

  • The virtual disk vda is 10 GB.

  • The first partition vda1 is 6 GB.

  • The second partition vda2 is 4 GB.

      # lsblk
      NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      vda    252:0    0   10G  0 disk
      ├─vda1 252:1    0    6G  0 part /
      └─vda2 252:2    0    4G  0 part

As an example, this guide will remove the second partition (vda2), then expand the first partition (vda1) to fill the virtual disk. This will preserve all data on vda1 and delete all data on vda2.
Use this example as a general guide for your particular situation.

1. Make a Backup

NOTE: These operations make destructive changes to the cloud server's file system. You can lose data if you make a mistake following these directions. Make a snapshot of the server before performing any of these steps. If your data is critical, please test the snapshot before proceeding. Deploy a new test instance with the snapshot, then verify the test instance boots and has the correct data.

2. Use a Bootable Rescue ISO

Boot your server with one of our rescue ISOs so you can work on your server while the partitions are dismounted. Do not attempt these steps while your server is running normally. See our guide "Troubleshoot your VPS with Bootable ISOs" for more details.

3. Inspect the Partition Table

Use fdisk -l to view the partition table. Make a note of the partition start and end sectors.

# fdisk -l
Disk /dev/vda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xce0993d2

Device     Boot    Start      End  Sectors Size Id Type
/dev/vda1           2048 12584959 12582912   6G 83 Linux
/dev/vda2       12584960 20971519  8386560   4G 83 Linux

4. Remove the Second Partition

Launch fdisk using virtual disk /dev/vda:

# fdisk /dev/vda

Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help):

Enter i to get information about the second partition.

Command (m for help): i

Enter 2 to view the second partition. Make sure this is the partition you want to delete.

Partition number (1,2, default 2): 2

         Device: /dev/vda2
          Start: 12584960
            End: 20971519
        Sectors: 8386560
      Cylinders: 8321
           Size: 4G
             Id: 83
           Type: Linux
    Start-C/H/S: 819/2/1
      End-C/H/S: 614/3/5

Enter d to delete a partition.

Command (m for help): d

Enter 2 to delete the second partition.

Partition number (1,2, default 2): 2

Partition 2 has been deleted.

5. Delete the First Partition

Enter p to print the partition table. Make a note of the start sector, and the partition information is as expected.

Command (m for help): p
Disk /dev/vda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xce0993d2

Device     Boot Start      End  Sectors Size Id Type
/dev/vda1        2048 12584959 12582912   6G 83 Linux

Enter d to delete /dev/vda1. This command removes the partition but doesn't overwrite the data.

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

6. Create a New Partition

Follow these steps to create a new partition, which preserves the data if you use the same start sector and don't remove the existing ext4 signature.

Enter n to create a partition.

Command (m for help): n

Enter p to create a primary partition.

Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p

Enter 1 to create partition 1.

Partition number (1-4, default 1): 1

Enter the same first sector. Use the same value as the old vda1 partition, which is 2048 in this example.

First sector (2048-20971519, default 2048): 2048

Enter the last sector. The default value fills the entire available space. Type Enter unless you need to enter a smaller value. Use a value at least as large as the old vda1 partition.

Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-20971519, default 20971519): 20971519

Created a new partition 1 of type 'Linux' and of size 10 GiB.

Don't remove the ext4 signature. Enter n and Enter.

Partition #1 contains a ext4 signature.

Do you want to remove the signature? [Y]es/[N]o:

7. Write the Changes to Disk

Enter w to write the partition table to disk.

Command (m for help): w

The partition table has been altered.
Syncing disks.

Refresh the partition table with partprobe.

# partprobe

Check your work with lsblk.

# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1 1024M  0 rom
vda    252:0    0   10G  0 disk
└─vda1 252:1    0   10G  0 part /

8. Resize the File System

Use resize2fs to expand the file system size to fill the new partition.

# resize2fs /dev/vda1
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/vda1 is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 2
The filesystem on /dev/vda1 is now 2621184 (4k) blocks long.

Check the size of the file system with human-readable values.

# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1       9.4G  2.6G  6.3G  30% /    

Next Steps

Reboot the server, and verify the data is preserved. If you added or removed partitions, you may need to adjust the mount points in /etc/fstab. Refer to the Ubuntu fstab documentation or the documentation specific to your distribution.

More Resources