Tutorials Resizing storage

Resizing storage

Article series:

Before resizing storage devices, there are a couple things you need to consider. While increasing storage size is safe to do on existing devices, and can even be done while the disk is attached to a server, decreasing the storage disk is not as straightforward. Imagine shrinking a disk too much and accidentally erasing part of your data. The storage resizing instructions in this guide will help you perform these operations safely.

Safely increasing storage size

Increasing storage size is a two-phase operation. First, you will need to reserve the additional storage space by expanding your current disk device at your UpCloud control panel. Then, execute a couple of commands at the operating system level to allow your cloud server to take advantage of the added disk space.

We highly recommend making a backup of your server before resizing storage.

Start by increasing the disk size at the UpCloud control panel. You will need to shut down your cloud server before you can change the storage configuration.

When your server is powered down, open your server settings and go to the Resize tab. At the Disks resource list, adjust the storage device size by using the slider or by entering the desired value in the text field on the right.

Storage scaling

Afterwards, just click the Save changes button to confirm the change.

Once the disk size has been successfully increased, the new capacity will show up at the disk information. The disk capacity indicates the storage space allocated to the device. Next, boot up your cloud server again and continue on to perform the required operations at the OS-level for Linux in the following section or for Windows servers below that.

Increasing storage size on Linux

First, check your disk and partition names with the command below.

lsblk
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0   0  50G  0  disk
└─vda1 253:1   0  25G  0  part /

Commonly you would be resizing the primary disk, which is usually called vda. Any secondary disk would have different dev-name such as vdb, or vdc. You will notice that only the disk size is showing the whole storage space you set in the control panel, like 50 GB in the example output above. Follow through with the rest of this section to get the partition extended to use the whole disk space.

Before making any changes, you should save the current partition table by using the next command. Note that you need to replace <disk> in the examples with the disk name you are resizing as shown in the output of the previous command e.g vda.

sudo sfdisk -d /dev/<disk> > ~/part_table_backup.txt

After backing up the partition table, you will need to repartition the disk. Check the information of the current partition.

sudo sfdisk -uS -d /dev/<disk>

Look for the start sector (probably 2048) and partition ID (probably 83) in the first partition. Then use those values in the following command in place of the bolded numbers. Note that these values are not constants, and may be different in your case. See the output of the above command for your system’s correct values.

sudo echo "2048,,83,-" | sudo sfdisk --force -uS /dev/<disk>

Afterwards, reboot your server before continuing.

sudo reboot

Finish the operation by running resize2fs. Notice that the <partition> means the part on the disk you are expanding. Check the output of the lsblk command if you are unsure. For example, if your disk is called vda, then your partition is probably named vda1.

sudo resize2fs /dev/<partition>

Some distributions like CentOS 7 might be using XFS file system instead of EXT4. On these servers, you will need to use xfs_growfs to expand the partition. Install the following utility if it cannot already be found.

sudo yum install xfsprogs

Then use the command underneath to resize your partition. Make sure to include the “/” in the command as it indicates the root directory required for the operation.

sudo xfs_growfs /

With the resizing complete, reboot your server again.

sudo reboot

You are then done! The disk should now be using all of the space allocated at the control panel. You can verify this by checking the disk size with the command below.

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        50G  2.1G   46G   6% /

The example here demonstrates the process to extend a single 25GB disk to 50GB. These steps are necessary when permanently upgrading your cloud server to a higher tier monthly plan, which comes with additional disk space included.

Increasing storage size on Windows

Windows servers include management tools that can help you with resizing disks at the OS level. Log into your server for example with the Remote Desktop connection.

Start by opening the Disk Management panel. Right-clicking the Windows start icon and selecting it from the list, or type diskmgmt.msc in the search or run and then pressing enter.

The management application will indicate the unallocated space available on your disk with a black colour bar above the segment. Right-click the primary partition you wish to resize and select Extend volume.

Windows extend volume

In the wizard, the default values will extend the partition to use up all of the unallocated storage. Simply click Next on first and second window unless you wish to only extend a certain amount. On the last screen check that the values are correct and click Finish to confirm the changes.

Windows extend volume wizard

Once the requested operation is complete, the Disk Management panel will update to show the partition you extended now occupying the space previously unallocated. You are then done and can close the Disk Management window. The added storage space is ready to use with no additional restarts required.

Safely decreasing storage size

Decreasing the storage size involves creating a new storage disk with the desired size, transferring all data from the old drive to the new one, and then deleting the old storage drive. This way all data is kept secure during the operation and everything gets safely copied as long as it can fit in the target space.

We highly recommend making a backup of your server before resizing storage.

This is currently not supported on CentOS servers. Make sure to create a backup of your system disk and proceed with caution.

Start by creating a new disk with a preferred size in the UpCloud control panel, note that your server must be powered down before the required options become available.

Go to the Resize section in your server settings and click the Add new disk button underneath the list of your existing storage drives.

In the following dialogue window, select Create new disk, give the disk the required size and a name, then click the Add a disk button to confirm.

Create new smaller disk

You should now see a second storage device below the original.

After the attaching process is complete, start your server up again.

Once your server is up and running you can continue the resizing process at the OS level.

Decreasing storage size on Linux

Check the name of the newly added storage disk using the following command.

lsblk
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0   0  50G  0  disk
└─vda1 253:1   0  50G  0  part /
vdb    253:16  0  25G  0  disk

The disk you are looking for is usually the last on the list, and will not have partitions on it like vdb in the example above. Create a new partition on the new disk using fdisk by replacing the <disk> in the command below with the new disk name.

sudo fdisk /dev/<disk>

The utility will open its own command prompt showing Command (m for help): instead of the usual [email protected]:/$. The following one letter commands will be entered in there.

First, start the new partition wizard with n. Use default values by just pressing enter on each of the options, or type in the required parameter if no default value is given.

> n
# Primary p, partition 1, start sector 2048, end sector at disk end.

With the partition created, make it bootable with the command a.

> a
# Partition 1 if asked.

Afterwards, you can check that the partition was configured properly and is marked bootable with p, it should show something along the lines of the example underneath.

> p
Device     Boot Start      End  Sectors  Size Id Type
/dev/vdb1  *     2048 52428799 52426752   25G 83 Linux

If everything is in order, write partition changes to the disk with command w. In case there was a mistake in the setup, delete the faulty partition by entering the command d and then create a new one again with command n.

> w

Once fdisk has finished writing the partition table to the disk it will exit and return you to the usual command prompt. Check that the new partition shows up using the lsblk -command.

lsblk
NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda    253:0   0  50G  0  disk
└─vda1 253:1   0  50G  0  part /
vdb    253:16  0  25G  0  disk
└─vdb1 253:17  0  25G  0  part

You should see both disks and their partitions with their correct sizes, disks will be named like vda or vdb and their partitions with the added partition identifier number e.g. vda1 or vdb1. Notice that some of the commands below require you to enter the disk name while others use the partitions.

Set up the partition with a file system type appropriate for your server. Ubuntu and other Debian variants should use EXT4, while CentOS 7 machines might prefer using XFS instead.

# Creating an EXT4 file system on Debian, Ubuntu or CentOS 6.5
# Check your current disk's UUID.
sudo cat /etc/fstab
# Replace the <UUID> in the next command with it.
sudo mkfs.ext4 -U <UUID> /dev/<partition>
# Creating an XFS file system on CentOS 7.0
sudo mkfs.xfs /dev/<partition>

Afterwards, mount the new storage disk on your system so that you can copy the files over.

sudo mount /dev/<partition> /mnt

We recommend using rsync to copy such large amounts of files that your operating system might contain. It provides convenient options for copying all the files from your current disk to the new one, while also keeping track of the copy process allowing you to continue from where you left off if you have to cancel the copying for some reason.

Install rsync if you do not already have it with

sudo apt-get install rsync
sudo yum install rsync

The rsync command here uses the options for verbose output so that you can easily see what is getting copied. However, having a large amount of output on the display might slow down the process with a larger number of small files.

You can disable the printout by omitting the parameter –v from the command, or having the output redirected to a file by adding ‘> ~/filename.txt‘ to the end of the command.

sudo rsync -avxHAX / /mnt

Once the copy process has finished, check the disk space usage to see that everything was copied. The used space will not be exactly the same, but the difference should be minimal.

df

Lastly, install a boot manager on the new disk so that you can boot again with a new main storage device. You need to install the correct version of GRUB depending on your system.

Commonly Ubuntu and Debian use the first version.

sudo grub-install /dev/<disk> --root-directory=/mnt --recheck

While at least the newer CentOS and other Red Hat variants opt for the newer version.

sudo grub2-install /dev/<disk>

You should see a confirmation like in the example output below.

Installing for i386-pc platform.
Installation finished. No error reported.

CentOS 7 users should now set the UUID for the new disk, check it from the /etc/fstab with the following command, and then replace <UUID> in the next command with it while selecting the new disk partition, vdb1 for example.

sudo umount /mnt
sudo cat /etc/fstab
sudo xfs_admin -U <UUID> /dev/<partition>

After that, shut down your server either with the Shutdown request at your UpCloud Control Panel or by using the following command in your server terminal

sudo shutdown -h now

With your server powered down, go to the Resize tab again and click the eject icon on the former main disk, then start up your server. Confirm that all of your data was copied successfully and is available on the new disk.

In case the server cannot find the boot section and fails to start. Shut down the server and attach the original disk again to boot from. Then reinstall the GRUB and try booting from the new disk again by detaching the old disk.

Afterwards, you can delete the old disk at your UpCloud control panel in the Storage device section.

Decreasing storage size on Windows

Start by open the Disk Management panel with typing diskmgmt.msc in search or run and then pressing enter.

Initiate the newly attached disk by selecting MBR and clicking OK. If the initialization popup does not appear, the disk is probably listed as Offline, right-click the disk and select Online to enable the new disk.

Next, you will need to reduce the partition size of your larger disk small enough to fit on the new smaller disk. Right-click the partition and select Shrink Volume.

Windows shrink volume

In the wizard enter the required amount to shrink to the editable field. By default, the amount shows an estimate of the maximum available space to shrink, but the value might be too large. Adjust the number so that the total size after shrinking in the last field shows at least a couple of GB less than the total size of the newly attached disk.

For example, if your current disk is 80GB total and the new disk is 50GB, set the amount to shrink around 40GB. When ready, click the Shrink button to confirm.

If the operation fails, it is probably because there was not enough unused space. Try resizing again while entering a smaller amount to shrink.

Windows shrink volume wizard

Once your current partition is small enough to fit on the new disk you will need to copy the files over. An easy way to accomplish this is to take advantage of the mirroring feature in the Disk Manager. First, right-click the System Reserve partition and select Add Mirror. In the next window, select the new disk and click the Add Mirror button to create the mirror.

Windows add mirror

If asked, confirm the disk conversion from Basic to Dynamic by clicking Yes.

Repeat the mirroring for your main partition, then wait for the files to get copied over. This is indicated by the resynchronizing percentage.

While the partitions are syncing, open your cloud server’s System Configuration by typing in the search or run msconfig and pressing enter. Go to the Boot tab and set the secondary plex as the default.

Windows set default boot

Next, click Apply to confirm changes and OK to close the window. If asked, choose to Exit without restart.

When the partition mirrors have finished the resynchronization, shut down your server.

With your server powered down, go to the Resize tab again and click the eject icon on the former main disk.

Detach original disk

Then start up your server. Confirm that all of your data was copied successfully and is available on the new disk.

Once connected again, open the Disk Management panel. Right-click the partitions on the second disk that is now labelled Missing and select Remove Mirror to clear the error messages. Do the same for both the system reserve and partitions.

Windows remove mirror

After this, you can extend the new main partition. Right-click the primary partition you wish to resize and select Extend volume. 

In the wizard, use the default values to extend the partition using up the unallocated storage. Simply click Next on first and second window unless you wish to only extend a certain amount. On the last screen check that the values are correct and click Finish to confirm the changes.

Lastly, open the System Configuration again by typing in the search or run msconfig and pressing enter. Go to the Boot tab and delete the old boot section.

Windows delete old boot

Once you are certain your cloud server is working as it should you can delete the old disk at your UpCloud control panel in the Storage device section.

Leave a Reply

Your email address will not be published. Required fields are marked *

Locations

Helsinki (HQ)

In the capital city of Finland, you will find our headquarters, and our first data centre. This is where we handle most of our development and innovation.

London

London was our second office to open, and a important step in introducing UpCloud to the world. Here our amazing staff can help you with both sales and support, in addition to host tons of interesting meetups.

Seattle

Seattle is our 4th and latest office to be opened, and our way to reach out across the pond to our many users in the Americas.

Singapore

Singapore was our 3rd office to be opened, and enjoys one of most engaged and fastest growing user bases we have ever seen.