#!/bin/bash # Function to create swap file create_swapfile() { # Detect the partition mounted on root ('/') mount_point=$(df / | tail -1 | awk '{print $6}') # Get available space on the root partition in MB available_space=$(df -BM $mount_point | tail -1 | awk '{print $4}' | sed 's/M//') # Calculate 5% of the available space in MB swap_size=$((available_space * 5 / 100)) # 5% of available space in MB # Convert swap size from MB to GB swap_size=$((swap_size / 1024)) # Convert MB to GB # Set upper limit of 30GB for the swap file if [ $swap_size -gt 30 ]; then swap_size=30 fi # Abort if the calculated swap size is less than 1GB if [ $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