From 0fb68239a09fad80dc32505c445670c396822fac Mon Sep 17 00:00:00 2001 From: Kroese Date: Thu, 16 Oct 2025 23:46:32 +0200 Subject: [PATCH] Create memory.sh --- src/memory.sh | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/memory.sh diff --git a/src/memory.sh b/src/memory.sh new file mode 100644 index 0000000..76c17e5 --- /dev/null +++ b/src/memory.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +RAM_AVAIL=$(free -b | grep -m 1 Mem: | awk '{print $7}') + +if [[ "$RAM_CHECK" != [Nn]* && "${RAM_SIZE,,}" != "max" && "${RAM_SIZE,,}" != "half" ]]; then + + AVAIL_MEM=$(formatBytes "$RAM_AVAIL") + + if (( (RAM_WANTED + RAM_SPARE) > RAM_AVAIL )); then + msg="Your configured RAM_SIZE of ${RAM_SIZE/G/ GB} is too high for the $AVAIL_MEM of memory available," + if [[ "${FS,,}" == "zfs" ]]; then + info "$msg but since ZFS is active this will be ignored." + else + RAM_SIZE="max" + warn "$msg it will automatically be adjusted to a lower amount." + fi + else + if (( (RAM_WANTED + (RAM_SPARE * 3)) > RAM_AVAIL )); then + msg="your configured RAM_SIZE of ${RAM_SIZE/G/ GB} is very close to the $AVAIL_MEM of memory available," + if [[ "${FS,,}" == "zfs" ]]; then + info "$msg but since ZFS is active this will be ignored." + else + warn "$msg please consider a lower amount." + fi + fi + fi + +fi + +if [[ "${RAM_SIZE,,}" == "half" ]]; then + + RAM_WANTED=$(( RAM_AVAIL / 2 )) + RAM_WANTED=$(( RAM_WANTED / 1073741825 )) + + if (( "$RAM_WANTED" < 1 )); then + RAM_WANTED=$(( RAM_AVAIL / 2 )) + RAM_WANTED=$(( RAM_WANTED / 1048577 )) + RAM_SIZE="${RAM_WANTED}M" + else + RAM_SIZE="${RAM_WANTED}G" + fi + +fi + +if [[ "${RAM_SIZE,,}" == "max" ]]; then + + RAM_WANTED=$(( RAM_AVAIL - (RAM_SPARE * 3) )) + RAM_WANTED=$(( RAM_WANTED / 1073741825 )) + + if (( "$RAM_WANTED" < 1 )); then + + RAM_WANTED=$(( RAM_AVAIL - (RAM_SPARE * 2) )) + RAM_WANTED=$(( RAM_WANTED / 1073741825 )) + + if (( "$RAM_WANTED" < 1 )); then + + RAM_WANTED=$(( RAM_AVAIL - RAM_SPARE )) + RAM_WANTED=$(( RAM_WANTED / 1073741825 )) + + if (( "$RAM_WANTED" < 1 )); then + + RAM_WANTED=$(( RAM_AVAIL - RAM_SPARE )) + RAM_WANTED=$(( RAM_WANTED / 1048577 )) + + if (( "$RAM_WANTED" < 1 )); then + + RAM_WANTED=$(( RAM_AVAIL )) + RAM_WANTED=$(( RAM_WANTED / 1048577 )) + + fi + + RAM_SIZE="${RAM_WANTED}M" + else + RAM_SIZE="${RAM_WANTED}G" + fi + else + RAM_SIZE="${RAM_WANTED}G" + fi + else + RAM_SIZE="${RAM_WANTED}G" + fi + +fi + +return 0