VPS Snaps

We earn commissions when you shop through the links below.

DigitalOcean snapshots: take, restore and automate Droplet snapshots

A DigitalOcean snapshot is an on-demand, full image of a Droplet's disk that stays in your account until you delete it. Take one from the Droplet's Backups & Snapshots tab or with doctl compute droplet-action snapshot, power the Droplet off first if it runs a database, and restore by rebuilding the Droplet or creating a new one from the snapshot. As of October 2026, Droplet snapshots cost $0.06 per GB per month.

9 min readUpdated Checked against official documentation

No Droplet yet? Everything in this guide starts with one, and VPS Snaps can schedule its snapshots from the day you create it.

Create a DigitalOcean account

Affiliate link — we earn a commission if you sign up.

Snapshots vs DigitalOcean Backups

DigitalOcean has two disk-image features. Both live in your DigitalOcean account. They differ in who starts them and how long they last.

SnapshotsBackups
Started byYou, on demand or from a scriptDigitalOcean, on a schedule
FrequencyWhenever you take oneWeekly or daily on basic plans; every 4, 6 or 12 hours, daily or weekly on usage-based plans
Kept forUntil you delete itWeekly: four weeks. Daily: seven days. Usage-based: the retention you set
ConsistencyLive or powered off, your choiceTaken from the running system (crash-consistent)
Attached volumesNot includedNot included
BillingPer GB of snapshot per monthA percentage of the Droplet price, or per GiB on usage-based plans

To keep a backup past its retention window, convert it: open the backup's More menu and click Convert to snapshot. Snapshot pricing applies from then on.

Volumes need their own snapshots. A Droplet snapshot never includes attached volumes, so snapshot each volume from its More menu with Take Snapshot, or with doctl compute volume snapshot, passing the volume ID and --snapshot-name.

Take a snapshot in the control panel

  1. If the Droplet runs a database or anything else that writes constantly, power it off first. From a shell on the Droplet, run sudo shutdown -h now. Or in the control panel, open the Droplet, click Actions and select Turn off.
  2. Open the Droplet's Backups & Snapshots tab.
  3. In the Take snapshot section, keep the prefilled name (the Droplet name plus a Unix timestamp) or type a name that says why you took it.
  4. Click Take Snapshot for a powered-off Droplet, or Take Live Snapshot to snapshot it while it runs.
  5. Wait for the progress bar to finish. If you powered off, click Turn On Droplet at the top of the page.

Take a snapshot with doctl

doctl is DigitalOcean's official CLI. Authenticate it once with a personal access token:

Terminal
doctl auth init

Find the Droplet's numeric ID:

Terminal
doctl compute droplet list --format ID,Name

Then take the snapshot:

Terminal
doctl compute droplet-action snapshot 386734086 --snapshot-name web-01-2026-10-03 --wait
  • 386734086 is the Droplet ID.
  • --snapshot-name names the snapshot. It is required.
  • --wait keeps the command running until the snapshot finishes, so a script knows when it is done. Without it, doctl returns as soon as the action starts.

The same action through the API is a POST to the Droplet actions endpoint with type set to snapshot:

Terminal
curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  -d '{"type":"snapshot","name":"web-01-2026-10-03"}' \
  "https://api.digitalocean.com/v2/droplets/386734086/actions"

Live snapshot or power off first?

DigitalOcean recommends powering off first when services may not have written their data to disk. Its docs note that many databases keep consistent files on disk only when the database is stopped or the Droplet is off, and that a live snapshot can slow the Droplet while it runs.

A live snapshot is crash-consistent: it holds what was on disk, not what was in memory. Filesystems recover from that like a power cut. Databases usually do, but not always. For a stateless app server a live snapshot is usually fine. For a database, power off, stop the database service, or dump it to a file first so a clean copy is inside the snapshot.

To power off from the CLI, use a graceful shutdown, which asks the operating system to stop cleanly:

Terminal
doctl compute droplet-action shutdown 386734086 --wait

power-off is a hard power cut; DigitalOcean says to use it only when shutdown fails. After the snapshot, start the Droplet again. A powered-off Droplet is still billed.

Terminal
doctl compute droplet-action power-on 386734086 --wait

List and delete snapshots

Terminal
doctl compute snapshot list --resource droplet --format ID,Name,CreatedAt,Size
  • --resource droplet shows Droplet snapshots only. Use volume for volume snapshots.
  • --format picks the columns. Size is the compressed size you are billed for.
  • A glob after list, such as 'web-01-*', matches snapshot names.
Terminal
doctl compute snapshot delete 146288445 --force

146288445 is the snapshot ID, and --force skips the confirmation prompt. Deletion can't be undone. In the control panel, click Backups & Snapshots in the left menu, open the snapshot's More menu and click Delete.

Restore a Droplet from a snapshot

Rebuilding replaces an existing Droplet's disk but keeps its IP address and settings, because a snapshot holds only disk contents. A new Droplet leaves the original untouched, the safer way to check a snapshot or pull files out of it.

Rebuild in place, control panel: click Backups & Snapshots in the left menu, open the snapshot's More menu, select Restore Droplet and confirm. Everything on the Droplet's disk is replaced.

Rebuild in place, doctl: pass the snapshot ID as the image.

Terminal
doctl compute droplet-action rebuild 386734086 --image 146288445 --wait

--image takes any image ID, snapshots included. The restore action, per DigitalOcean's API reference, takes a backup of the current Droplet instead.

New Droplet, control panel: click Create, then Droplet. Under Choose an image, click Snapshots and pick the snapshot. Choose a size whose disk is at least as large as the original Droplet's, pick a region where the snapshot is available, and click Create.

New Droplet, doctl:

Terminal
doctl compute droplet create web-01-restore --image 146288445 --size s-2vcpu-2gb --region nyc1 --wait
  • --image is the snapshot ID.
  • --size is a size slug. Its disk must be equal to or larger than the source Droplet's.
  • --region must be a region where the snapshot is available. To add one, use Add to region in the snapshot's More menu, or run doctl compute image-action transfer 146288445 --region nyc3. Extra regions cost nothing.
  • The new Droplet gets its own IP address. Update DNS if it replaces the old server.

Automate snapshots with cron and a retention count

For your own schedule and retention, run doctl from cron. Run it from a machine other than the Droplet it snapshots, so a compromised Droplet doesn't hold a token that can delete its own snapshots.

/usr/local/bin/do-snapshot.sh
#!/usr/bin/env bash
set -euo pipefail

DROPLET_ID=386734086
PREFIX="web-01-auto"
KEEP=7

# Take a new snapshot and wait for it to finish.
doctl compute droplet-action snapshot "$DROPLET_ID" \
  --snapshot-name "$PREFIX-$(date -u +%Y%m%d-%H%M)" --wait

# List this script's snapshots, newest first, and delete all but KEEP.
doctl compute snapshot list "$PREFIX-*" --resource droplet \
  --format ID,CreatedAt --no-header \
  | sort -k2 -r \
  | tail -n +$((KEEP + 1)) \
  | awk '{print $1}' \
  | xargs -r doctl compute snapshot delete --force
  • The name prefix marks snapshots the script owns, so it never deletes one you took by hand.
  • --no-header drops the header row. sort -k2 -r orders by creation time, newest first, and tail -n +8 skips the seven newest.
  • xargs -r runs nothing when there is nothing to delete.
Terminal
chmod 700 /usr/local/bin/do-snapshot.sh
/etc/cron.d/do-snapshot
30 3 * * * root /usr/local/bin/do-snapshot.sh >> /var/log/do-snapshot.log 2>&1

This runs at 03:30 every day as root, using the login root saved with doctl auth init. Cron has a short PATH, so if command -v doctl shows doctl outside /usr/bin or /bin, use that full path in the script.

A snapshot job that fails quietly is worse than none. Read the log or make the script alert you on a non-zero exit. With set -e, a failed snapshot stops the script before the delete step, so old snapshots are kept.

What it costs

As of October 2026, DigitalOcean's pricing pages list:

  • Droplet snapshots: $0.06 per GB per month, based on the snapshot's size. Volume snapshots: $0.06 per GiB per month.
  • A minimum charge of $0.01, which can apply to very small or short-lived snapshots.
  • No extra charge for making a snapshot available in more regions.
  • Backups on basic plans: 20% of the Droplet's cost for weekly, 30% for daily. Usage-based backup plans are billed per GiB and start at $0.01 per GiB per month.

Snapshots are full images, not incremental, so seven snapshots cost about seven times one.

Limits

  • Droplet snapshots don't include attached volumes.
  • Every snapshot is a full disk image. There are no incremental snapshots.
  • A Droplet created from a snapshot needs a disk equal to or larger than the source Droplet's.
  • You can keep up to 25 snapshots of each volume, and take at most one snapshot of a volume every 10 minutes.
  • Volume snapshots can't be moved to another region or account. Droplet snapshots can be added to other regions or transferred to another team or user. A transfer moves the snapshot; it doesn't copy it.

What a snapshot does not protect against

A snapshot sits in the same DigitalOcean account as the Droplet. It undoes a bad upgrade; it can't help with anything that takes the account down.

  • Account loss. If the account is suspended, closed or locked over a billing problem, its snapshots and backups go with it.
  • Leaked credentials. An API token with write access can delete the Droplet and every snapshot in one script.
  • Bad data. A snapshot taken after files were corrupted or deleted holds the damaged copy. Several snapshots, spaced apart, give you an older one to fall back on.
  • Volumes and busy databases. Volumes aren't in Droplet snapshots, and a live snapshot of a busy database may not restore cleanly.

For those cases, keep at least one copy outside DigitalOcean: database dumps and file archives sent to storage at another provider, or to a machine you control. That is the off-site leg of the 3-2-1 rule. Then restore from it now and then, because a backup you have never restored is a guess.

How often to snapshot, and how fast a restore must be, are two numbers worth writing down: see RPO and RTO explained. Leaving DigitalOcean instead? See how to move a server to a new cloud provider.

Frequently asked questions

Does a DigitalOcean snapshot include attached volumes?
No. A Droplet snapshot covers the Droplet's own disk. Snapshot each volume separately from its More menu or with doctl compute volume snapshot.
Can I take a snapshot without turning off the Droplet?
Yes, with Take Live Snapshot or doctl. The result is crash-consistent. DigitalOcean recommends powering off first when databases or other write-heavy services are running.
Can I restore a snapshot to a smaller Droplet?
No. The new Droplet's disk must be equal to or larger than the disk of the Droplet the snapshot came from.
What happens to snapshots when I destroy the Droplet?
They stay in your account, and keep being billed, until you delete them. Backups follow their retention window, so convert any backup you want to keep into a snapshot.

How this was checked

Commands, limits and prices were checked against these official pages, on October 3, 2026: