DigitalOcean Droplets are Linux-based virtual machines (VMs) that run on top of virtualized hardware. Each Droplet you create is a new server you can use, either standalone or as part of a larger, cloud-based infrastructure.
Resizing a server changes the resources (CPU, RAM, and disk) that a server has. There are two resizing options for Droplets:
CPU and RAM only. This option lets you change the amount of CPU and RAM available to a Droplet.
Disk, CPU, and RAM. This option lets you change the amount of CPU and RAM available to a Droplet and permanently increase the size of a Droplet’s disk.
Increasing a Droplet’s memory and CPU improves its performance. Increasing the size of its disk increases the amount of data you can store.
You can resize to any Droplet plan that has equal or more disk space as the original Droplet. That means you can increase or decrease the amount of CPU and RAM, change the type of CPU on a Basic Droplet (switch between Regular or Premium and between Intel Premium and AMD Premium), change between types of Droplets (like Basic, CPU-Optimized, and Storage-Optimized), and increase the amount of disk space.
Allow for about one minute of downtime per GB of used disk space, though the actual time necessary is typically shorter. You can check the disk storage on the filesystem with df / -h
.
Estimated downtime depends on disk usage even for resizes that don’t change the amount of disk space. This is because the Droplet may move to a new hypervisor, which transfers disk data over the network.
We strongly recommend taking a snapshot of the Droplet before resizing.
Droplets may change hypervisors during a resize, and any changes to a filesystem can lead to data loss if something goes wrong. We strongly recommend backing up the Droplet’s data before resizing. If you use snapshots, you can delete the snapshot after confirming that the resize was successful.
You cannot decrease the size of a Droplet’s disk.
Data is not always sequentially written in memory, so reducing the available space would risk data loss and filesystem corruption. For more flexibility, you can use volumes for additional data storage, which lets you detach or delete the volume if you no longer need the space.
You can resize Droplets from the control panel, using the DigitalOcean API, or using doctl
, the DigitalOcean CLI.
Before you can resize a Droplet in the control panel, you need to power it off. We recommend you do this from the command line to avoid data corruption, so SSH to your Droplet and issue the shutdown command:
sudo shutdown -h now
Next, go to the DigitalOcean Control Panel. On the Droplets page, click on the name of the Droplet you want to resize, then click the Resize option in the Droplet-specific menu.
The current Droplet size is highlighted. Choose CPU and RAM only or Disk, CPU, and RAM resizing, then select the new Droplet size. If a plan is unavailable for resizing, the control panel displays the reason.
Once the Droplet is powered down and you’ve chosen its new plan, click Resize. A progress bar displays as the resize takes place.
When the resize event is finished, click the On/Off button to power the Droplet back on.
The new size is visible below the Droplet name. Once the Droplet is booted, you can begin verifying that your services are working as expected. If you took a snapshot of the Droplet before doing the resize, you can now delete the snapshot to avoid further billing for it.
To resize Droplets using the DigitalOcean API, you need:
A DigitalOcean API token with read and write access.
The ID of the Droplet you want to resize.
The ID is in the URL of the Droplet’s detail page, which you can access by clicking its name (for example, the 12345678
in https://cloud.digitalocean.com/droplets/12345678/...
). Alternatively, you can use the API to look up Droplet IDs.
The endpoint to resize a Droplet is the Droplet actions API endpoint.
For example, the curl
command below performs a CPU and RAM only resize to a 4 GB Droplet, including automatically powering down the Droplet. Substitute your API token, Droplet ID, and desired size below.
curl -X POST -H 'Content-Type: application/json' \
-H 'Authorization: Bearer EXAMPLE947b217efb6f3ec3bdEXAMPLE' \
-d '{"type":"resize","size":"s-2vcpu-4gb"}' \
"https://api.digitalocean.com/v2/droplets/droplet_id/actions"
If you want to perform a Disk, CPU, and RAM resize with the same options as the previous example, set the disk
attribute to true
. Make sure the target size has more disk than your original Droplet.
curl -X POST -H 'Content-Type: application/json' \
-H 'Authorization: Bearer EXAMPLE947b217efb6f3ec3bdEXAMPLE' \
-d '{"type":"resize","size": s-2vcpu-4gb","disk":true}' \
"https://api.digitalocean.com/v2/droplets/droplet_id/actions"
Then, for either kind of resize, power on the Droplet when it’s complete.
curl -X POST -H 'Content-Type: application/json' \
-H 'Authorization: Bearer EXAMPLE947b217efb6f3ec3bdEXAMPLE' \
-d '{"type":"power_on"}' \
"https://api.digitalocean.com/v2/droplets/droplet_id/actions"
Learn more in the DigitalOcean API documentation on resizing.
When resizing a Droplet via CLI, you need to provide a slug to pass into the --size
flag. Use doctl compute size list
to get a list of valid slugs. You also need to power off the Droplet by calling doctl compute droplet-action power-off
before resizing.
In certain cases, a disk resize fails to resize the Droplet’s partition or filesystem. If you rerun df -h
after a disk resize and the output is unchanged, this usually indicates a problem. Use gdisk
to get more information:
gdisk -l /dev/vda
The output looks like this:
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Disk /dev/vda: 104857600 sectors, 50.0 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): C1E73477-225B-4585-8BB5-C9291E473CE4
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 52428766
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 227328 52428766 24.9 GiB 8300
Some operating systems, like CentOS, don’t come with gdisk
by default. You can either install gdisk
using the package manager (for example, sudo yum install gdisk
) or use fdisk
:
fdisk -l /dev/vda
The output looks like this:
Disk /dev/vda: 50.0 GB, 53687091200 bytes, 104857600 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
Disk label type: dos
Disk identifier: 0x000b956b
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 52428766 52426718 83 Linux
In both of the above cases, the partition is still 25 GB even though the disk is 50 GB. To resize the partition, use the growpart
command. In this command, /dev/vda
is the name of the disk, separated by a space, and followed by the number of the partition to resize, 1
.
growpart /dev/vda 1
The command to resize the filesystem depends on the filesystem type. If you don’t know what filesystem you’re using, check with df
:
df -Th /dev/vda1
You can see the filesystem type in the second column of the output. The following example output shows the filesystem type is ext4
.
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 50G 4.0G 45G 10% /
For ext3/4 filesystems, use resize2fs
to resize the filesystem.
resize2fs /dev/vda1
For XFS, use xfs_growfs
to resize the filesystem.
xfs_growfs /dev/vda1
If there is more than one partition on the disk, you may have to modify the above commands to more closely match the Droplet’s partition table. Partitions are numbered, so if you want to grow a specific partition, use its number in the growpart /dev/vda
command. For example, growpart /dev/vda 2
grows the second partition.