ubuntu系统扩大交换空间

平常使用的这台笔记本是16核的,屏幕是oled,我装了最新的ubuntu系统,感觉用的挺顺手,唯一的问题是这个笔记本的内存是焊在主板上的,而且只有16g,没法扩展,开两个vscode,过一会就会死机。

今天突然想到,系统有个交换空间,使用硬盘扩展内存用的,要是扩大这个交换空间,是不是就能暂时解决问题呢。使用free -h 看了下,目前的交换空间是4g,确实有点小了。

问了下ai,说完全可以,并且给出了修改步骤,有十几步,繁琐,问有工具能直接修改吗,ai给我直接生成一个修改脚本。试了下,将交换空间修改到24g,真的成功了,现在开了3个vscode,再开了十几个网页,虽然cpu狂飙,但至少不会死机了。

ai果然是生产力工具,这要是自己折腾,估计得找好久资料。没个半天都搞不定。他却不到一秒就完成了。可以预见,ai对生产力的帮助将是成千上万倍的提升。人类知识的进化果然是指数级别的。

将以下脚本拷贝到 resize_swap.sh文件中,chmod +x resize_swap.sh 修改为可执行文件,使用 ./resize_swap.sh 24G 就能将交换空间修改为24g。

#!/bin/bash
# A simple script to resize the swapfile on Ubuntu.
# Usage: sudo ./resize_swap.sh 16G

# --- Configuration ---
SWAP_FILE_PATH="/swap.img"
# --- End Configuration ---

# Ensure the script is run as root
if [ "$(id -u)" -ne 0 ]; then
echo "这个脚本必须以 root 权限运行 (sudo)!"
exit 1
fi

# Check if a size argument is provided
if [ -z "$1" ]; then
echo "用法: sudo $0 <新大小>"
echo "例如: sudo $0 16G"
exit 1
fi

NEW_SWAP_SIZE=$1

echo "--- 准备将交换空间大小调整为 $NEW_SWAP_SIZE ---"

# 1. 检查并关闭现有的交换文件
if swapon --show | grep -q "$SWAP_FILE_PATH"; then
echo "1. 正在关闭现有的交换文件: $SWAP_FILE_PATH ..."
swapoff "$SWAP_FILE_PATH"
else
echo "1. 未发现活动的交换文件 $SWAP_FILE_PATH,跳过关闭步骤。"
fi

# 2. 删除旧的交换文件
if [ -f "$SWAP_FILE_PATH" ]; then
echo "2. 正在删除旧的交换文件..."
rm "$SWAP_FILE_PATH"
fi


# 3. 创建新的交换文件
echo "3. 正在创建大小为 $NEW_SWAP_SIZE 的新交换文件..."
fallocate -l "$NEW_SWAP_SIZE" "$SWAP_FILE_PATH"
if [ $? -ne 0 ]; then
echo "创建文件失败!请检查磁盘空间是否足够。"
exit 1
fi

# 4. 设置正确的权限
echo "4. 正在设置文件权限 (600)..."
chmod 600 "$SWAP_FILE_PATH"

# 5. 格式化为 swap
echo "5. 正在将文件格式化为 swap..."
mkswap "$SWAP_FILE_PATH"

# 6. 启用新的交换文件
echo "6. 正在启用新的交换文件..."
swapon "$SWAP_FILE_PATH"

# 7. 更新 /etc/fstab 文件以实现永久生效
FSTAB_ENTRY="$SWAP_FILE_PATH none swap sw 0 0"
if grep -q "swapfile" /etc/fstab; then
echo "7. 正在更新 /etc/fstab 中的现有条目..."
# 使用 sed 命令替换所有包含 "swapfile" 的 swap 行
sed -i '/swapfile/d' /etc/fstab
fi
echo "8. 正在向 /etc/fstab 添加新条目..."
echo "$FSTAB_ENTRY" >> /etc/fstab


echo "--- 操作完成!---"
echo "新的交换空间信息:"
swapon --show
echo "内存信息:"
free -h