Export/Import of ZFS Pools

Upgraded your server, but you need your old ZFS pools. How to import your olde files. Sometimes it's better to reinstall the Proxmox rather than trying to fix a broken system.

Share
Export/Import of ZFS Pools
Photo by Nikola Johnny Mirkovic / Unsplash

How to move a pool from one machine to another.

I mowed a stack of disks from my old server to new server. It's the Proxmox Backup Server Datastore called bpool.

Another use case is when you experience a boot disk failure. As I use scripts to set up my systems it's really easy to throw in a new SSD, run a script and import the data pools. And in a few minutes I'm back.

Export

To export a ZFS pool is easy,

zpool import bpool -f

Import

To import an old pool to your Server

zpool import bpool -f

Check for success, zpool list

PBS - add it to your Datastore

nano /etc/proxmox-backup/datastore.cfg

Add the following

datastore: bpool
        gc-schedule daily
        notification-mode notification-system
        path /mnt/datastore/bpool

ZFS Cheat Sheet

Take an inventory of the drives available.

lsblk -o NAME,SIZE,MODEL,FSTYPE,LOG-SEC,PHY-SEC,SERIAL,MOUNTPOINT
NAME         SIZE  MODEL               FSTYPE         LOG-SEC PHY-SEC
sdc          14.6T ST16000NM000J-2TW123                    512    4096
sdd          14.6T ST16000NM000J-2TW456                    512    4096
sde          14.6T ST16000NM000J-2TW789                    512    4096
sdf          14.6T ST16000NM000J-2TW110                    512    4096
sdg          14.6T ST16000NM000J-2TW113                    512    4096

Create a basic ZFS file system

sudo zfs create tank/mydata

Create a file system with specific properties

sudo zfs create -o compression=lz4 -o recordsize=1M tank/database

Expected output:

# Filesystem created successfully (no output on success)
# Verify creation:
zfs list
NAME           USED  AVAIL     REFER  MOUNTPOINT
tank           156K   9.63G       24K  /tank
tank/database   24K   9.63G       24K  /tank/database
tank/mydata     24K   9.63G       24K  /tank/mydata

Listing ZFS Datasets

Display all ZFS datasets

zfs list

Show detailed information with specific properties

zfs list -o name,used,available,referenced,mountpoint,compression

Sample output:

NAME           USED  AVAIL     REFER  MOUNTPOINT        COMPRESS
tank           312K   9.63G       24K  /tank             on
tank/database   24K   9.63G       24K  /tank/database    lz4
tank/mydata     24K   9.63G       24K  /tank/mydata      on

Mounting and Unmounting

Mount a ZFS file system

sudo zfs mount tank/mydata

Unmount a file system

sudo zfs unmount tank/mydata

Set custom mount point

sudo zfs set mountpoint=/custom/path tank/mydata

Cloning Datasets

Create a clone from a snapshot

sudo zfs clone tank/mydata@backup-202606208 tank/mydata-clone

Renaming Datasets

sudo zfs rename tank/mydata tank/production-data

Monitoring and Troubleshooting

Checking Dataset Usage

zfs list -o space

Sample output:

NAME           AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD
tank           9.63G   468K         0B    24K             0B       444K
tank/mydata    9.63G    24K         0B    24K             0B         0B
NAME                           AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD
rpool                           175G  38.1G        0B    104K             0B      38.1G
rpool/ROOT                      175G  13.5G        0B     96K             0B      13.5G
rpool/ROOT/pve-1                175G  13.5G        0B   13.5G             0B         0B
rpool/data                      175G  23.6G        0B     96K             0B      23.6G
rpool/data/vm-100-disk-0        175G  1.29G        0B   1.29G             0B         0B
rpool/data/vm-1000-disk-0       175G  2.05G        0B   2.05G             0B         0B
rpool/data/vm-1000-disk-1       175G  76.4M        0B   76.4M             0B         0B
rpool/data/vm-102-disk-0        175G  1.42G        0B   1.42G             0B         0B
rpool/data/vm-1100-disk-0       175G   176M        0B    176M             0B         0B
rpool/data/vm-1100-disk-1       175G   135M        0B    135M             0B         0B
rpool/data/vm-1200-disk-0       175G    56K        0B     56K             0B         0B
rpool/data/vm-1300-disk-0       175G   100K        0B    100K             0B         0B
rpool/data/vm-1300-disk-1       175G  7.54G        0B   7.54G             0B         0B
rpool/data/vm-200-disk-0        175G    76K        0B     76K             0B         0B
rpool/data/vm-200-disk-1        175G  8.44G        0B   8.44G             0B         0B
rpool/data/vm-80000-cloudinit   175G    76K        0B     76K             0B         0B
rpool/data/vm-80000-disk-0      175G  2.49G        0B   2.49G             0B         0B
rpool/var-lib-vz                175G  1005M        0B   1005M             0B         0B

Property History

View property change history:

zfs get -H -o property,value,source all tank/mydata

Dataset Statistics

zfs get compressratio,used,referenced tank/mydata

Naming Conventions

  • Use descriptive, hierarchical names: tank/application/database
  • Include environment indicators: tank/web/production
  • Use consistent snapshot naming: @backup-YYYYMMDD-HHMM

Space Issues

Investigate space usage

Check snapshot space usage

zfs list -t snapshot -o name,used,referenced

Check compression effectiveness

zfs get compressratio tank/mydata

Permission Problems

Reset permissions to defaults

sudo zfs unallow -r username tank/mydata


References

OpenZFS Admin Commands [1]


  1. Administration Commands homepage ↩︎