Solaris · ZFS Snapshot

Solaris · Lesson 20

ZFS Snapshot

Snapshots are one of the most powerful ZFS features. They are instant, lightweight and perfect for backups, rollbacks and cloning. In this lesson you will learn how snapshots work internally and how to manage them safely.

What is a ZFS Snapshot?

A ZFS snapshot is a read-only, point-in-time copy of a dataset. It is created instantly without copying data because of ZFS’s copy-on-write (COW) mechanism.

Instant

Snapshots take microseconds to create, regardless of dataset size.

Space Efficient

Snapshots consume space only when changes occur after snapshot creation.

Rollback Capable

Rollback instantly reverts dataset to exact snapshot state.

When Should You Use ZFS Snapshots?

Ideal Use Cases

  • Before making major configuration changes.
  • Before software updates or patching.
  • Before migrations and testing tasks.
  • For versioning dev/test environments.
  • For backups using send/receive.

ZFS Snapshot Commands with Examples

1. Create a snapshot

Snapshots are instant and lightweight. They do not consume extra space immediately.

terminal — zfs snapshot
solaris-lab
[root@solaris ~]# zfs snapshot rpool/projectA@before_changes
 
[root@solaris ~]# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
rpool/projectA@before_changes 0B - 32K -

2. Create recursive snapshot for dataset + children

Use -r to snapshot entire dataset tree including all sub-datasets.

terminal — zfs snapshot
solaris-lab
[root@solaris ~]# zfs snapshot -r rpool/projectA@backup_01
 
# This creates:
rpool/projectA@backup_01
rpool/projectA/logs@backup_01
rpool/projectA/tmp@backup_01

3. List all snapshots

Snapshots appear with @ suffix.

terminal — zfs snapshot
solaris-lab
[root@solaris ~]# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
rpool/projectA@before_changes 0B - 32K -
rpool/projectA/logs@before_changes 0B - 64K -

4. Check snapshot space usage

Snapshots grow as changes happen in the live dataset. They only store changed blocks.

terminal — zfs snapshot
solaris-lab
[root@solaris ~]# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
rpool/projectA@before_changes 120M - 32K -

5. Rollback to a snapshot

WARNING: deletes all changes made after the snapshot. Not reversible.

terminal — zfs snapshot
solaris-lab
[root@solaris ~]# zfs rollback rpool/projectA@before_changes

6. Recursive rollback

Roll back entire dataset hierarchy to a recursive snapshot.

terminal — zfs snapshot
solaris-lab
[root@solaris ~]# zfs rollback -r rpool/projectA@backup_01

7. Destroy a snapshot

Destroys snapshot immediately. If clone exists, force destroy may be needed.

terminal — zfs snapshot
solaris-lab
[root@solaris ~]# zfs destroy rpool/projectA@before_changes

8. Destroy recursive snapshot

Removes snapshot from parent and all children datasets.

terminal — zfs snapshot
solaris-lab
[root@solaris ~]# zfs destroy -r rpool/projectA@backup_01

Snapshot Command Cheat Sheet

Snapshot Management

  • zfs snapshot pool/fs@snap
  • zfs snapshot -r pool/fs@snap
  • zfs list -t snapshot
  • zfs destroy pool/fs@snap
  • zfs destroy -r pool/fs@snap

Rollback & Restore

  • zfs rollback pool/fs@snap
  • zfs rollback -r pool/fs@snap

Important Notes

  • Rollback DELETES all data created after snapshot (be careful).
  • Snapshots cannot be mounted directly; use clone if writable copy is needed.
  • Snapshots use space as data changes — monitor their growth.
  • Destroying a snapshot used by clones requires force delete.

Next: ZFS clone & send/receive for enterprise-grade backups.