58 lines
1.3 KiB
Bash
Executable File
58 lines
1.3 KiB
Bash
Executable File
#!/bin/sh
|
|
# Credits go to: https://github.com/home-assistant/operating-system/
|
|
set -e # Exit on any command failure
|
|
|
|
# Options
|
|
TYPE=""
|
|
SIZE=0
|
|
MOUNT=""
|
|
|
|
# Parse arguments
|
|
while [ "$#" -gt 0 ]; do
|
|
case "$1" in
|
|
-t|--type) TYPE="$2"; shift 2 ;;
|
|
-s|--size) SIZE="$2"; shift 2 ;;
|
|
-m|--mount) MOUNT="$2"; shift 2 ;;
|
|
*) echo "Error: Invalid argument '$1'"; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
# Validate Type
|
|
if [ "$TYPE" != "swap" ] && [ "$TYPE" != "fs" ]; then
|
|
echo "Error: Type must be 'swap' or 'fs'"
|
|
exit 1
|
|
fi
|
|
|
|
# Determine device based on type and mount
|
|
DEVICE="/dev/zram"
|
|
if [ "$TYPE" = "swap" ]; then
|
|
DEVICE+="0"
|
|
elif [ "$MOUNT" = "var" ]; then
|
|
DEVICE+="1"
|
|
else
|
|
echo "Error: No device for lookup!"
|
|
exit 1
|
|
fi
|
|
|
|
# Calculate 20% of memory for ZRAM swap partition if not specified
|
|
if [ "$TYPE" = "swap" ] && [ "$SIZE" -eq 0 ]; then
|
|
SIZE=$(awk '/MemTotal/{ print int($2 * 0.20) }' /proc/meminfo)K
|
|
fi
|
|
|
|
# Initialize ZRAM device
|
|
zramctl "$DEVICE" -s "$SIZE" -a lz4
|
|
|
|
# Setup based on type
|
|
if [ "$TYPE" = "swap" ]; then
|
|
mkswap -L "ovos-zramswap" "$DEVICE"
|
|
elif [ "$TYPE" = "fs" ]; then
|
|
mkfs.ext4 -L "ovos-$MOUNT" -O ^has_journal "$DEVICE"
|
|
fi
|
|
|
|
# Handle var mount
|
|
if [ "$MOUNT" = "var" ]; then
|
|
VAR_DIR="/mnt/data/var"
|
|
[ ! -d "$VAR_DIR" ] && mkdir -p "$VAR_DIR" && cp -af /var/* "$VAR_DIR"
|
|
cp -af "$VAR_DIR"/* "$DEVICE"
|
|
fi
|