Skip to content

Instantly share code, notes, and snippets.

@anurag-roy
Created February 24, 2024 18:10
Show Gist options
  • Save anurag-roy/5dcb9bd5f54de783d39dd9bf1c74a088 to your computer and use it in GitHub Desktop.
Save anurag-roy/5dcb9bd5f54de783d39dd9bf1c74a088 to your computer and use it in GitHub Desktop.
#!/bin/bash
# Manual zsysctl gc
clear
garbagespace=
kernelscount=
kernelstrim=
check () {
garbagespace=$(zpool list | awk -F '[% ]+' '/bpool/ {print $8}')
kernelscount=$(zsysctl show --full | grep -c -C 2 Kernel)
clear
echo "Your BPOOL is $garbagespace% full."
echo "You have $kernelscount Kernel Snapshots"
echo ""
}
empty () {
garbagespace=$(zpool list | awk -F '[% ]+' '/bpool/ {print $8}')
kernelscount=$(zsysctl show --full | grep -c -C 2 Kernel)
if [[ $garbagespace -gt 50 ]]
then
echo "How many snapshots would you like to trim?"
echo "0 - $kernelscount"
while :; do
read kernelstrim
[[ $kernelstrim =~ ^[0-9]+$ ]] || { echo "Enter a valid number!"; continue; }
if ((kernelstrim >= 0 && kernelstrim <= kernelscount)); then
break
else
echo "Number out of range, try again!"
fi
done
if [[ $kernelstrim -gt 0 ]]
then
clear
echo ""
echo "Collecting Garbage"
echo ""
zsysctl show --full | grep -C 2 Kernel | grep bpool | tac | grep bpool -m $kernelstrim | awk -F '[_ ]+' '/bpool/ {print $5}'| xargs -n1 zsysctl state remove -s
echo ""
echo "Done."
echo ""
elif [[ $kernelstrim = 0 ]]
then
clear
echo ""
echo "Cancelled" >&2
echo ""
fi
else
clear
echo "BPOOL is less than 50% full"
echo "Do you still want to trim snapshots?"
read trimanswer
if [[ $trimanswer = yes ]] || [[ $trimanswer = y ]]
then
clear
echo "How many snapshots would you like to trim?"
echo "0 - $kernelscount"
while :; do
read kernelstrim
[[ $kernelstrim =~ ^[0-9]+$ ]] || { echo "Enter a valid number!"; continue; }
if ((kernelstrim >= 0 && kernelstrim <= kernelscount)); then
break
else
echo "Number out of range, try again!"
fi
done
if [[ $kernelstrim -gt 0 ]]
then
clear
echo ""
echo "Collecting Garbage"
echo ""
zsysctl show --full | grep -C 2 Kernel | grep bpool | tac | grep bpool -m $kernelstrim | awk -F '[_ ]+' '/bpool/ {print $5}'| xargs -n1 zsysctl state remove -s
echo ""
echo "Done."
echo ""
elif [[ $kernelstrim = 0 ]]
then
clear
echo ""
echo "Cancelled"
echo ""
fi
fi
fi
}
while true; do
options=("Check Garbage" "Empty Garbage" "Quit")
echo "Choose an option: "
select opt in "${options[@]}"; do
case $REPLY in
1) check; break ;;
2) empty; break ;;
3) break 2 ;;
*) echo "Invalid Option!" >&2
esac
done
done
echo "Have a nice day!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment