
A bad update rarely breaks your server slowly. It fails fast: a boot loop after a kernel bump, a PHP-FPM config mistake that turns every site into a 502, or a disk that fills up after logs spike.
This VPS snapshot tutorial gives you a routine you can repeat. You’ll capture a rollback point in minutes, validate the change, and push a copy offsite. You can do it without turning maintenance into an overnight job.
The habit is simple: snapshot first, change second. This workflow fits WordPress, control panels, and custom stacks on VPS or dedicated servers.
What you’ll build (and when snapshots are the right tool)
Snapshots don’t replace backups. They are short-term rollback points.
They help you recover quickly, often in seconds or minutes.
- Use snapshots for: kernel updates, distro upgrades, control panel updates, PHP upgrades, config refactors, firewall changes, mass plugin updates.
- Do not rely on snapshots for: ransomware recovery, accidental deletions discovered weeks later, compliance retention, or “I need last month’s data.” That’s backup territory.
In real ops, you use both. If you don’t have a backup plan yet, read VPS backup strategy tutorial next.
Prerequisites and a quick reality check
You’ll need a Linux VPS you control (Ubuntu, Debian, AlmaLinux, Rocky) with root access.
You also need to know whether the system uses LVM or Btrfs.
- LVM is common on many VPS images and dedicated servers.
- Btrfs shows up more often on modern distributions and is well-suited to snapshot workflows.
If you want a predictable baseline for production, a HostMyCode VPS gives you full root access for LVM/Btrfs snapshots.
You also get enough headroom to stage safer updates.
Step 1: Identify your filesystem (LVM vs Btrfs) and mount layout
Start by confirming what you’re actually running:
lsblk -f
findmnt -no SOURCE,FSTYPE,OPTIONS /
df -hT /
How to read the output:
- If you see paths like
/dev/mapper/ubuntu--vg-ubuntu--lvand FSTYPEext4orxfs, you’re likely on LVM. - If FSTYPE shows
btrfs, you can use Btrfs snapshots.
Also confirm whether /boot is a separate partition.
Snapshotting root won’t capture a separate /boot. Plan for that during rollbacks.
Step 2 (LVM): Create a rollback snapshot safely
LVM snapshots are copy-on-write. If a snapshot runs out of space, it becomes invalid.
Size it based on how much you expect to change during the maintenance window.
2A) Find your volume group and logical volume
vgs
lvs -a -o +devices
You’ll usually see a root LV such as vg0/root.
That origin LV is what you snapshot.
2B) Create the snapshot
Use a name you’ll recognize later (date + change):
lvcreate -L 10G -s -n root_pre_php_upgrade_2026_09_25 /dev/vg0/root
Sizing guidance:
- Small config change: 1–2G is often enough.
- Package upgrade (PHP, kernel, control panel update): 5–20G is common, depending on write churn.
2C) Confirm snapshot health
lvs -a -o lv_name,lv_attr,lv_size,origin,data_percent,metadata_percent
Watch data_percent.
If it climbs toward 80–90% while you work, extend early:
lvextend -L +5G /dev/vg0/root_pre_php_upgrade_2026_09_25
Pitfall: snapshots add overhead. Heavy write activity can slow I/O.
Make the change, verify it, then delete the snapshot once you’re confident.
Step 3 (Btrfs): Create subvolume snapshots you can boot back into
Btrfs snapshots are fast and space-efficient.
You also don’t pre-allocate a fixed snapshot size like LVM.
The catch is layout. You need to know which subvolumes matter.
3A) Check Btrfs subvolumes
btrfs subvolume list /
Many installs mount a subvolume at / (often @).
They also mount another at /home (often @home).
3B) Create a read-only snapshot
Pick a snapshot directory.
Common choices are /.snapshots or /btrfs/.snapshots, depending on distro conventions.
mkdir -p /.snapshots
# Example: snapshot the root subvolume mounted at /
# This works when / is on Btrfs and you snapshot paths under it.
TIMESTAMP=$(date +%F_%H%M)
btrfs subvolume snapshot -r / /.snapshots/root_pre_change_${TIMESTAMP}
If you use separate subvolumes for /var or /home, snapshot those too.
Otherwise, you can roll back only part of the system state.
btrfs subvolume snapshot -r /home /.snapshots/home_pre_change_${TIMESTAMP}
Note: A clean root rollback depends on your bootloader and mount config.
On many servers, it’s reasonable to treat Btrfs snapshots as fast “known-good files” recovery. Keep full rebuilds in your backup plan.
If you want to prove your restore path end-to-end, follow VPS restore drill tutorial.
Step 4: Quiesce services before snapshotting (so your rollback is sane)
Snapshots capture disk state.
If databases, mail queues, or caches are mid-write, a restore can land in an in-between moment.
For many hosting servers, a short pause is worth it.
Choose the lightest option your downtime budget allows:
- Low-risk config changes: snapshot without stopping services, ideally during low traffic.
- Package upgrades and migrations: pause web and app processes briefly.
Typical pause set for WordPress-style stacks:
# Nginx or Apache
systemctl stop nginx 2>/dev/null || true
systemctl stop apache2 2>/dev/null || systemctl stop httpd 2>/dev/null || true
# PHP-FPM (names vary)
systemctl stop php8.3-fpm 2>/dev/null || true
systemctl stop php-fpm 2>/dev/null || true
If you run a control panel, follow the vendor’s guidance.
On cPanel servers, take snapshots during a quiet window.
Keep the pause short.
After the snapshot is created, bring services back:
systemctl start php8.3-fpm 2>/dev/null || systemctl start php-fpm 2>/dev/null || true
systemctl start nginx 2>/dev/null || systemctl start apache2 2>/dev/null || systemctl start httpd 2>/dev/null || true
Step 5: Make your change, then do a tight verification pass
A snapshot only helps if you verify quickly and make a clear decision.
Don’t leave it hanging for days while it quietly becomes expensive.
Run a short checklist as soon as the change finishes:
- HTTP status and homepage load time from the server:
curl -I https://example.com - Web server config test:
nginx -torapachectl configtest - PHP-FPM status:
systemctl status php8.3-fpm - Disk space sanity:
df -h - Error log scan (last 50 lines):
tail -n 50 /var/log/nginx/error.logor/var/log/apache2/error.log
If SSL renewals are part of the same window, keep this handy: Let’s Encrypt renewal troubleshooting tutorial.
Step 6 (LVM): Roll back fast if the update goes sideways
If the server still boots and you can reach it, you can often roll back from rescue mode or a provider console.
Provider tooling varies, but the LVM steps are consistent.
6A) If you can unmount the filesystem, merge the snapshot
You typically need the origin LV inactive/unmounted to merge.
From a rescue environment:
# Activate volume group
vgchange -ay
# Merge snapshot back into origin
lvconvert --merge /dev/vg0/root_pre_php_upgrade_2026_09_25
# Reboot after merge so the original LV reflects the rollback
reboot
6B) If /boot is separate, keep it consistent
If the change touched the kernel and /boot lives outside LVM, the rollback may not restore the boot files you need.
You might need to reinstall the older kernel or adjust GRUB.
Treat kernel work as higher-risk and schedule it accordingly.
Step 7 (Btrfs): Restore from a snapshot without guessing
Btrfs rollback mechanics vary by distro.
The safe pattern is consistent: boot into a known-good environment, then point your system back to the snapshot.
If needed, copy files back deliberately.
If your bootloader and subvolume layout don’t support full root rollback, use Btrfs snapshots for fast file recovery.
Rely on tested backups for full system recovery.
For customer workloads, “predictable” beats “clever.”
For file-level recovery, mount the snapshot and copy back what you need:
# Example: read-only snapshots under /.snapshots
ls -lah /.snapshots
# Copy back a config directory
rsync -aHAX --numeric-ids /.snapshots/root_pre_change_2026-09-25_0130/etc/nginx/ /etc/nginx/
nginx -t && systemctl reload nginx
Step 8: Sync a snapshot offsite (so “rollback” survives a node failure)
A local snapshot won’t help if the VPS disk dies or the node disappears.
A practical middle ground is syncing snapshot data to a second system you control over SSH.
This guide uses rsync because it’s predictable and available almost everywhere.
If you’re planning a staged move, the same skills apply—see rsync migration tutorial.
8A) Prepare a remote backup target
A second VPS is ideal.
If you host client sites, keep the target off the production node.
A small HostMyCode VPS is a solid backup endpoint, especially if you lock it down to SSH keys only.
8B) Create a dedicated backup user on the remote server
adduser --disabled-password --gecos "" backup
mkdir -p /srv/snapshots
chown backup:backup /srv/snapshots
Add your production server’s SSH public key to /home/backup/.ssh/authorized_keys.
8C) Sync the snapshot directory
On the production server:
# Example: sync Btrfs snapshots directory (adjust paths)
rsync -aHAX --numeric-ids --delete \
/.snapshots/ backup@BACKUP_SERVER_IP:/srv/snapshots/$(hostname)/
With LVM, the snapshot is usually a block device, not a directory.
You can still sync the parts that change most often (configs and app data) as a “pre-change safety net”:
rsync -aHAX --numeric-ids \
/etc/ /var/www/ backup@BACKUP_SERVER_IP:/srv/snapshots/$(hostname)/prechange_files/
If you need full system recovery with defined retention, use a real backup tool plus a rotation policy.
Keep snapshots short-lived by design.
Step 9: Clean up snapshots (don’t keep them forever)
Snapshots stick around because deleting them feels risky.
Keep enough of them, and you’ll pay in disk pressure and I/O overhead.
9A) LVM snapshot cleanup
After you’ve verified the change is stable (often within 30–120 minutes), remove the snapshot:
lvremove -y /dev/vg0/root_pre_php_upgrade_2026_09_25
9B) Btrfs snapshot cleanup
# Delete old snapshots by name
btrfs subvolume delete /.snapshots/root_pre_change_2026-09-25_0130
Optional: enforce “keep last 5 snapshots” with a simple script and cron.
Keep it boring and predictable.
Production checklist: your repeatable pre-change snapshot routine
- Confirm free disk space:
df -h - Confirm filesystem type and layout:
lsblk -f,findmnt / - Pause high-churn services if needed (web/app), then snapshot
- Record snapshot name + change ticket in your notes
- Apply change, run verification checklist
- If stable, sync essential snapshot data offsite (or at least configs)
- Delete snapshot once confidence is high
Common troubleshooting: snapshot created, but rollback didn’t save you
Problem: LVM snapshot filled up and became unusable.
Fix: create larger snapshots for package upgrades, monitor data_percent, and extend early with lvextend.
Problem: Kernel update bricked boot even after rollback.
Fix: separate /boot wasn’t captured. Plan kernel changes, and ensure you can boot an older kernel from GRUB. If you’re doing frequent kernel work, consider a dedicated server with remote console access.
Problem: You rolled back files, but the site still redirects oddly.
Fix: check proxy headers and scheme mismatches. Use HTTPS redirect troubleshooting tutorial to track it down quickly.
Problem: Disk usage spiked after snapshotting.
Fix: snapshots preserve old blocks. On Btrfs, heavy churn under /var (logs, cache) can grow snapshots quickly. Rotate logs and keep snapshots short-lived. On LVM, remove snapshots promptly after verification.
Summary: snapshots buy you time, discipline buys you uptime
Snapshots work best as a routine, not a last-ditch miracle.
Take the rollback point, make the change, verify immediately, then clean up.
That’s how you stop gambling with updates.
If you want a hosting platform where these workflows stay simple—snapshots, controlled updates, and offsite sync—start with a HostMyCode VPS.
If you’d rather offload routine patching and hardening, managed VPS hosting is the practical choice.
Need a server you can roll back safely before updates? HostMyCode offers VPS plans that support snapshot-based maintenance and clean staging workflows. If you prefer to hand off routine patching and hardening, choose managed VPS hosting. If you want full control, deploy your own HostMyCode VPS and run the workflow end to end.
FAQ
Are VPS snapshots the same as backups?
No. Snapshots are quick rollback points on the same storage. Backups are independent copies with retention, ideally offsite. Use both.
How long should I keep a snapshot?
Keep it only as long as you need to validate the change. For most update windows, that’s 1–24 hours. The longer it sticks around, the more space it tends to consume.
What snapshot size should I use for LVM?
Size it for expected write churn during the change. For typical package upgrades on a hosting VPS, 5–20G is a sensible starting range. Monitor and extend if needed.
Will snapshots hurt performance?
They can. LVM snapshots add overhead on writes, and Btrfs snapshots keep old blocks around. Keep snapshots short-lived and avoid running them during peak traffic.
What if I’m hosting client sites and can’t risk downtime?
Schedule snapshots during low-traffic windows, verify immediately, and pair snapshots with a tested restore plan. If you’re making frequent risky changes, consider managed hosting to reduce operational load.