# - bof - #

#!/bin/bash



# vim ~/Arch_ZFS_Data_Installation.sh;
# copy & paste this content
# chmod +x ~/Arch_ZFS_Data_Installation.sh; ~/./Arch_ZFS_Data_Installation.sh;



# -  - #
# - scp command - #
# scp is_derayo@192.168.1.100:/DataPool/Images/Programs/Linux.Img/Linux_Arch.Img/Arch_Install/Ermanno_Arch.Ins/Arch_ZFS-Data_Installation.sh .;



# -  - #
# - Requirements - #
# DTs_ArchBase_AdditionalSoftware.sh
# -  - #
# - Partition ext4 Data ready - #
# sudo mkfs.ext4 -L Data /dev/vda4;

clear;



# :a
# -  - #
# - Install Zfs support - #
sudo pacman -Syu --noconfirm && sudo pacman -Syyuu --noconfirm;
yay -S zfs-utils zfs-dkms;
echo ""
echo "System updated..."
echo ""
read -t 3 -p "zfs-utils zfs-dkms packages installed...";
echo ""



# :b
# -  - #
# - Enable services - #
sudo systemctl enable zfs-import-cache \
                      zfs-mount \
                      zfs-import.target \
                      zfs.target;
sudo systemctl start  zfs.target;
echo ""
read -t 3 -p "Zfs enable...";
echo ""



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



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



# :e
# -  - #
# - Get Data UUID / Create Data Zpool - #

# -  - #
# - Get Data UUID - #
s="Data";                           # string to locate
dl=$(lsblk -f | grep " "$s" ");     # Data line
pi="${dl%%$s*}";                    # portion initial to trim
l="$(( ${#pi} + 4 ))";              # lengh of portion initial
u="$(echo ${dl:l})";                # HDD UUID
UUID=`echo $u | sed 's/ *$//g'`;    # remove all spaces a the begining

# -  - #
# - Create Data Zpool - #
sudo rm -rf /Data;
sudo zpool create -f Data /dev/disk/by-uuid/$UUID;
#sudo zpool create -f Data /dev/disk/by-partuuid/d0865797-98e4-8347-8418-3376216d4566;
#sudo zpool create -f DataPool vda;


# - Enable compression (off by default, inherits) - #
sudo zfs set compression=on Data;
zpool status -v Data;

# -  - #
# - Create Documents DataSets - #
sudo zfs create Data/Documents;
sudo zfs create Data/Documents/Downloads;
sudo zfs create Data/Documents/Music;
sudo zfs create Data/Documents/Pictures;
sudo zfs create Data/Documents/Videos;



sudo zfs create DataPool/Documents;
sudo zfs create DataPool/Documents/Downloads;
sudo chown -R is_derayo:is_derayo /DataPool;
chmod 775 -R /DataPool;



sudo chown -R is_derayo:is_derayo /Data;
chmod 775 -R /Data;
echo ""
read -t 3 -p "Data folders DataSets created...";
echo ""



#zpool status;
zpool status -v Data;
echo ""
read -t 3 -p "Data zpool status...";
echo ""

zfs list;
echo ""
read -t 3 -p "Zfs Documents DataSets...";
echo ""



<<'comment'
zpool status;
zpool status -v Data;
zpool list -v;
zpool list -v Data;
zfs list;
zfs get mounted Data;
zfs get mountpoint Data;
zpool iostat;
zpool iostat -v;
zpool iostat -v Data;
zpool destroy Data;
zfs get all Data;

# - zfs list properties - #
zfs get all;
zfs get all Data;
zfs get all Data/Documents;
zfs get all Data/Documents/Downloads;
zfs list -r Data;
zfs list -r Data/Documents;
zfs list -r Data/Documents/Downloads;
zfs list -r Data/Documents/Videos;

# -  - #
# - Quota - #
zfs get quota Data/Documents/Videos;
sudo zfs set quota=2G Data/Documents/Videos;



# -  - #
# - Manage Snapshots - #

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

sudo zpool set listsnapshots=on Data;

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

NAME                                                         USED  AVAIL     REFER  MOUNTPOINT
Data@Data.Snapshot_2022-02-13_11-57-08                         0B      -       24K  -
Data/Documents@Data.Snapshot_2022-02-13_11-57-08               0B      -       26K  -
Data/Documents/Downloads@Data.Snapshot_2022-02-13_11-57-08     0B      -       24K  -
Data/Documents/Music@Data.Snapshot_2022-02-13_11-57-08         0B      -       24K  -
Data/Documents/Pictures@Data.Snapshot_2022-02-13_11-57-08      0B      -       24K  -
Data/Documents/Videos@Data.Snapshot_2022-02-13_11-57-08        0B      -       24K  -

# -  - #
# - Roolback Data Snapshot - #
zfs list -rt snapshot Data;
sudo zfs rollback <pool|datastore>@<snapshot>
sudo zfs rollback Data@Data.Snapshot_2022-02-13_11-57-08;

# -  - #
# - Destroy snapshot (DANGEROUS!) - #
zfs list -rt snapshot Data;
sudo zfs destroy -r Data@Data.Snapshot_2022-02-13_11-57-08;



# -  - #
# - 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-13_11-57-08;

# -  - #
# - Destroy snapshot (DANGEROUS!) - #
zfs list -rt snapshot DataPool;
sudo zfs destroy -r DataPool@DataPool.Snapshot_2022-02-10_00-02-31;
sudo zfs destroy -r DataPool@DataPool.Snapshot_2022-02-09_19-02-50;



# -  - #
# - Importing zpool - #

# - Show zpools available - #
sudo zpool import;



# - Importing DataPpool - #
sudo zpool import -f Data;

zpool list;
zpool status;
zpool status -v;
zpool status -v Data;

sudo zpool clear Data;
sudo zpool scrub Data;



# -  - #
# - Destroy snapshot (DANGEROUS!) - #
zfs list -rt snapshot Data;
sudo zfs destroy -r Data@Data.Snapshot_2022-02-13_11-57-08;



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

zfs get origin Data;

# -  - #
# - Create clone - #
sudo zfs clone Data@Data.Snapshot Data/Data.Clone;
zfs list -r -t snapshot -o name,creation Data;
zfs list -r -t snapshot -o name,creation Data/Documents;
ls /Data/Data.Clone;



# -  - #
# - Show disk space - #
zfs list -o space;
zfs list -o space -r Data;
zfs list;
zfs list -r Data;
zfs list Data/Documents;
zfs list -r Data/Documents/Videos;
la /Data/Documents;



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



# -  - #
# - Clone snapshot - #

# -  - #
# - Crate/Delete snapshot clone - #
zfs list -r Data;
zfs list -t snapshot;
zfs list -t snapshot Data;

zfs list -t snapshot Data/Documents;
NAME                                               USED  AVAIL     REFER  MOUNTPOINT
Data/Documents@Data.Snapshot_2022-02-13_12-10-07    13K      -       26K  -

sudo zfs clone Data/Documents@Data.Snapshot_2022-02-13_12-10-07 Data/Documents-Snapshot.Clone1;
zfs list -r Data;

NAME                                                         USED  AVAIL     REFER  MOUNTPOINT
Data                                                         401K  67.3G       25K  /Data
Data@Data.Snapshot_2022-02-13_12-10-07                        13K      -       24K  -
Data/Documents                                               135K  67.3G       26K  /Data/Documents
Data/Documents@Data.Snapshot_2022-02-13_12-10-07              13K      -       26K  -
Data/Documents-Snapshot.Clone1                                 0B  67.3G       26K  /Data/Documents Snapshot.Clone1
Data/Documents/Downloads                                      24K  67.3G       24K  /Data/Documents/Downloads
Data/Documents/Downloads@Data.Snapshot_2022-02-13_12-10-07     0B      -       24K  -
Data/Documents/Music                                          24K  67.3G       24K  /Data/Documents/Music
Data/Documents/Music@Data.Snapshot_2022-02-13_12-10-07         0B      -       24K  -
Data/Documents/Pictures                                       24K  67.3G       24K  /Data/Documents/Pictures
Data/Documents/Pictures@Data.Snapshot_2022-02-13_12-10-07      0B      -       24K  -
Data/Documents/Videos                                         24K  2.00G       24K  /Data/Documents/Videos
Data/Documents/Videos@Data.Snapshot_2022-02-13_12-10-07        0B      -       24K  -

# -  - #
# - Destroy clone (DANGEROUS!) - #
sudo zfs destroy Data/Documents-Snapshot.Clone2;
zfs list -r Data;


# -  - #
# - List clone content - #
la /Data/Documents-Snapshot.Clone1;
total 3.0K
drwxrwxr-x 6 is_derayo is_derayo 6 Feb 13 11:43 ./
drwxrwxr-x 4 is_derayo is_derayo 4 Feb 13 12:25 ../
drwxr-xr-x 2 root      root      2 Feb 13 11:43 Downloads/
drwxr-xr-x 2 root      root      2 Feb 13 11:43 Music/
drwxr-xr-x 2 root      root      2 Feb 13 11:43 Pictures/
drwxr-xr-x 2 root      root      2 Feb 13 11:43 Videos/



# -  - #
# - List Zfs content - #
zfs list -t snapshot;
zfs list -rt snapshot -o name,creation Data;
zfs list -rt snapshot -o name,creation Data/Documents;
zfs list -rt snapshot -o name,creation Data/Documents/Downloads;
zfs list -o space;
zfs list -o space -r Data;
zfs list -o space -r Data/Documents;
zfs list -o space -r Data/Documents/Videos;
zfs list -r Data;
zfs list -r Data/Documents;
zfs list -r Data/Documents/Videos;



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  688K  2.9G   1% /run
/dev/vda1                      ext4         30G   16G   13G  57% /
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
bpf                            bpf            0     0     0    - /sys/fs/bpf
systemd-1                      autofs         0     0     0    - /proc/sys/fs/binfmt_misc
mqueue                         mqueue         0     0     0    - /dev/mqueue
tracefs                        tracefs        0     0     0    - /sys/kernel/tracing
hugetlbfs                      hugetlbfs      0     0     0    - /dev/hugepages
debugfs                        debugfs        0     0     0    - /sys/kernel/debug
configfs                       configfs       0     0     0    - /sys/kernel/config
fusectl                        fusectl        0     0     0    - /sys/fs/fuse/connections
tmpfs                          tmpfs       2.9G     0  2.9G   0% /tmp
tmpfs                          tmpfs       594M   32K  594M   1% /run/user/1000
Data                           zfs          68G  128K   68G   1% /Data
Data/Documents                 zfs          68G  128K   68G   1% /Data/Documents
Data/Documents/Downloads       zfs          68G  128K   68G   1% /Data/Documents/Downloads
Data/Documents/Music           zfs          68G  128K   68G   1% /Data/Documents/Music
Data/Documents/Pictures        zfs          68G  128K   68G   1% /Data/Documents/Pictures
Data/Documents/Videos          zfs         2.0G  128K  2.0G   1% /Data/Documents/Videos
Data/Documents-Snapshot.Clone1 zfs          68G  128K   68G   1% /Data/Documents-Snapshot.Clone1
total                          -           448G   16G  431G   4% -
comment



rm -rf ~/Arch_ZFS_Data_Installation.sh;
echo ""
read -t 3 -p "Process finished successfully...";
echo ""



# - eof - #
