From 2f86d2c0a57e8e260f5a019edfe494a874f4405b Mon Sep 17 00:00:00 2001 From: Alex Tavarez Date: Fri, 12 Sep 2025 09:46:23 -0400 Subject: [PATCH] Renamed media drive script--rewrote to account for different cases in handling media drive --- zfs/prepare-media-drive.sh | 52 ------------------ zfs/zfs-media-drive.sh | 110 +++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+), 52 deletions(-) delete mode 100644 zfs/prepare-media-drive.sh create mode 100644 zfs/zfs-media-drive.sh diff --git a/zfs/prepare-media-drive.sh b/zfs/prepare-media-drive.sh deleted file mode 100644 index 9e058fe..0000000 --- a/zfs/prepare-media-drive.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -set -euo pipefail - -# @TODO: Implement more soft-coding and interactivity to this script - -sudo zpool create \ - -o ashift=12 \ - -o autotrim=on \ - -o compatibility=openzfs-2.1-linux \ - -O encryption=on \ - -O keylocation=file:///etc/zfs/keys/zroot.key \ - -O keyformat=passphrase \ - -O acltype=posixacl \ - -O xattr=sa \ - -O dnodesize=auto \ - -O compression=zstd-3 \ - -O normalization=formD \ - -O relatime=on \ - -O canmount=off \ - -O mountpoint=none \ - "$2" \ - /dev/disk/by-id/"${1}"-part1 - -DATASET=("${HOME}/Documents/.calibre" "${2}/LITERATURE") -mkdir -p "${DATASET[0]}" -sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}" - -DATASET=("${HOME}/Videos" "${2}/FILM") -mkdir -p "${DATASET[0]}" -sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}" - -DATASET=("${HOME}/.var/app/com.valvesoftware.Steam" "${2}/STEAMGAMES") -mkdir -p "${DATASET[0]}" -sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}" - -DATASET=("${HOME}/.var/app/org.libretro.RetroArch" "${2}/RARCHGAMES") -mkdir -p "${DATASET[0]}" -sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}" - -DATASET=("${HOME}/Games" "${2}/GAMES") -mkdir -p "${DATASET[0]}" -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/org.libretro.RetroArch" "${DATASET[0]}/libRetro" - -DATASET=("${HOME}/.var/app/org.libretro.RetroArch" "${2}/RARCHGAMES") -mkdir -p "${DATASET[0]}" -sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}" - -DATASET=("${HOME}/.XXX" "${2}/XXX") -mkdir -p "${DATASET[0]}" -sudo zfs create -o keylocation=prompt -o keyformat=passphrase -o mountpoint="${DATASET[0]}" "${DATASET[1]}" \ No newline at end of file diff --git a/zfs/zfs-media-drive.sh b/zfs/zfs-media-drive.sh new file mode 100644 index 0000000..6ffba24 --- /dev/null +++ b/zfs/zfs-media-drive.sh @@ -0,0 +1,110 @@ +#!/bin/bash +set -euo pipefail + +# @TODO: Implement more soft-coding and interactivity to this script +ZFS_KEY_LOC="file:///etc/zfs/keys/zroot.key" +ZFS_COMPAT="openzfs-2.1-linux" +ZFS_KEY_FORMAT="passphrase" +ZFS_COMPRESSION="zstd-3" + +if [ -z "$1" ]; then + exit 1 +fi + +if [ -z "$3" ] && [ "$1" == "init" ]; then + ZFS_POOL_NAME="media" +else + if [ "$1" == "init" ]; then + ZFS_POOL_NAME="$3" + fi +fi + +if [ -z "$2" ] && [ "$1" == "init" ]; then + exit 1 +else + if [ "$1" == "init" ]; then + ZFS_TARGET_DRIVE="$2" # @NOTE typically, device name will be disk by-id and end with "-part1" given how it is to be used with other scripts + fi +fi + +if [ "$1" == "init" ]; then + sudo zpool create \ + -o ashift=12 \ + -o autotrim=on \ + -o compatibility="$ZFS_COMPAT" \ + -O encryption=on \ + -O keylocation="$ZFS_KEY_LOC" \ + -O keyformat="$ZFS_KEY_FORMAT" \ + -O acltype=posixacl \ + -O xattr=sa \ + -O dnodesize=auto \ + -O compression="$ZFS_COMPRESSION" \ + -O normalization=formD \ + -O relatime=on \ + -O canmount=off \ + -O mountpoint=none \ + "$ZFS_POOL_NAME" \ + /dev/disk/by-id/"${ZFS_TARGET_DRIVE}" +elif [ "$1" == "ext" ]; then + if [ -z "$2" ]; then + exit 1 + else + ZFS_POOL_NAME="$2" + fi + + ZFS_DATASET_OPTS="$3" + + shift 3 + + # @NOTE from this point on, @ must be list of arrays each containing two strings + for i in "$@"; do + mkdir -p "${i[0]}" + sudo zfs create "${ZFS_DATASET_OPTS}" -o mountpoint="${HOME}${i[0]}" "${ZFS_POOL_NAME}/${i[1]}" + done +fi + +if [ -z "$4" ] && [ "$1" == "init" ]; then + DATASET=("${HOME}/Documents/.calibre" "${ZFS_POOL_NAME}/LITERATURE") + mkdir -p "${DATASET[0]}" + sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}" + + DATASET=("${HOME}/Videos" "${ZFS_POOL_NAME}/FILM") + mkdir -p "${DATASET[0]}" + sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}" + + DATASET=("${HOME}/.var/app/com.valvesoftware.Steam" "${ZFS_POOL_NAME}/STEAMGAMES") + mkdir -p "${DATASET[0]}" + sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}" + + DATASET=("${HOME}/.var/app/org.libretro.RetroArch" "${ZFS_POOL_NAME}/RARCHGAMES") + mkdir -p "${DATASET[0]}" + sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}" + + DATASET=("${HOME}/Games" "${ZFS_POOL_NAME}/GAMES") + mkdir -p "${DATASET[0]}" + 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/org.libretro.RetroArch" "${DATASET[0]}/libRetro" + + DATASET=("${HOME}/.var/app/org.libretro.RetroArch" "${ZFS_POOL_NAME}/RARCHGAMES") + mkdir -p "${DATASET[0]}" + sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}" + + DATASET=("${HOME}/.XXX" "${ZFS_POOL_NAME}/XXX") + mkdir -p "${DATASET[0]}" + sudo zfs create -o keylocation=prompt -o keyformat=passphrase -o mountpoint="${DATASET[0]}" "${DATASET[1]}" +else + if [ "$1" == "init" ]; then + ZFS_DATASET_OPTS="$4" + + shift 4 + + # @NOTE from this point on, @ must be list of arrays each containing two strings + for i in "$@"; do + mkdir -p "${i[0]}" + sudo zfs create "${ZFS_DATASET_OPTS}" -o mountpoint="${HOME}${i[0]}" "${ZFS_POOL_NAME}/${i[1]}" + done + else + exit 0 + fi +fi