Solaris · ZFS Filesystem & Dataset Management

Solaris · Lesson 18

ZFS Filesystem & Dataset Management

ZFS datasets are lightweight, flexible filesystems that support compression, quotas, reservations, snapshots, clones and seamless mountpoint control. This chapter teaches everything.

What is a ZFS Dataset?

A ZFS dataset is a flexible filesystem OR volume created inside a ZPOOL. Datasets support advanced features:

Filesystem Dataset

Default dataset type. Mounts into the filesystem tree and stores files.

ZFS Volume

Block device dataset used for Oracle DB, iSCSI, or raw storage.

Snapshots & Clones

Instant copy-on-write snapshots and writable clones without needing extra space.

ZFS Dataset Commands with Examples

1. List all ZFS datasets (zfs list)

Shows all datasets, mountpoints, and usage. Most important command for day-to-day checks.

terminal — zfs
solaris-lab
[root@solaris ~]# zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 12G 48G 32K legacy
rpool/ROOT 10G 48G 32K legacy
rpool/ROOT/solaris 10G 48G 10G /
rpool/export 1.5G 48G 32K /export
rpool/export/home 1.5G 48G 1.5G /export/home

2. Create a dataset (filesystem)

Datasets are lightweight and instant. ZFS encourages creating many small datasets.

terminal — zfs
solaris-lab
[root@solaris ~]# zfs create rpool/testdata
 
[root@solaris ~]# zfs list rpool/testdata
NAME USED AVAIL REFER MOUNTPOINT
rpool/testdata 32K 48G 32K /rpool/testdata

3. Destroy a dataset

Deletes dataset and its data instantly. Cannot destroy if children exist.

terminal — zfs
solaris-lab
[root@solaris ~]# zfs destroy rpool/testdata

4. Disable mountpoint

Useful when using dataset for raw backup, clones, volumes or other non-filesystem purposes.

terminal — zfs
solaris-lab
[root@solaris ~]# zfs set mountpoint=none rpool/projectA

5. Set custom mountpoint

When you want dataset mounted somewhere else than default path.

terminal — zfs
solaris-lab
[root@solaris ~]# zfs set mountpoint=/apps/projectA rpool/projectA
 
[root@solaris ~]# df -h /apps/projectA
Filesystem Size Used Available Capacity Mounted on
rpool/projectA 48G 32K 48G 1% /apps/projectA

6. View all ZFS properties (zfs get all)

Shows 100+ tunables including compression, quota, checksum.

terminal — zfs
solaris-lab
[root@solaris ~]# zfs get all rpool/projectA | head
NAME PROPERTY VALUE SOURCE
rpool/projectA type filesystem -
rpool/projectA creation Fri Jan 10 -
rpool/projectA used 32K -
rpool/projectA available 48G -
rpool/projectA mountpoint /apps/projectA local
rpool/projectA compression off default

7. Set quota and reservation

Quota = max size allowed. Reservation = guaranteed space.

terminal — zfs
solaris-lab
[root@solaris ~]# zfs set quota=5G rpool/projectA
[root@solaris ~]# zfs set reservation=1G rpool/projectA
 
[root@solaris ~]# zfs get quota,reservation rpool/projectA
NAME PROPERTY VALUE SOURCE
projectA quota 5G local
projectA reservation 1G local

8. Enable compression

lz4 is fast, safe and recommended for almost all datasets. Saves space.

terminal — zfs
solaris-lab
[root@solaris ~]# zfs set compression=lz4 rpool/logs
 
[root@solaris ~]# zfs get compression rpool/logs
NAME PROPERTY VALUE SOURCE
rpool/logs compression lz4 local

9. Create a snapshot

Snapshots are read-only and almost instant. Perfect for backups and rollbacks.

terminal — zfs
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 -

10. Rollback to snapshot

Reverts dataset to exact state at snapshot. WARNING: destroys newer data.

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

11. Clone a snapshot

Clones are writable datasets created from snapshots. Excellent for development/testing.

terminal — zfs
solaris-lab
[root@solaris ~]# zfs clone rpool/projectA@before_changes rpool/projectA_clone
 
[root@solaris ~]# zfs list
rpool/projectA_clone 32K 5G 32K /rpool/projectA_clone

12. Backup and restore using send/receive

Most powerful backup tool for ZFS.

terminal — zfs
solaris-lab
# Full backup
[root@solaris ~]# zfs send rpool/projectA@before_changes > backup.zfs
 
# Restore on same or different server
[root@solaris ~]# zfs receive rpool/projectA_restored < backup.zfs

13. Verify mountpoints using df -h

df makes it clear which dataset is mounted where and how much space it uses.

terminal — zfs
solaris-lab
[root@solaris ~]# df -h
Filesystem Size Used Available Capacity Mounted on
rpool/projectA 5G 32K 5G 1% /apps/projectA
rpool/projectA_clone 5G 32K 5G 1% /rpool/projectA_clone

Quick ZFS Dataset Cheat Sheet

Dataset Management

  • zfs list — list datasets
  • zfs create pool/fs — create filesystem
  • zfs destroy pool/fs — destroy filesystem
  • zfs get all pool/fs — show all properties

Dataset Tuning

  • zfs set mountpoint=/dir pool/fs
  • zfs set compression=lz4 pool/fs
  • zfs set quota=10G pool/fs
  • zfs set reservation=1G pool/fs

Important Safety Notes

  • Destroying datasets instantly removes all data.
  • Rollback will DELETE all changes made after snapshot creation.
  • ZFS send/receive backups must be kept safely.
  • Mountpoint changes can break applications if done during runtime.

Next chapter: Snapshots & Send/Receive in advanced depth