Compare commits

..

4 Commits

Author SHA1 Message Date
Alex Tavarez
409b8e50f6 Abstracted dataset creation from within function to separate function 2025-09-17 12:55:16 -04:00
Alex Tavarez
9585df0209 Replaced function with default variable value 2025-09-17 12:34:56 -04:00
Alex Tavarez
92cfaebb66 Added an argument shift and simplified conditional case 2025-09-17 12:05:42 -04:00
Alex Tavarez
fb906b659c Added a position shift for script arguments, simplified conditional case 2025-09-17 12:03:40 -04:00
3 changed files with 31 additions and 24 deletions

View File

@@ -1,15 +1,15 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
clear-apt-snaps () { REGEX='apt-'
zfs list -t snapshot | grep 'apt-' | sed 's| .*$||g' | head -n -5 | xargs -d '\n' -I {} sudo zfs destroy {}
}
if [ -z "$1" ]; then if [ -z "$1" ]; then
exit 1 exit 1
fi fi
if ! [ -z "$1" ] && [ "$1" == "upgrades" ]; then if [ -n "$1" ] && [ "$1" == "upgrades" ]; then
shift
while getopts "r:" opt; do while getopts "r:" opt; do
case "$opt" in case "$opt" in
r) REGEX=${OPTARG};; r) REGEX=${OPTARG};;
@@ -17,9 +17,5 @@ if ! [ -z "$1" ] && [ "$1" == "upgrades" ]; then
esac esac
done done
if [ -z "$REGEX" ]; then
clear-apt-snaps
else
zfs list -t snapshot | grep "${REGEX}" | sed 's| .*$||g' | head -n -5 | xargs -d '\n' -I {} sudo zfs destroy {} zfs list -t snapshot | grep "${REGEX}" | sed 's| .*$||g' | head -n -5 | xargs -d '\n' -I {} sudo zfs destroy {}
fi fi
fi

9
zfs/zfs-media-drive.help Normal file
View File

@@ -0,0 +1,9 @@
This script allows the creation of ZFS pool specifically for the purpose of media.
This pool is divided into datasets that allow useful storage management of that media.
-k Option to provide a custom path to the key for the encrypted filesystem. Equivalent to 'keylocation' option in ZFS pool creation.
-f Opton to provide a custom format for the aforementioned key. Equivalnt to 'keyformat' option in ZFS pool creation.
-c Option to specify custom ZFS compression algorithm for ZFS pool. Equivalent to 'compression' option in ZFS pool creation.
-v Option to specify custom ZFS version for compatibility purposes. Equivalent to 'compatibility' option in ZFS pool creation.
-p Option to provide a custom name for the created ZFS pool.
-d Specify the storage device, volume or partition to be given a pool.

View File

@@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
SCRIPT_ROOT=$(dirname "$0")
# @TODO: Implement more soft-coding and interactivity to this script # @TODO: Implement more soft-coding and interactivity to this script
ZFS_POOL_NAME="media" ZFS_POOL_NAME="media"
ZFS_COMPAT="openzfs-2.1-linux" ZFS_COMPAT="openzfs-2.1-linux"
@@ -28,32 +29,31 @@ create_zpool () {
/dev/disk/by-id/"${1}" /dev/disk/by-id/"${1}"
} }
mkdataset () {
mkdir -p "$1"
sudo zfs create -o mountpoint="$1" "$2"
}
create_datasets () { create_datasets () {
DATASET=("${HOME}/Documents/.calibre" "${1}/LITERATURE") DATASET=("${HOME}/Documents/.calibre" "${1}/LITERATURE")
mkdir -p "${DATASET[0]}" mkdataset "${DATASET[0]}" "${DATASET[1]}"
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
DATASET=("${HOME}/Videos" "${1}/FILM") DATASET=("${HOME}/Videos" "${1}/FILM")
mkdir -p "${DATASET[0]}" mkdataset "${DATASET[0]}" "${DATASET[1]}"
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
DATASET=("${HOME}/.var/app/com.valvesoftware.Steam" "${1}/STEAMGAMES") DATASET=("${HOME}/.var/app/com.valvesoftware.Steam" "${1}/STEAMGAMES")
mkdir -p "${DATASET[0]}" mkdataset "${DATASET[0]}" "${DATASET[1]}"
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
DATASET=("${HOME}/.var/app/org.libretro.RetroArch" "${1}/RARCHGAMES") DATASET=("${HOME}/.var/app/org.libretro.RetroArch" "${1}/RARCHGAMES")
mkdir -p "${DATASET[0]}" mkdataset "${DATASET[0]}" "${DATASET[1]}"
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
DATASET=("${HOME}/Games" "${1}/GAMES") DATASET=("${HOME}/Games" "${1}/GAMES")
mkdir -p "${DATASET[0]}" mkdataset "${DATASET[0]}" "${DATASET[1]}"
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
ln -s "${HOME}/.var/app/com.valvesoftware.Steam" "${DATASET[0]}/Steam" ln -s "${HOME}/.var/app/com.valvesoftware.Steam" "${DATASET[0]}/Steam"
ln -s "${HOME}/.var/app/org.libretro.RetroArch" "${DATASET[0]}/libRetro" ln -s "${HOME}/.var/app/org.libretro.RetroArch" "${DATASET[0]}/libRetro"
DATASET=("${HOME}/.var/app/org.libretro.RetroArch" "${1}/RARCHGAMES") DATASET=("${HOME}/.var/app/org.libretro.RetroArch" "${1}/RARCHGAMES")
mkdir -p "${DATASET[0]}" mkdataset "${DATASET[0]}" "${DATASET[1]}"
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
DATASET=("${HOME}/.XXX" "${1}/XXX") DATASET=("${HOME}/.XXX" "${1}/XXX")
mkdir -p "${DATASET[0]}" mkdir -p "${DATASET[0]}"
@@ -61,14 +61,16 @@ create_datasets () {
} }
print_menu () { print_menu () {
echo "Placeholder content" echo "$(<"${SCRIPT_ROOT}"/zfs-media-drive.help)"
} }
if [ -z "$1" ]; then if [ -z "$1" ]; then
exit 1 exit 1
fi fi
if ! [ -z "$1" ] && [ "$1" == "init" ]; then if [ -n "$1" ] && [ "$1" == "init" ]; then
shift
while getopts "d:p:k:f:c:v:" opt; do while getopts "d:p:k:f:c:v:" opt; do
case $opt in case $opt in
k) ZFS_KEY_LOC="${OPTARG}";; k) ZFS_KEY_LOC="${OPTARG}";;
@@ -82,7 +84,7 @@ if ! [ -z "$1" ] && [ "$1" == "init" ]; then
done done
if [ -z "$ZFS_TARGET_DRIVE" ]; then if [ -z "$ZFS_TARGET_DRIVE" ]; then
echo "It is necessary to argue a -d option." echo "Error: It is necessary to argue a -d option."
exit 1 exit 1
fi fi