#!/bin/bash # Function to create swap file create_swapfile() { # Detect the main disk by finding the partition mounted on root ('/') mount_point=$(df / | tail -1 | awk '{print $6}') # Get available space on the partition in MB available_space=$(df -BM $mount_point | tail -1 | awk '{print $4}' | sed 's/M//') # Calculate 5% of the available space, and ensure it's within the limits (max 30GB) swap_size=$((available_space * 5 / 100 / 1024)) # Convert MB to GB if [ $swap_size -gt 30 ]; then swap_size=30 elif [ $swap_size -lt 1 ]; then echo "Not enough disk space to create a swap file." exit 1 fi echo "Creating a ${swap_size}GB swap file at /swapfile..." # Remove existing swapfile if it exists if [ -f /swapfile ]; then sudo swapoff /swapfile sudo rm /swapfile echo "Existing swapfile removed." fi # Create the swap file sudo fallocate -l ${swap_size}G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo "Swap file of ${swap_size}GB created and activated." } # Function to persist the swap file across reboots persist_swapfile() { echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab echo "Swap file added to /etc/fstab." } # Check if --persist flag is passed persist=false if [ "$1" == "--persist" ]; then persist=true fi # Main script execution create_swapfile if [ "$persist" = true ]; then persist_swapfile else echo "Swap file will not persist after reboot." fi # Show current swap status sudo swapon --show