#!/bin/bash # Detect the main disk by finding the partition mounted on root ('/') main_disk=$(df / | tail -1 | awk '{print $1}') mount_point=$(df / | tail -1 | awk '{print $6}') # Get available space on the partition in GB available_space=$(df -BG $mount_point | tail -1 | awk '{print $4}' | sed 's/G//') # Calculate 5% of the available space, and ensure it's within the limits (max 30GB) swap_size=$((available_space * 5 / 100)) 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..." # 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." # Ask if the user wants to persist the swap after reboot read -p "Do you want to persist the swap file after reboot? (y/n): " persist_swap if [[ "$persist_swap" == "y" || "$persist_swap" == "Y" ]]; then echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab echo "Swap file added to /etc/fstab." else echo "Swap file will not persist after reboot." fi # Show swap summary sudo swapon --show