This site contains affiliate links — we may earn a commission if you sign up through them.

DigitalOcean Volumes Guide 2026 — Block Storage for Scaling

A practical guide to DigitalOcean Volumes block storage covering pricing, attaching, mounting, resizing, and snapshots for developers.

DigitalOcean Volumes Guide 2026 — Block Storage for Scaling

When the SSD space that comes with a Droplet isn't enough, instead of resizing the entire Droplet to a more expensive plan, DigitalOcean Volumes is independent block storage that can be attached to any Droplet via DigitalOcean's internal network on demand. This article walks you through the concepts, pricing, creation, attachment, mounting, formatting, all the way to resizing and snapshots, complete with real doctl commands ready to use immediately.

What are Volumes? How They Differ from Droplet Disk

DigitalOcean Volumes is an SSD-based block storage service that is completely independent of Droplets. It connects to a Droplet via DigitalOcean's private network—not a disk physically inserted in the machine. The key difference from Droplet disk (the disk that comes with a Droplet plan) is that Droplet disk is bound to a Droplet for its entire lifecycle, with a fixed size depending on the plan you choose, such as the $6/month Droplet Basic plan (1 GiB RAM, 1 vCPU) comes with 25 GB SSD, the $12/month plan (2 GiB RAM) comes with 50 GB, the $24/month plan (4 GiB RAM, 2 vCPU) comes with 80 GB, and if you delete the Droplet the data on that disk is gone instantly. In contrast, Volume is an independent resource with its own lifecycle. It can be created separately, attached to any Droplet in the same region, detached and re-attached to a different Droplet, and even if you delete the Droplet that is using it, the Volume persists with all its data intact until you explicitly delete it. This concept is similar to AWS's EBS or Google Cloud's Persistent Disk—it separates compute from storage so you can scale or move data without affecting the Droplet itself. The main reason developers choose Volumes over upgrading the entire Droplet plan is the scenario where CPU/RAM is already sufficient but you need more storage capacity. For example, storing user-uploaded files, storing a database's data directory, archiving long-term logs, or serving as media storage for a web application. Separating Volumes from the main disk also makes it clearer to plan backup and storage scaling independently from compute planning.

Pricing: $0.10/GiB per Month

Worth highlighting here — digitalOcean charges Volumes at $0.10 per GiB per month, with billing calculated based on actual usage prorated hourly, just like Droplets. This means if you create a 100 GiB Volume the cost is approximately $10 per month, if you create 500 GiB it's approximately $50 per month, and if you create 1,000 GiB (1 TiB) it's approximately $100 per month. This rate is fixed and does not vary by region, and is itemized separately from Droplet costs but shown together on the same invoice. A cost consideration to keep in mind is that Volumes start incurring charges the moment creation completes, regardless of whether it's attached to a Droplet yet. And charges continue even if the Volume is detached from its Droplet. So if a Volume is no longer needed you should delete it to stop incurring charges, as the system won't auto-delete it. Another point to plan ahead is that Volumes can be expanded in size later, but cannot be shrunk. So estimating the initial size as close as possible to actual needs helps control costs better than creating oversized Volumes preemptively. For teams needing budget projections, verify the current pricing directly from DigitalOcean's website since the figures in this article are from July 2026.

Create and Attach Volumes to Droplets

Creating a Volume can be done two ways: through the Control Panel web interface and via the doctl command for automation. On the Control Panel, go to the Volumes menu, select Create Volume, specify the size, choose a region matching your Droplet (because Volumes can't be attached across regions), choose a filesystem you want the system to auto-format (ext4 or XFS), and select the destination Droplet to attach it in one step. For the CLI route, use doctl compute volume create data-volume-01 --region sgp1 --size 100GiB --fs-type ext4 to create a 100 GiB Volume in Singapore region pre-formatted as ext4. Then attach it to a Droplet with doctl compute volume-action attach <volume-id> <droplet-id>, where you need to look up the volume-id and droplet-id first using doctl compute volume list and doctl compute droplet list. One constraint to be aware of is that a Volume typically is designed to be attached to one Droplet at a time, not shared storage that multiple Droplets can access concurrently. If you need multiple Droplets to access the same file set simultaneously, consider Spaces Object Storage or Network File Storage instead. Volume naming should be descriptive—include environment and region in the name, such as db-data-prod-sgp1 to make management easier when you have multiple Volumes in the same account. And always verify the region matches your Droplet before clicking create, because this is a required constraint that can't be changed later without snapshots.

Key takeaway: Must create the Volume in the same region as the Droplet you'll attach it to

Mount and Format on Linux

After attaching a Volume to a Droplet, the operating system sees it as a new block device, but you must mount it yourself before using it. SSH into the Droplet and check the device with lsblk or view it via ls -l /dev/disk/by-id/, which shows names in the format scsi-0DO_Volume_<volume-name>. Using the path from /dev/disk/by-id/ instead of referencing /dev/sda or /dev/sdb directly is critical, because device names like sdX can shift after reboot if you have more than one Volume. If you created the Volume without having the system auto-format it, you must format it first with sudo mkfs.ext4 -F /dev/disk/by-id/scsi-0DO_Volume_data-volume-01 (or mkfs.xfs for XFS), running this command only once on a blank Volume. Never re-run it on a Volume that already has data because it will erase everything. Then create a mount point with sudo mkdir -p /mnt/data-volume-01 and mount it with sudo mount -o discard,defaults /dev/disk/by-id/scsi-0DO_Volume_data-volume-01 /mnt/data-volume-01. Mounting this way disappears after a Droplet reboot, so add it to /etc/fstab to auto-mount on every boot, adding a line like /dev/disk/by-id/scsi-0DO_Volume_data-volume-01 /mnt/data-volume-01 ext4 defaults,nofail,discard 0 0. The critical point is always including the nofail option to prevent the Droplet from hanging in emergency mode if the Volume is detached or temporarily unavailable on boot. The discard option helps the filesystem support TRIM commands for SSD-based storage. After editing fstab, test with sudo mount -a before rebooting to ensure there are no syntax errors.

Resize and Move Volumes Between Droplets

From our hands-on testing — when a Volume starts running out of space, you can expand its size both from the Control Panel and via doctl compute volume-action resize <volume-id> --region <region> --size <new-size>. A critical constraint is that resize only goes in one direction—you can only expand, never shrink a Volume. If you truly need a smaller Volume you must create a new one and migrate the data yourself using tools like rsync. When DigitalOcean resizes, it expands only the block device itself; the filesystem inside won't recognize the new space until you explicitly tell it to. For ext4, run sudo resize2fs /dev/disk/by-id/scsi-0DO_Volume_data-volume-01, or for XFS use sudo xfs_growfs /mnt/data-volume-01 (note: XFS takes the mount point, not the device path). If you skip this step the new space won't be usable even though the resize succeeded. To move a Volume to a different Droplet, first detach it from the old Droplet using doctl compute volume-action detach <volume-id> <droplet-id>, then attach to the destination Droplet in the same region. All data transfers intact. But if you need to move across regions directly it's not possible because Volumes are bound to the region they were created in. The workaround is to snapshot the original Volume first, then use that snapshot to create a new Volume in the destination region. Plan the detach/attach window in advance because applications using the Volume data won't be able to access it while it's unattached.

Volume Snapshots: $0.06/GiB

A Volume Snapshot is a point-in-time copy of a Volume's data, kept for backup or later cloning into a new Volume. Snapshots are billed separately from active Volumes at $0.06 per GiB per month, cheaper than the active Volume rate of $0.10 per GiB per month, making long-term backup storage via snapshots more cost-effective than keeping standby Volumes. Create snapshots via the Control Panel on the Volume page by clicking Take Snapshot and naming it, or automate with doctl compute volume snapshot create <volume-id> --snapshot-name data-volume-01-2026-07-17. For automation via scripts or cron jobs, always include a timestamp in the snapshot name so you can easily manage retention and review history when snapshots accumulate. Once you have a snapshot, create a new Volume from it using doctl compute volume create data-volume-restored --region sgp1 --size 100GiB --snapshot-id <snapshot-id>, which gives you a new Volume with identical data to the source snapshot. This works for restoring after a failure, cloning data to another Droplet for testing, or migrating a Volume across regions as mentioned earlier. A best practice is to snapshot before risky changes like database version upgrades or large migrations, so you have a clear rollback point if something goes wrong.

Common Mistakes and How to Fix Them

The most common mistake is forgetting the nofail option when adding a Volume to /etc/fstab. The consequence is that if the Volume is detached for any reason or has a temporary connection problem on boot, the Droplet will hang in emergency mode and fail to start normally. Prevention is simple: always include nofail in every fstab entry you add. The second mistake is referencing devices by name directly like /dev/sda or /dev/sdb instead of using paths from /dev/disk/by-id/. With multiple Volumes attached to one Droplet or repeated detach/attach cycles, the sdX device names can shift after reboot, causing you to mount the wrong Volume and risk accidentally overwriting data. The third mistake is not monitoring available space on the Volume. This leads to disk suddenly running full with no warning, causing applications to fail writing files or databases to stop working. You should enable a Monitoring Agent and set up Alert Policies to notify you when space usage approaches capacity so you can plan a resize in advance. The fourth mistake is trying to attach a Volume to a Droplet in a different region, which always fails because Volumes are bound to the region they were created in. And the fifth common mistake is misunderstanding that resize can shrink a Volume, when it only expands. If you truly need to shrink you have to create a smaller Volume and migrate the data manually with tools like rsync.

Best Practices

For production workloads, always separate data Volumes from the Droplet's main OS disk so you can backup, resize, or move data independently without impacting the Droplet's operating system and configuration. For example, keep a database's data directory on a separate Volume while the OS and application live on the main disk as usual. Name and tag Volumes clearly to indicate their purpose—include environment (dev/staging/prod) and region in the name, making it easier for your team to manage many Volumes in one account and reducing the risk of accidentally deleting or detaching the wrong one. On the backup side, set up automatic snapshot schedules via cron jobs calling doctl compute volume snapshot create regularly—daily or weekly depending on data importance—and establish a retention policy to delete old snapshots you no longer need to control costs, since snapshots bill continuously by size just like Volumes. Enable a Monitoring Agent on your Droplet and configure Alert Policies to notify you when Volume space usage nears capacity so you can plan a resize ahead of time before problems occur. Also avoid placing swap files on Volumes because the network latency of the internal connection is higher than local disk, making it unsuitable for the high random access speeds swap demands. Lastly, periodically test your restore process from snapshots even without an emergency to ensure snapshots actually work when you need them, and keep documentation mapping Volumes to their Droplets so your team can find this information easily as you grow and accumulate more Volumes.

Get $200 Free Credit →

Frequently Asked Questions

Can Volumes move across regions?
Not directly. Volumes are bound to the region they were created in. The way to move is to snapshot the original Volume first, then create a new Volume in the destination region from that snapshot.
Can one Volume attach to multiple Droplets at once?
Not typically. Volumes are designed to attach to one Droplet at a time. If you need multiple Droplets to access the same files concurrently, consider using Spaces Object Storage instead.
If I delete a Droplet, does the attached Volume disappear too?
No. Volumes have an independent lifecycle separate from Droplets. Data remains completely intact until you explicitly delete the Volume, but you continue being charged for it if you don't delete it.
Do I need to shut down the Droplet before resizing a Volume?
Not necessarily, but you should unmount or backup the data beforehand for safety. After resize completes, you must run resize2fs (ext4) or xfs_growfs (XFS) to expand the filesystem to use the new space.
Should I choose ext4 or XFS for a Volume?
Both work fine. ext4 is simpler and suits general use with small-to-medium files. XFS is better for large files or databases needing higher performance and scalability.
What is the difference between Snapshot and Resize?
Snapshot creates a point-in-time copy of Volume data for backup or cloning a new Volume. Resize expands the original Volume's capacity directly and has nothing to do with backup.