From 6724ddbd7dcd5f2758871649c3d9f01cf0ceed7b Mon Sep 17 00:00:00 2001 From: Kroese Date: Thu, 2 May 2024 20:21:21 +0200 Subject: [PATCH] feat: Check the amount of RAM available (#716) --- readme.md | 26 +++++++++++++------------- src/config.sh | 2 +- src/proc.sh | 2 +- src/reset.sh | 23 +++++++++++++++++++++-- 4 files changed, 36 insertions(+), 17 deletions(-) diff --git a/readme.md b/readme.md index 21601a0..8cbf8ff 100644 --- a/readme.md +++ b/readme.md @@ -61,17 +61,6 @@ docker run -it --rm --name dsm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMI Enjoy your brand new machine, and don't forget to star this repo! -* ### How do I change the size of the disk? - - To expand the default size of 16 GB, locate the `DISK_SIZE` setting in your compose file and modify it to your preferred capacity: - - ```yaml - environment: - DISK_SIZE: "128G" - ``` - - This can also be used to resize the existing disk to a larger capacity without any data loss. - * ### How do I change the storage location? To change the storage location, include the following bind mount in your compose file: @@ -82,6 +71,17 @@ docker run -it --rm --name dsm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMI ``` Replace the example path `/var/dsm` with the desired storage folder. + +* ### How do I change the size of the disk? + + To expand the default size of 16 GB, locate the `DISK_SIZE` setting in your compose file and modify it to your preferred capacity: + + ```yaml + environment: + DISK_SIZE: "128G" + ``` + + This can also be used to resize the existing disk to a larger capacity without any data loss. * ### How do I create a growable disk? @@ -119,7 +119,7 @@ docker run -it --rm --name dsm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMI - /dev/disk/by-uuid/45678-45678-45678-45678-45678:/dev/disk3 ``` - Make sure to bind the disk via its UUID (obtainable via `lsblk -o name,uuid`) instead of its name (`/dev/sdc`), to make sure it can never accidently pass the wrong disk when their name assignments get shuffled. + Make sure to bind the disk via its UUID (obtainable via `lsblk -o name,uuid`) instead of its name (`/dev/sdc`), to prevent ever binding the wrong disk when the drive letters happen to change. Please note that the device needs to be totally empty (without any partition table) otherwise DSM does not always format it into a volume. @@ -129,7 +129,7 @@ docker run -it --rm --name dsm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMI By default, a single CPU core and 1 GB of RAM are allocated to the container. - To increase this, add the following environment variables: + If there arises a need to increase this, add the following environment variables: ```yaml environment: diff --git a/src/config.sh b/src/config.sh index b31422d..d16f2d7 100644 --- a/src/config.sh +++ b/src/config.sh @@ -2,7 +2,7 @@ set -Eeuo pipefail DEF_OPTS="-nodefaults -boot strict=on" -RAM_OPTS=$(echo "-m $RAM_SIZE" | sed 's/MB/M/g;s/GB/G/g;s/TB/T/g') +RAM_OPTS=$(echo "-m ${RAM_SIZE^^}" | sed 's/MB/M/g;s/GB/G/g;s/TB/T/g') CPU_OPTS="-cpu $CPU_FLAGS -smp $CPU_CORES,sockets=1,dies=1,cores=$CPU_CORES,threads=1" MAC_OPTS="-machine type=q35,usb=off,vmport=off,dump-guest-core=off,hpet=off${KVM_OPTS}" DEV_OPTS="-device virtio-balloon-pci,id=balloon0,bus=pcie.0,addr=0x4" diff --git a/src/proc.sh b/src/proc.sh index 978199d..a8b0254 100644 --- a/src/proc.sh +++ b/src/proc.sh @@ -9,7 +9,7 @@ set -Eeuo pipefail : "${CPU_MODEL:=""}" : "${DEF_MODEL:="qemu64"}" -[ "$ARCH" != "amd64" ] && KVM="N" +[[ "${ARCH,,}" != "amd64" ]] && KVM="N" if [[ "$KVM" != [Nn]* ]]; then diff --git a/src/reset.sh b/src/reset.sh index 88dc596..faa7a9d 100644 --- a/src/reset.sh +++ b/src/reset.sh @@ -42,7 +42,6 @@ HOST=$(hostname -s) KERNEL=$(echo "$SYS" | cut -b 1) MINOR=$(echo "$SYS" | cut -d '.' -f2) ARCH=$(dpkg --print-architecture) -RAM="$(free -g | grep Mem: | awk '{print $7}')/$(free -g | grep Mem: | awk '{print $2}') GB" CPU=$(lscpu | grep -m 1 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1' | sed 's# @.*##g' | sed s/"(R)"//g | sed 's/[^[:alnum:] ]\+/ /g' | sed 's/ */ /g') # Check system @@ -67,15 +66,35 @@ if [[ "${FS,,}" == "ecryptfs" ]] || [[ "${FS,,}" == "tmpfs" ]]; then DISK_CACHE="writeback" fi +# Read memory +RAM_AVAIL=$(free -b | grep -m 1 Mem: | awk '{print $7}') +RAM_TOTAL=$(free -b | grep -m 1 Mem: | awk '{print $2}') +RAM_SIZE=$(echo "${RAM_SIZE^^}" | sed 's/MB/M/g;s/GB/G/g;s/TB/T/g') +RAM_WANTED=$(numfmt --from=iec "$RAM_SIZE") +AVAIL_GB=$(( (RAM_AVAIL + 1073741823)/1073741824 )) +TOTAL_GB=$(( (RAM_TOTAL + 1073741823)/1073741824 )) +WANTED_GB=$(( (RAM_WANTED + 1073741823)/1073741824 )) + # Print system info SYS="${SYS/-generic/}" FS="${FS/ext2\/ext3/ext4}" SPACE=$(df --output=avail -B 1 "$STORAGE" | tail -n 1) SPACE_GB=$(( (SPACE + 1073741823)/1073741824 )) -echo "❯ CPU: ${CPU} | RAM: ${RAM} | DISK: $SPACE_GB GB (${FS}) | HOST: ${SYS}..." +echo "❯ CPU: ${CPU} | RAM: $AVAIL_GB/$TOTAL_GB GB | DISK: $SPACE_GB GB (${FS}) | HOST: ${SYS}..." echo +# Check memory + +if (( RAM_WANTED > RAM_AVAIL )); then + error "Your configured RAM_SIZE of $WANTED_GB GB is higher than the $AVAIL_GB GB of memory available." + exit 15 +fi + +if (( (RAM_WANTED + 1950000000) > RAM_AVAIL )); then + warn "your configured RAM_SIZE of $WANTED_GB GB is much too close to the $AVAIL_GB GB of memory available." +fi + # Cleanup files rm -f /run/shm/qemu.* rm -f /run/shm/dsm.url