#!/bin/bash # RAM Optimizer Setup Script # Optimizes Linux memory with ZRAM compression # Usage: sudo bash setup-zram.sh [PERCENT] [ALGORITHM] set -e # Configuration (can be overridden via arguments) ZRAM_PERCENT=${1:-75} ZRAM_ALGO=${2:-lz4} echo "==========================================" echo " RAM Compression Optimizer v1.0" echo "==========================================" # Detect OS if [ -f /etc/debian_version ]; then OS="debian" PKG_MANAGER="apt" PKG_INSTALL="apt install -y zram-tools" elif [ -f /etc/fedora-release ]; then OS="fedora" PKG_MANAGER="dnf" PKG_INSTALL="dnf install -y zram" elif [ -f /etc/arch-release ]; then OS="arch" PKG_MANAGER="pacman" PKG_INSTALL="pacman -S --noconfirm zram-generator" else echo "Unsupported OS. Trying Debian/Ubuntu method..." OS="debian" PKG_MANAGER="apt" PKG_INSTALL="apt install -y zram-tools" fi # Detect total RAM TOTAL_RAM_MB=$(awk '/MemTotal/ {printf "%.0f", $2/1024}' /proc/meminfo) echo "[*] Detected RAM: ${TOTAL_RAM_MB} MB" echo "[*] Target OS: ${OS}" echo "[*] ZRAM config: ${ZRAM_PERCENT}% RAM, ${ZRAM_ALGO} algorithm" # Install zram-tools echo "[1/6] Installing ZRAM tools..." $PKG_MANAGER update -qq 2>/dev/null || true $PKG_INSTALL # Stop existing zram echo "[2/6] Stopping existing ZRAM services..." systemctl stop zramswap.service 2>/dev/null || true systemctl stop dev-zram0.swap 2>/dev/null || true # Configure zramswap echo "[3/6] Configuring ZRAM..." if [ "$OS" = "debian" ]; then cat > /etc/default/zramswap << EOF # RAM Optimizer Configuration # Generated on $(date) ALGO=${ZRAM_ALGO} PERCENT=${ZRAM_PERCENT} PRIORITY=100 EOF elif [ "$OS" = "arch" ]; then cat > /etc/systemd/zram-generator.conf << EOF [zram0] zram-size = min(ram / 2, 4096) * ${ZRAM_PERCENT} / 100 compression-algorithm = ${ZRAM_ALGO} swap-priority = 100 EOF fi # Enable KSM echo "[4/6] Enabling Kernel Samepage Merging (KSM)..." if [ -f /sys/kernel/mm/ksm/run ]; then echo 1 > /sys/kernel/mm/ksm/run 2>/dev/null || true echo 1000 > /sys/kernel/mm/ksm/sleep_millisecs 2>/dev/null || true echo " KSM enabled" else echo " KSM not available on this kernel" fi # Sysctl optimizations echo "[5/6] Applying sysctl optimizations..." cat > /etc/sysctl.d/99-lowram.conf << 'EOF' # RAM Optimizer Sysctl Settings vm.swappiness=100 vm.vfs_cache_pressure=200 vm.compaction_proactiveness=30 vm.overcommit_memory=1 vm.overcommit_ratio=50 EOF if [ -f /sys/kernel/mm/ksm/run ]; then echo "vm.ksm.run=1" >> /etc/sysctl.d/99-lowram.conf fi sysctl --system > /dev/null 2>&1 || true # Start zram echo "[6/6] Starting ZRAM service..." systemctl daemon-reload systemctl enable zramswap.service 2>/dev/null || systemctl enable systemd-zram-setup@zram0.service 2>/dev/null || true systemctl start zramswap.service 2>/dev/null || systemctl start systemd-zram-setup@zram0.service 2>/dev/null || true # Results echo "" echo "==========================================" echo " Setup Complete!" echo "==========================================" echo "" # Show ZRAM status if command -v zramctl &> /dev/null; then echo "ZRAM Status:" zramctl 2>/dev/null || echo " ZRAM device active" echo "" fi # Show swap echo "Swap Status:" if command -v swapon &> /dev/null; then swapon --show 2>/dev/null || cat /proc/swaps else cat /proc/swaps fi echo "" # Show memory echo "Memory Status:" free -h echo "" # Calculate effective memory EFFECTIVE_MB=$((TOTAL_RAM_MB + TOTAL_RAM_MB * ZRAM_PERCENT / 100 * 2 / 100)) echo "==========================================" echo "Physical RAM: ~${TOTAL_RAM_MB} MB" echo "ZRAM allocated: ~$((TOTAL_RAM_MB * ZRAM_PERCENT / 100)) MB" echo "Effective RAM: ~${EFFECTIVE_MB} MB (with 2:1 compression)" echo "==========================================" echo "" echo "Settings will persist across reboots."