# - bof - #



# - Documentation - #
# -  - #
https://wiki.archlinux.org/title/ZFS
https://ramsdenj.com/2016/06/23/arch-linux-on-zfs-part-2-installation.html#pre-install-setup



:a
# -  - #
# - Install Zfs support - #
yay -S zfs-utils zfs-dkms;



:b
# -  - #
# - Enable services - #
sudo systemctl enable zfs-import-cache \
                      zfs-mount \
                      zfs-import.target \
                      zfs.target;
sudo systemctl start  zfs.target;



:c
# -  - #
# - Enable ZFS support without rebooting - #
sudo modprobe zfs;



:d
# -  - #
# - Testing if ZFS works - #
# - The command should report ‘no pools available’ - #
zpool status;
sudo zpool status;



:e
# -  - #
# - Create Zpool - #
sudo zpool create -f -o ashift=<ashift> <pool> mirror <dev1> <dev2> mirror <dev3> <dev4>

zpool create [-fnd] [-o property=value] ... \
             [-O file-system-property=value] ... \
             [-m mountpoint] [-R root] ${POOL_NAME} ${DISK}	...

Flags:

    -f - Force.
    -n - Display creation but don’t create pool.
    -d - Do not enable any features unless specified.
    -o - Set a pool property.
    -O - Set a property on root filesystem.
    -m - Mountpoint.
    -R - Set an alternate root location.



sudo mkdir /DataPool
zpool create -f -m /DataPool DataPool \
               mirror \
                  ata-ST3000DM001-9YN166_S1F0KDGY \
                  ata-ST3000DM001-9YN166_S1F0JKRR \
               mirror \
                  ata-ST3000DM001-9YN166_S1F0KBP8 \
                  ata-ST3000DM001-9YN166_S1F0JTM1


# -  - #
# - VManager HDD installation - #
sudo zpool create -m /home/DataPool DataPool mirror vdb vdc mirror vdd vde;



# -  - #
# - BareMetal HDD installation - #

lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0 465.8G  0 disk 
├─sda1   8:1    0   640M  0 part /boot
├─sda2   8:2    0    16G  0 part [SWAP]
├─sda3   8:3    0    60G  0 part /home
│                                /var
│                                /.snapshots
│                                /
└─sda4   8:4    0 389.1G  0 part /home/Data
sdb      8:16   0   7.3T  0 disk 
└─sdb1   8:17   0   7.3T  0 part 
sdc      8:32   0   7.3T  0 disk 
sdd      8:48   1     0B  0 disk 
sr0     11:0    1  1024M  0 rom  


ls -lah /dev/disk/by-id;

total 0
drwxr-xr-x 2 root root 400 Jan  5 14:59 .
drwxr-xr-x 8 root root 160 Jan  5 14:16 ..
lrwxrwxrwx 1 root root   9 Jan  5 14:16 ata-hp_DVDRW_DU8A6SH_4A6605904686 -> ../../sr0
lrwxrwxrwx 1 root root   9 Jan  5 14:16 ata-ST8000VN004-2M2101_WSD21J73 -> ../../sdc
lrwxrwxrwx 1 root root   9 Jan  5 14:16 ata-WDC_WD8004FRYZ-01VAEB0_VRGXVEKK -> ../../sdb
lrwxrwxrwx 1 root root  10 Jan  5 14:16 ata-WDC_WD8004FRYZ-01VAEB0_VRGXVEKK-part1 -> ../../sdb1
lrwxrwxrwx 1 root root   9 Jan  5 14:16 ata-WDC_WDBNCE5000PNC_181237420295 -> ../../sda
lrwxrwxrwx 1 root root  10 Jan  5 14:16 ata-WDC_WDBNCE5000PNC_181237420295-part1 -> ../../sda1
lrwxrwxrwx 1 root root  10 Jan  5 14:16 ata-WDC_WDBNCE5000PNC_181237420295-part2 -> ../../sda2
lrwxrwxrwx 1 root root  10 Jan  5 14:16 ata-WDC_WDBNCE5000PNC_181237420295-part3 -> ../../sda3
lrwxrwxrwx 1 root root  10 Jan  5 14:16 ata-WDC_WDBNCE5000PNC_181237420295-part4 -> ../../sda4
lrwxrwxrwx 1 root root   9 Jan  5 14:59 usb-Generic-_SD_MMC_MS_PRO_20120926571200000-0:0 -> ../../sdd
lrwxrwxrwx 1 root root   9 Jan  5 14:16 wwn-0x5000c500db602b94 -> ../../sdc
lrwxrwxrwx 1 root root   9 Jan  5 14:16 wwn-0x5000cca0c2cd1da2 -> ../../sdb
lrwxrwxrwx 1 root root  10 Jan  5 14:16 wwn-0x5000cca0c2cd1da2-part1 -> ../../sdb1
lrwxrwxrwx 1 root root   9 Jan  5 14:16 wwn-0x5001b444a9cddbe8 -> ../../sda
lrwxrwxrwx 1 root root  10 Jan  5 14:16 wwn-0x5001b444a9cddbe8-part1 -> ../../sda1
lrwxrwxrwx 1 root root  10 Jan  5 14:16 wwn-0x5001b444a9cddbe8-part2 -> ../../sda2
lrwxrwxrwx 1 root root  10 Jan  5 14:16 wwn-0x5001b444a9cddbe8-part3 -> ../../sda3
lrwxrwxrwx 1 root root  10 Jan  5 14:16 wwn-0x5001b444a9cddbe8-part4 -> ../../sda4

sudo zpool create -f DataPool \
                     mirror \
                         ata-WDC_WD8004FRYZ-01VAEB0_VRGXVEKK \
                         ata-ST8000VN004-2M2101_WSD21J73;

sudo zpool create -f -m /home/DataPool \
                        DataPool \
                        mirror \
                            ata-WDC_WD8004FRYZ-01VAEB0_VRGXVEKK \
                            ata-ST8000VN004-2M2101_WSD21J73;

sudo zpool create -f DataPool mirror \
                              /dev/vdb /dev/vdc;

zpool create -d -o feature@allocation_classes=enabled \
                  -o feature@async_destroy=enabled      \
                  -o feature@bookmarks=enabled          \
                  -o feature@embedded_data=enabled      \
                  -o feature@empty_bpobj=enabled        \
                  -o feature@enabled_txg=enabled        \
                  -o feature@extensible_dataset=enabled \
                  -o feature@filesystem_limits=enabled  \
                  -o feature@hole_birth=enabled         \
                  -o feature@large_blocks=enabled       \
                  -o feature@lz4_compress=enabled       \
                  -o feature@project_quota=enabled      \
                  -o feature@resilver_defer=enabled     \
                  -o feature@spacemap_histogram=enabled \
                  -o feature@spacemap_v2=enabled        \
                  -o feature@userobj_accounting=enabled \
                  -o feature@zpool_checkpoint=enabled   \
                  $POOL_NAME $VDEVS





# -  - #
# - Change mountpoint to an existing Datasets - #

# -  - #
# - List zpools - #
zfs list;

NAME                       USED  AVAIL     REFER  MOUNTPOINT
DataPool                  85.6G   814G       96K  /home/DataPool
DataPool/Images           85.6G   814G      112K  /home/DataPool/Images
DataPool/Images/Backup      96K   814G       96K  /home/DataPool/Images/Backup
DataPool/Images/Programs  85.6G   814G     85.6G  /home/DataPool/Images/Programs
DataPool/Images/VManager    96K   814G       96K  /home/DataPool/Images/VManager


# -  - #
# - Get the mount point for zroot/mysql - #
zfs get mountpoint /home/DataPool/Images/VManager;

NAME                      PROPERTY    VALUE                           SOURCE
DataPool/Images/VManager  mountpoint  /home/DataPool/Images/VManager  inherited from DataPool


# -  - #
# - Now rename /dbbackup to /dbbackup-prod - #
# - instantly by setting the new mountpoint - #
sudo zfs set mountpoint=/home/DataPool/VManager DataPool/Images/VManager;

# -  - #
# - Verify - #
zfs list;

NAME                       USED  AVAIL     REFER  MOUNTPOINT
DataPool                  85.6G   814G       96K  /home/DataPool
DataPool/Images           85.6G   814G      104K  /home/DataPool/Images
DataPool/Images/Backup      96K   814G       96K  /home/DataPool/Images/Backup
DataPool/Images/Programs  85.6G   814G     85.6G  /home/DataPool/Images/Programs
DataPool/Images/VManager    96K   814G       96K  /home/DataPool/VManager



# -  - #
# - Get zpool mountpoint - #
zfs get mountpoint DataPool;

NAME      PROPERTY    VALUE           SOURCE
DataPool  mountpoint  /home/DataPool  local

zfs get mounted DataPool;

NAME      PROPERTY  VALUE    SOURCE
DataPool  mounted   yes      -

sudo umount DataPool;
zfs get mounted DataPool;

NAME      PROPERTY  VALUE    SOURCE
DataPool  mounted   no       -



# -  - #
# - Create new zpool mountpoint - #
sudo mkdir /DataPool;

sudo zfs set mountpoint=/DataPool DataPool;
sudo zfs mount DataPool;

zfs get mountpoint DataPool;
NAME      PROPERTY    VALUE       SOURCE
DataPool  mountpoint  /DataPool   local

zfs get mounted DataPool;
NAME      PROPERTY  VALUE    SOURCE
DataPool  mounted   yes      -

mkdir -p /DataPool/Images/Backup;
mkdir -p /DataPool/Images/Programs;
mkdir -p /DataPool/Images/VManager;

sudo zfs set mountpoint=/DataPool/Images/Backup DataPool/Images/Backup;
sudo zfs set mountpoint=/DataPool/Images/Programs DataPool/Images/Programs;
sudo zfs set mountpoint=/DataPool/Images/VManager DataPool/Images/VManager;

sudo zfs mount DataPool/Images/Backup;
sudo zfs mount DataPool/Images/Programs;
sudo zfs mount DataPool/Images/VManager;



# -  - #
# - Importing an existing zpool - #

la /dev/disk/by-label/;
drwxr-xr-x 2 root root 140 Jan 20 20:18  ./
drwxr-xr-x 8 root root 160 Jan 20 20:18  ../
lrwxrwxrwx 1 root root  10 Jan 20 20:18  Arch -> ../../sda3
lrwxrwxrwx 1 root root  10 Jan 20 20:18  Data -> ../../sda4
lrwxrwxrwx 1 root root  10 Jan 20 20:18  DataPool -> ../../sdc1
lrwxrwxrwx 1 root root  10 Jan 20 20:18 'EFI\x20BOOT' -> ../../sda1
lrwxrwxrwx 1 root root  10 Jan 20 20:18  Swap -> ../../sda2

lsblk -f;
NAME   FSTYPE     FSVER LABEL    UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sda
├─sda1 vfat       FAT32 EFI BOOT BDEA-24EB                             567.8M    11% /boot
├─sda2 swap       1     Swap     e5f92681-9039-4f26-8835-c9679772e372                [SWAP]
├─sda3 btrfs            Arch     72affb9d-34f1-4a2c-bf36-cedb4e54db0a   47.9G    19% /home
│                                                                                    /var
│                                                                                    /.snapshots
│                                                                                    /
└─sda4 btrfs            Data     883b5d02-46f8-4117-adba-bf5617685a66  326.8G    16% /Data
sdb
├─sdb1 zfs_member 5000  DataPool 10217075224231342842
└─sdb9
sdc
├─sdc1 zfs_member 5000  DataPool 10217075224231342842
└─sdc9

sudo zpool import -d /dev/disk/by-id <pool-name>

sudo zpool import -f -l -d /dev/disk/by-label DataPool;
sudo zpool status -v DataPool;
sudo zpool import -a;
sudo zpool import -D -f DataPool;



# -  - #
# - Importing zpool - #

# - Show zpools available - #
sudo zpool import;
# - Importing DataPpool - #
sudo zpool import -f DataPool;
zpool status;
zpool status -v DataPool;
sudo zpool clear DataPool;
sudo zpool scrub DataPool;
zpool status -v DataPool;
# - Properties(all datasets) - #
zfs get all;
zpool list -v;
zpool list -v DataPool;



# -  - #
# - Disk failure - #
# - Status DataPpool - #
zpool status -v;
zpool status -v DataPool;
zpool iostat;
zpool iostat -v;
zpool iostat -v DataPool;



zpool iostat;
              capacity     operations     bandwidth 
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
DataPool    7.29G  92.2G      1      0   261K  1.18K

zpool iostat -v;
              capacity     operations     bandwidth 
pool        alloc   free   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
DataPool    7.29G  92.2G      1      0   255K  1.15K
  vdb       7.29G  92.2G      1      0   255K  1.15K
----------  -----  -----  -----  -----  -----  -----



zpool status DataPool;

NAME                       SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
DataPool                  99.5G  1.27G  98.2G        -         -     0%     1%  1.00x  DEGRADED  -
  mirror                  99.5G  1.27G  98.2G        -         -     0%  1.27%      -  DEGRADED
    vdb                       -      -      -        -         -      -      -      -    ONLINE
    11861624942519774474      -      -      -        -         -      -      -      -   FAULTED


# -  - #
# - Offline, remove & detach FAULTED disk - #
sudo zpool offline DataPool 11861624942519774474;
sudo zpool remove DataPool 11861624942519774474;
sudo zpool detach DataPool 11861624942519774474;

# -  - #
# - Create a new GPT partition table - #
# - Attached it again with mirror - #
sudo zpool attach DataPool /dev/vdb /dev/vdc;



# -  - #
# - Exporting zpool - #
zpool status;
sudo zpool export DataPool;
cannot unmount '/export/home/eschrock': Device busy
sudo zpool export -f DataPool;
zpool status;



# - Add SSD cache - #
sudo zpool add -f DataPool cache vdf;
zpool status;
zfs set sync=always DataPool/Images;

zpool add DataPool cache /dev/vda3;
zpool status;



# - cache stadistics - #
zpool iostat -v DataPool;
cat random-rw.fio;
zpool iostat -v DataPool;
zpool status;

:f
# -  - #
# - Zpool management - #
zpool list;
zpool status;



# - Add disk(s) - #
zpool attach DataPool <dev9> <dev10> <dev11> <dev12>

# - Remove a disk from mirror - #
zpool detach DataPool <dev3>

# - Add a single disk - #
zpool add DataPool <dev10>

# - Add a new mirrored disks - #
zpool add DataPool mirror <dev9> <dev10>

# - Add a new striped set - #
zpool add <pool> raidz1 <dev1> <dev2> <dev3> [devN] ...
zpool add <pool> raidz2 <dev1> <dev2> <dev3> <dev4> [devN] ...
zpool add <pool> raidz3 <dev1> <dev2> <dev3> <dev4> <dev5> [devN] …

# -  - #
# - Don't use - #
# - Destroy a pool (DANGEROUS!) - #
zpool destroy DataPool;



:g
# -  - #
# - Dataset - #
# - Data management - #

# - List - #
zfs list;
zfs list -r -t all;

# - Create dataset - #
sudo zfs create DataPool/Images;
sudo zfs create DataPool/Images/Backup;
sudo zfs create DataPool/Images/Programs;
sudo zfs create DataPool/Images/VManager;

sudo chown -R is_derayo:is_derayo /DataPool/Images;
sudo chmod -R 775 /DataPool/Images;

# - zfs list properties - #
zfs get all;
zfs get all DataPool;
zfs get all DataPool;
zfs get all DataPool/Images;
zfs get all DataPool/Images/Programs;

# - zfs list properties to a file - #
cd ~/Documents;

# - All - #
zfs get all 2>&1 | tee DataPoolProperties.txt;

# - DataPool - #
zfs get all DataPool 2>&1 | tee DataPoolProperties.txt;

# - DataPool/Images - #
zfs get all DataPool/Images 2>&1 | tee DataPoolImages-Properties.txt;

# - Get value propertie - #
zfs get <property> <pool|datastore>
zfs get quota DataPool/Images;

# - Don't use - #
# - Change mount point - #

└──>> tree
.
└── [root        4]  Images
    ├── [root        2]  Backup
    └── [root        2]  Programs

#zfs set mountpoint=/home/DataPool DataPool/Images/Backup;


# - Enable compression (off by default, inherits) - #
sudo zfs set compression=on DataPool;

# - Get compression ratio - #
zfs get compressratio DataPool;
NAME      PROPERTY       VALUE  SOURCE
DataPool  compressratio  1.00x  -

# - Enable deduplication (off by default, inherits) - #
sudo zfs set dedup=on DataPool;

zfs get compressratio DataPool;
NAME      PROPERTY       VALUE  SOURCE
DataPool  compressratio  1.00x  -

zfs get compressratio DataPool/Images;
zfs get compressratio DataPool/Images/Programs;

zfs list;
NAME                       USED  AVAIL     REFER  MOUNTPOINT
DataPool                  16.6G   176G       24K  /home/DataPool
DataPool/Images           16.6G   176G       25K  /home/DataPool/Images
DataPool/Images/Backup      24K   176G       24K  /home/DataPool/Images/Backup
DataPool/Images/Programs  16.6G   176G     16.6G  /home/DataPool/Images/Programs


# - List dataset - #
zfs list;

# - Get pool deduplication efficiency - #
zpool status -D DataPool;

# - Set a quota - #
zfs set quota=<size> <pool|dataset>

sudo zfs create DataPool/Images/marlene;
zfs list;
sudo zfs set quota=250M DataPool/Images/marlene;
zfs list;
NAME                       USED  AVAIL     REFER  MOUNTPOINT
DataPool                  16.6G   176G       24K  /home/DataPool
DataPool/Images           16.6G   176G       25K  /home/DataPool/Images
DataPool/Images/Backup      24K   176G       24K  /home/DataPool/Images/Backup
DataPool/Images/Programs  16.6G   176G     16.6G  /home/DataPool/Images/Programs
DataPool/Images/marlene     24K   250M       24K  /home/DataPool/Images/marlene



# - Snapshot management - #

# - Snapshot - #
# - Saved state of a data store at a certain point in time - #
zfs list -r -t snapshot;
zfs list -r -t snapshot DataPool;
zfs list -r -t snapshot DataPool/Images;

# - Create snapshot - #
sudo zfs snapshot <pool|datastore>@<snapshot>


sudo snapper -c rootSnapper create --description 'Manual rootSnapshot '$(date +%Y-%m-%d_%H-%M-%S);


sudo zfs snapshot DataPool@DataPoolSnapshot;
zfs list -r -t snapshot DataPool;
NAME                        USED  AVAIL     REFER  MOUNTPOINT
DataPool@DataPoolSnapshot    13K      -       24K  -

sudo zfs snapshot DataPool/Images/Programs@DataPoolImagesProgramsSnapshot;
zfs list -r -t snapshot DataPool;
NAME                                                      USED  AVAIL     REFER  MOUNTPOINT
DataPool@DataPoolSnapshot                                  13K      -       24K  -
DataPool/Images/Programs@DataPoolImagesProgramsSnapshot     0B      -     16.6G  -

sudo zfs snapshot DataPool/Images/Programs@Programs.Snapshot;
zfs list -r -t snapshot DataPool;
NAME                                                      USED  AVAIL     REFER  MOUNTPOINT
DataPool@DataPoolSnapshot                                  13K      -       24K  -
DataPool/Images/Programs@DataPoolImagesProgramsSnapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs.Snapshot                  0B      -     16.6G  -

zfs list -r -t snapshot;
NAME                                                      USED  AVAIL     REFER  MOUNTPOINT
DataPool@DataPoolSnapshot                                  13K      -       24K  -
DataPool/Images/Programs@DataPoolImagesProgramsSnapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs.Snapshot                  0B      -     16.6G  -

zfs list -r -t snapshot DataPool/Images/Programs;
NAME                                                      USED  AVAIL     REFER  MOUNTPOINT
DataPool/Images/Programs@DataPoolImagesProgramsSnapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs.Snapshot                  0B      -     16.6G  -





# -  - #
# - Manage Snapshots - #

# -  - #
# - DataPool listsnapshots property - #
zpool get listsnapshots DataPool;
NAME      PROPERTY       VALUE      SOURCE
DataPool  listsnapshots  off        default

#sudo zpool set listsnapshots=on DataPool;

# -  - #
# - Create DataPool nested Snapshot - #
sudo zfs snapshot -r DataPool@DataPool.Snapshot_$(date +%Y-%m-%d_%H-%M-%S);
zfs list -rt snapshot DataPool;

# -  - #
# - Roolback DataPool Snapshot - #
zfs list -rt snapshot DataPool;
sudo zfs rollback <pool|datastore>@<snapshot>
sudo zfs rollback DataPool@DataPool.Snapshot_2022-02-09_18-02-02;

# -  - #
# - Destroy snapshot (DANGEROUS!) - #
zfs list -rt snapshot DataPool;
sudo zfs destroy -r DataPool@DataPool.Snapshot_2022-02-09_18-02-02;





sudo zfs snapshot -r DataPool/Images@Images.Snapshot;

zfs list -rt snapshot DataPool/Images;
NAME                                                      USED  AVAIL     REFER  MOUNTPOINT
DataPool/Images@Images.Snapshot                             0B      -       25K  -
DataPool/Images/Backup@Images.Snapshot                      0B      -       24K  -
DataPool/Images/Programs@DataPoolImagesProgramsSnapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs.Snapshot                  0B      -     16.6G  -
DataPool/Images/Programs@Images.Snapshot                    0B      -     16.6G  -
DataPool/Images/marlene@Images.Snapshot                     0B      -       24K  -

zfs list -r -t snapshot DataPool/Images/Programs;
NAME                                                      USED  AVAIL     REFER  MOUNTPOINT
DataPool/Images/Programs@DataPoolImagesProgramsSnapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs.Snapshot                  0B      -     16.6G  -
DataPool/Images/Programs@Images.Snapshot                    0B      -     16.6G  -



# -  - #
# - Rename snapshot - #
sudo zfs rename <pool|datastore>@<oldsnapshot> <newsnapshot> 
sudo zfs rename DataPool/Images/Programs@DataPoolImagesProgramsSnapshot Programs1.Snapshot; 

zfs list -r -t snapshot;
NAME                                                      USED  AVAIL     REFER  MOUNTPOINT
DataPool@DataPoolSnapshot                                  13K      -       24K  -
DataPool/Images@Images.Snapshot                             0B      -       25K  -
DataPool/Images/Backup@Images.Snapshot                      0B      -       24K  -
DataPool/Images/Programs@DataPoolImagesProgramsSnapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs.Snapshot                  0B      -     16.6G  -
DataPool/Images/Programs@Images.Snapshot                    0B      -     16.6G  -
DataPool/Images/marlene@Images.Snapshot                     0B      -       24K  -

sudo zfs rename DataPool/Images/Programs@DataPoolImagesProgramsSnapshot Programs1.Snapshot; 
zfs list -r -t snapshot;
NAME                                          USED  AVAIL     REFER  MOUNTPOINT
DataPool@DataPoolSnapshot                      13K      -       24K  -
DataPool/Images@Images.Snapshot                 0B      -       25K  -
DataPool/Images/Backup@Images.Snapshot          0B      -       24K  -
DataPool/Images/Programs@Programs1.Snapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs.Snapshot      0B      -     16.6G  -
DataPool/Images/Programs@Images.Snapshot        0B      -     16.6G  -
DataPool/Images/marlene@Images.Snapshot         0B      -       24K  -

sudo zfs rename DataPool/Images/Programs@Programs.Snapshot Programs2.Snapshot; 
zfs list -r -t snapshot DataPool/Images/Programs;
NAME                                          USED  AVAIL     REFER  MOUNTPOINT
DataPool/Images/Programs@Programs1.Snapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs2.Snapshot     0B      -     16.6G  -
DataPool/Images/Programs@Images.Snapshot        0B      -     16.6G  -

sudo zfs rename DataPool/Images/Programs@Images.Snapshot Programs3.Snapshot; 
zfs list -r -t snapshot DataPool/Images/Programs;
NAME                                          USED  AVAIL     REFER  MOUNTPOINT
DataPool/Images/Programs@Programs1.Snapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs2.Snapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs3.Snapshot     0B      -     16.6G  -

# -  - #
# - Rename all snapshots with same name and all nested data stores underneath - #
#sudo zfs rename -r <pool|datastore>@<oldsnapshot> <newsnapshot>



# -  - #
# - Roll back to the latest snapshot (DANGEROUS!) - #
#sudo zfs rollback <pool|datastore>@<snapshot>



# -  - #
# - Destroy snapshot (DANGEROUS!) - #
sudo zfs destroy DataPool/Images/Programs@Programs3.Snapshot;
zfs list -r -t snapshot DataPool/Images/Programs;
NAME                                          USED  AVAIL     REFER  MOUNTPOINT
DataPool/Images/Programs@Programs1.Snapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs2.Snapshot     0B      -     16.6G  -

zpool get listsnapshots DataPool;
NAME      PROPERTY       VALUE      SOURCE
DataPool  listsnapshots  off        default

sudo zpool set listsnapshots=on DataPool;

zpool get listsnapshots DataPool;
NAME      PROPERTY       VALUE      SOURCE
DataPool  listsnapshots  on         local


# -  - #
# - Access files from a snapshot directly - #
ls <pool directory>/.zfs/snapshot/<snapshot name>
ls /home/DataPool/Images/Programs/.zfs/snapshot/Programs1.Snapshot;

zfs list -t snapshot;
NAME                                          USED  AVAIL     REFER  MOUNTPOINT
DataPool@DataPoolSnapshot                      13K      -       24K  -
DataPool/Images@Images.Snapshot                 0B      -       25K  -
DataPool/Images/Backup@Images.Snapshot          0B      -       24K  -
DataPool/Images/Programs@Programs1.Snapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs2.Snapshot     0B      -     16.6G  -
DataPool/Images/marlene@Images.Snapshot         0B      -       24K  -



# -  - #
# - Clone management - #
# - Data store of which the initial contents are the same as the source snapshot - #

zfs get origin DataPool;
NAME      PROPERTY  VALUE   SOURCE
DataPool  origin    -       -

# -  - #
# - Create clone - #
sudo zfs clone DataPool/Images/Programs@Programs1.Snapshot DataPool/Programs1.Clone;

zfs list -r -t snapshot -o name,creation DataPool/Images/Programs;
NAME                                         CREATION
DataPool/Images/Programs@Programs1.Snapshot  Tue Jan  4 13:32 2022
DataPool/Images/Programs@Programs2.Snapshot  Tue Jan  4 13:34 2022

zfs list -r -t snapshot -o name,creation DataPool/Images;
NAME                                         CREATION
DataPool/Images@Images.Snapshot              Tue Jan  4 13:39 2022
DataPool/Images/Backup@Images.Snapshot       Tue Jan  4 13:39 2022
DataPool/Images/Programs@Programs1.Snapshot  Tue Jan  4 13:32 2022
DataPool/Images/Programs@Programs2.Snapshot  Tue Jan  4 13:34 2022
DataPool/Images/marlene@Images.Snapshot      Tue Jan  4 13:39 2022

# -  - #
# - Show disk space - #
zfs list -o space;
zfs list -o space -r DataPool;
NAME                                         AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD
DataPool                                      176G  16.6G       14K     24K             0B      16.6G
DataPool@DataPoolSnapshot                        -    14K         -       -              -          -
DataPool/Images                               176G  16.6G        0B     25K             0B      16.6G
DataPool/Images@Images.Snapshot                  -     0B         -       -              -          -
DataPool/Images/Backup                        176G    24K        0B     24K             0B         0B
DataPool/Images/Backup@Images.Snapshot           -     0B         -       -              -          -
DataPool/Images/Programs                      176G  16.6G        0B   16.6G             0B         0B
DataPool/Images/Programs@Programs1.Snapshot      -     0B         -       -              -          -
DataPool/Images/Programs@Programs2.Snapshot      -     0B         -       -              -          -
DataPool/Images/marlene                       250M    24K        0B     24K             0B         0B
DataPool/Images/marlene@Images.Snapshot          -     0B         -       -              -          -
DataPool/Programs1.Clone                      176G     0B        0B      0B             0B         0B

zfs list
NAME                                          USED  AVAIL     REFER  MOUNTPOINT
DataPool                                     16.6G   176G       24K  /home/DataPool
DataPool@DataPoolSnapshot                      14K      -       24K  -
DataPool/Images                              16.6G   176G       25K  /home/DataPool/Images
DataPool/Images@Images.Snapshot                 0B      -       25K  -
DataPool/Images/Backup                         24K   176G       24K  /home/DataPool/Images/Backup
DataPool/Images/Backup@Images.Snapshot          0B      -       24K  -
DataPool/Images/Programs                     16.6G   176G     16.6G  /home/DataPool/Images/Programs
DataPool/Images/Programs@Programs1.Snapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs2.Snapshot     0B      -     16.6G  -
DataPool/Images/marlene                        24K   250M       24K  /home/DataPool/Images/marlene
DataPool/Images/marlene@Images.Snapshot         0B      -       24K  -
DataPool/Programs1.Clone                        0B   176G     16.6G  /home/DataPool/Programs1.Clone

sudo zfs clone DataPool/Images/Programs@Programs1.Snapshot DataPool/Programs1.Clone2;

zfs list DataPool/Images/Programs;
NAME                       USED  AVAIL     REFER  MOUNTPOINT
DataPool/Images/Programs  16.6G   176G     16.6G  /home/DataPool/Images/Programs

zfs list -r DataPool/Images/Programs;
NAME                                          USED  AVAIL     REFER  MOUNTPOINT
DataPool/Images/Programs                     16.6G   176G     16.6G  /home/DataPool/Images/Programs
DataPool/Images/Programs@Programs1.Snapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs2.Snapshot     0B      -     16.6G  -

zfs list -r DataPool;
NAME                                          USED  AVAIL     REFER  MOUNTPOINT
DataPool                                     16.6G   176G       24K  /home/DataPool
DataPool@DataPoolSnapshot                      14K      -       24K  -
DataPool/Images                              16.6G   176G       25K  /home/DataPool/Images
DataPool/Images@Images.Snapshot                 0B      -       25K  -
DataPool/Images/Backup                         24K   176G       24K  /home/DataPool/Images/Backup
DataPool/Images/Backup@Images.Snapshot          0B      -       24K  -
DataPool/Images/Programs                     16.6G   176G     16.6G  /home/DataPool/Images/Programs
DataPool/Images/Programs@Programs1.Snapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs2.Snapshot     0B      -     16.6G  -
DataPool/Images/marlene                        24K   250M       24K  /home/DataPool/Images/marlene
DataPool/Images/marlene@Images.Snapshot         0B      -       24K  -
DataPool/Programs1.Clone                        0B   176G     16.6G  /home/DataPool/Programs1.Clone
DataPool/Programs1.Clone2                       0B   176G     16.6G  /home/DataPool/Programs1.Clone2

# -  - #
# - Destroy clone (DANGEROUS!) - #
sudo zfs destroy DataPool/Programs1.Clone2;

zfs list -r DataPool;
NAME                                          USED  AVAIL     REFER  MOUNTPOINT
DataPool                                     16.6G   176G       24K  /home/DataPool
DataPool@DataPoolSnapshot                      14K      -       24K  -
DataPool/Images                              16.6G   176G       25K  /home/DataPool/Images
DataPool/Images@Images.Snapshot                 0B      -       25K  -
DataPool/Images/Backup                         24K   176G       24K  /home/DataPool/Images/Backup
DataPool/Images/Backup@Images.Snapshot          0B      -       24K  -
DataPool/Images/Programs                     16.6G   176G     16.6G  /home/DataPool/Images/Programs
DataPool/Images/Programs@Programs1.Snapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs2.Snapshot     0B      -     16.6G  -
DataPool/Images/marlene                        24K   250M       24K  /home/DataPool/Images/marlene
DataPool/Images/marlene@Images.Snapshot         0B      -       24K  -
DataPool/Programs1.Clone                        0B   176G     16.6G  /home/DataPool/Programs1.Clone

ls /home/DataPool/Programs1.Clone;
Linux.Img




sudo zfs snapshot projects/newproject@today
sudo zfs clone projects/newproject@today projects/teamA/tempuser
sudo zfs set sharenfs=on projects/teamA/tempuser
sudo zfs set quota=5G projects/teamA/tempuser

sudo zfs clone datapool/docs@today datapool/pict;
zfs list
NAME            USED  AVAIL  REFER  MOUNTPOINT
datapool        166K  1.92G    19K  /datapool
datapool/docs    19K  1.92G    19K  /docs
datapool/pict     1K  1.92G    19K  /datapool/pict

ls /datapool/pict
folder1  folder2  folder3  folder4  folder5

# -  - #
# - Crate/Delete snapshot clone - #
sudo zfs clone DataPool/Images/Programs@Programs1.Snapshot DataPool/Programs1.Clone3;
sudo zfs clone DataPool/Images/Programs@Programs1.Snapshot DataPool/Programs1.Clone4;
sudo zfs clone DataPool/Images/Programs@Programs1.Snapshot DataPool/Programs1.Clone5;

zfs list -r DataPool;
NAME                                          USED  AVAIL     REFER  MOUNTPOINT
DataPool                                     16.6G   176G       27K  /home/DataPool
DataPool@DataPoolSnapshot                      14K      -       24K  -
DataPool/Images                              16.6G   176G       25K  /home/DataPool/Images
DataPool/Images@Images.Snapshot                 0B      -       25K  -
DataPool/Images/Backup                         24K   176G       24K  /home/DataPool/Images/Backup
DataPool/Images/Backup@Images.Snapshot          0B      -       24K  -
DataPool/Images/Programs                     16.6G   176G     16.6G  /home/DataPool/Images/Programs
DataPool/Images/Programs@Programs1.Snapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs2.Snapshot     0B      -     16.6G  -
DataPool/Images/marlene                        24K   250M       24K  /home/DataPool/Images/marlene
DataPool/Images/marlene@Images.Snapshot         0B      -       24K  -
DataPool/Programs1.Clone                       21K   176G     16.6G  /home/DataPool/Programs1.Clone
DataPool/Programs1.Clone2                       0B   176G     16.6G  /home/DataPool/Programs1.Clone2
DataPool/Programs1.Clone3                       0B   176G     16.6G  /home/DataPool/Programs1.Clone3
DataPool/Programs1.Clone4                       0B   176G     16.6G  /home/DataPool/Programs1.Clone4
DataPool/Programs1.Clone5                       0B   176G     16.6G  /home/DataPool/Programs1.Clone5

# -  - #
# - Destroy clone (DANGEROUS!) - #
sudo zfs destroy DataPool/Programs1.Clone3;
sudo zfs destroy DataPool/Programs1.Clone4;

zfs list -r DataPool;
NAME                                          USED  AVAIL     REFER  MOUNTPOINT
DataPool                                     16.6G   176G       26K  /home/DataPool
DataPool@DataPoolSnapshot                      14K      -       24K  -
DataPool/Images                              16.6G   176G       25K  /home/DataPool/Images
DataPool/Images@Images.Snapshot                 0B      -       25K  -
DataPool/Images/Backup                         24K   176G       24K  /home/DataPool/Images/Backup
DataPool/Images/Backup@Images.Snapshot          0B      -       24K  -
DataPool/Images/Programs                     16.6G   176G     16.6G  /home/DataPool/Images/Programs
DataPool/Images/Programs@Programs1.Snapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs2.Snapshot     0B      -     16.6G  -
DataPool/Images/marlene                        24K   250M       24K  /home/DataPool/Images/marlene
DataPool/Images/marlene@Images.Snapshot         0B      -       24K  -
DataPool/Programs1.Clone                       21K   176G     16.6G  /home/DataPool/Programs1.Clone
DataPool/Programs1.Clone2                       0B   176G     16.6G  /home/DataPool/Programs1.Clone2
DataPool/Programs1.Clone5                       0B   176G     16.6G  /home/DataPool/Programs1.Clone5

# -  - #
# - List clone content - #
ls -lh /datapool/project1/
ls /home/DataPool/Programs1.Clone;
Linux.Img

ls /home/DataPool/Programs1.Clone/Linux.Img;
Linux_Arch.Img

la /home/DataPool/Programs1.Clone/Linux.Img/Linux_Arch.Img;
total 21K
drwxr-xr-x  9 is_derayo is_derayo  9 Jan  3 17:48 ./
drwxr-xr-x  3 is_derayo is_derayo  3 Jan  3 17:41 ../
drwxr-xr-x 12 is_derayo is_derayo 12 Jan  3 17:44 Arch_Configuration/
drwxr-xr-x  2 is_derayo is_derayo  5 Jan  3 17:42 Arch_ISOs.Img/
drwxr-xr-x 13 is_derayo is_derayo 16 Jan  3 17:47 Arch_Install/
drwxr-xr-x  3 is_derayo is_derayo  7 Jan  3 17:44 Arch_i3.Ins/
drwxr-xr-x  3 is_derayo is_derayo  4 Jan  3 17:47 Cleaning_Arch/
drwxr-xr-x  2 is_derayo is_derayo 17 Jan  3 17:48 Videos/
drwxr-xr-x  3 is_derayo is_derayo  6 Jan  3 17:48 VirtualManager.Ins/


cd /home/DataPool/
┌─[is_derayo]──[ArchBtrfs]:/home/DataPool$
└──>>

la
total 2.5K
drwxr-xr-x 6 root root       6 Jan  4 15:30 ./
drwxr-xr-x 1 root root      42 Jan  3 16:05 ../
drwxr-xr-x 5 root root       5 Jan  4 13:22 Images/
drwxrwxr-x 3 root is_derayo  3 Jan  3 17:41 Programs1.Clone/
drwxrwxr-x 3 root is_derayo  3 Jan  3 17:41 Programs1.Clone2/
drwxrwxr-x 3 root is_derayo  3 Jan  3 17:41 Programs1.Clone5/

zfs list -t snapshot
NAME                                          USED  AVAIL     REFER  MOUNTPOINT
DataPool@DataPoolSnapshot                      14K      -       24K  -
DataPool/Images@Images.Snapshot                13K      -       25K  -
DataPool/Images/Backup@Images.Snapshot          0B      -       24K  -
DataPool/Images/Programs@Programs1.Snapshot     0B      -     16.6G  -
DataPool/Images/Programs@Programs2.Snapshot     0B      -     16.6G  -
DataPool/Images/marlene@Images.Snapshot         0B      -       24K  -


zfs list -t snapshot
zfs list -r -t snapshot -o name,creation DataPool/Images/Programs;
zfs list -r -t snapshot -o name,creation DataPool/Images;
zfs list -o space;
zfs list -o space -r DataPool/Images;
zfs list -o space -r DataPool/Images/Programs;
zfs list -r DataPool;
zfs list -r DataPool/Images;
zfs list -r DataPool/Images/Programs;



df -h;
Filesystem                Type             Size  Used Avail Use% Mounted on
proc                      proc                0     0     0    - /proc
sys                       sysfs               0     0     0    - /sys
dev                       devtmpfs         2.9G     0  2.9G   0% /dev
run                       tmpfs            2.9G  828K  2.9G   1% /run
efivarfs                  efivarfs            0     0     0    - /sys/firmware/efi/efivars
/dev/vda3                 btrfs             30G  9.5G   21G  32% /
securityfs                securityfs          0     0     0    - /sys/kernel/security
tmpfs                     tmpfs            2.9G     0  2.9G   0% /dev/shm
devpts                    devpts              0     0     0    - /dev/pts
cgroup2                   cgroup2             0     0     0    - /sys/fs/cgroup
pstore                    pstore              0     0     0    - /sys/fs/pstore
none                      bpf                 0     0     0    - /sys/fs/bpf
systemd-1                 -                   -     -     -    - /proc/sys/fs/binfmt_misc
hugetlbfs                 hugetlbfs           0     0     0    - /dev/hugepages
mqueue                    mqueue              0     0     0    - /dev/mqueue
debugfs                   debugfs             0     0     0    - /sys/kernel/debug
tracefs                   tracefs             0     0     0    - /sys/kernel/tracing
configfs                  configfs            0     0     0    - /sys/kernel/config
fusectl                   fusectl             0     0     0    - /sys/fs/fuse/connections
none                      ramfs               0     0     0    - /run/credentials/systemd-sysusers.service
/dev/vda3                 btrfs             30G  9.5G   21G  32% /.snapshots
/dev/vda3                 btrfs             30G  9.5G   21G  32% /home
/dev/vda3                 btrfs             30G  9.5G   21G  32% /var
tmpfs                     tmpfs            2.9G   43M  2.9G   2% /tmp
/dev/vda4                 btrfs             68G  134M   66G   1% /home/Data
/dev/vda1                 vfat             671M   70M  601M  11% /boot
DataPool                  zfs              177G  128K  177G   1% /home/DataPool
DataPool/Images           zfs              177G  128K  177G   1% /home/DataPool/Images
DataPool/Images/Backup    zfs              177G  128K  177G   1% /home/DataPool/Images/Backup
DataPool/Images/Programs  zfs              193G   17G  177G   9% /home/DataPool/Images/Programs
binfmt_misc               binfmt_misc         0     0     0    - /proc/sys/fs/binfmt_misc
tmpfs                     tmpfs            594M   72K  594M   1% /run/user/1000
gvfsd-fuse                fuse.gvfsd-fuse     0     0     0    - /run/user/1000/gvfs
DataPool/Images/marlene   zfs              250M  128K  250M   1% /home/DataPool/Images/marlene
DataPool/Programs1.Clone  zfs              193G   17G  177G   9% /home/DataPool/Programs1.Clone
DataPool/Programs1.Clone2 zfs              193G   17G  177G   9% /home/DataPool/Programs1.Clone2
DataPool/Programs1.Clone5 zfs              193G   17G  177G   9% /home/DataPool/Programs1.Clone5
total                     -                1.5T  105G  1.4T   7% -







Swap an original data store with a clone
zfs promote <clonedatastore>Delegate ZFS file system management through permissions

See a list of commands and properties to delegate, and how to delegate them to users and groups:
zfs allow

See delegated permissions (if any):
zfs allow <pool|datastore>

Allow a user to create snapshots (inherits):
zfs allow -u <user> snapshot <pool|datastore>

Remove a user’s permission to manage snapshots:
zfs unallow -u <user> snapshot <pool|datas



# -  - #
# -  - #
# -  - #




# - eof - #
