log into your main zfs server
use this one-liner to get the name of the last snapshot in the list, save as a variable, and echo it back:
last_snapshot=$(zfs list -t snapshot | tail -1 | awk '{print $1}') && echo $last_snapshot
form a new variable for your current snapshot
new_snapshot="<name-of-your-pool>@$(date +"%Y-%m-%d_%H-%M")"
for example:
new_snapshot="coldstorage/nas@$(date +"%Y-%m-%d_%H-%M")"
Then take a snapshot and check that it was taken:
zfs snapshot $new_snapshot && zfs list -t snapshot
on secondary machine, ensure that it has the same snapshot:
zfs list -t snapshot
from the primary machine, send it over using the template:
zfs send -v -i <last_snapshot> <current-snapshot> | ssh <secondary-machine> zfs recv <pool/data>
with literals it would look like
zfs send -v -i coldstorage/nas@2022-05-27 coldstorage/nas@2023-06-08_10-00 | ssh storage zfs recv storage
open in a tmux window in case your ssh session dies or window is closed:
tmux
Then
last_snapshot=$(zfs list -t snapshot | tail -1 | awk '{print $1}')
new_snapshot="coldstorage/nas@$(date +"%Y-%m-%d_%H-%M")"
zfs snapshot $new_snapshot
zfs send -v -i $last_snapshot $new_snapshot | ssh storage zfs recv storage
First install it
sudo apt install -y zfsutils-linux
sudo fdisk -l
lsblk
lsblk -f
add permissions using
sudo zfs allow -u <username> receive,create,send,hold,share,snapshot,mount <name-of pool>
For example,
sudo zfs allow -u danaukes receive,create,send,hold,share,snapshot,mount storage
sudo zfs allow -u danaukes receive,create,send,hold,share,snapshot,mount coldstorage
sudo zfs allow -u danaukes receive,create,send,hold,share,snapshot,mount coldstorage/nas
sudo zpool create -f storage mirror /dev/sdb /dev/sdc
sudo zpool create -f coldstorage mirror /dev/sda /dev/sde
sudo zpool create -f coldstorage mirror /dev/sda /dev/sdb
Other useful commands related to pools
zpool status
zpool status -v
zpool list
sudo zpool destroy <pool-name>
Some examples
sudo zpool mount coldstorage
sudo zpool unmount coldstorage
sudo zpool online coldstorage
sudo zpool offline coldstorage
sudo zpool detatch coldstarge /dev/sdb1
sudo zpool replace -f coldstorage 11380073923137715223 /dev/sdb
You can import and export an existing pool if it is not currently loaded on your system.
sudo zpool export coldstorage
sudo zpool import coldstorage -d /dev/
https://docs.oracle.com/cd/E19253-01/819-5461/gfkco/index.html
sudo zfs create coldstorage/nas
zfs set readonly=on coldstorage/nas
zfs get mountpoint coldstorage/nas
zfs list
rollback snapshots:
sudo zfs rollback <pool>/<datastore>@<identifier>
sudo zfs rollback coldstorage/nas@test
on colorado
sudo zpool create -f coldstorage mirror /dev/sda /dev/sdb
sudo zfs create coldstorage/nas
sudo zfs set readonly=on coldstorage/nas
sudo zfs rollback coldstorage/nas@test
zfs list
zfs list -t filesystem
zfs list -t snapshot
tmux
zfs snapshot <pool>@<data>/<identifier>
zfs snapshot "storage@$(date +"%Y-%m-%d_%H-%M")"
zfs send -v -i <last_snapshot> <current-snapshot> | ssh <secondary-machine> zfs recv <pool/data>
zfs send -v -i storage@2022-05-27 storage@2023-06-08_10-00 | ssh colorado zfs recv coldstorage/nas
zfs send -R -v storage@test | zfs recv -F coldstorage/nas
zfs send -R -v storage@test | ssh colorado zfs recv -F coldstorage/nas
sudo dmesg | grep -i zfs
Managing ZFS File Systems - ZFS Administration Guide
Main sources:
Specific Issues: