OpenVoiceOS/buildroot-external/rootfs-overlay/usr/libexec/ovos-zram

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