centos7创建swap linux创建swap 创建swap
centos7创建swap linux创建swap 创建swap
创建一个 8GB 的 swap 文件。以下是完整的步骤:
=================================================================================
注意事项:
-
确保有足够的磁盘空间:8GB 文件需要至少 8GB 的可用空间
-
文件位置:通常放在
/根目录下,也可以放在其他分区 -
性能考虑:
-
SSD 上使用 swap 文件性能较好
-
机械硬盘上性能会差一些
-
-
内存充足时:如果物理内存充足(15G),可以设置较低的 swappiness(如10),减少 swap 使用
-
安全性:确保
/swapfile权限为600(只有 root 可读写)
创建 8GB Swap 文件的完整步骤: 步骤1:检查当前磁盘空间 # 查看磁盘空间 df -h # 查看是否有现有的 swap swapon --show free -h 步骤2:创建 8GB 的 swap 文件 # 1. 创建 8GB 的空文件(使用 fallocate,速度更快) fallocate -l 8G /swapfile # 如果 fallocate 不支持,使用 dd: # dd if=/dev/zero of=/swapfile bs=1M count=8192 # 2. 验证文件大小 ls -lh /swapfile # 应该显示:-rw-r--r-- 1 root root 8.0G Dec 10 15:20 /swapfile 步骤3:设置正确的权限 # 只有 root 可读写,防止安全问题 chmod 600 /swapfile ls -lh /swapfile # 应该显示:-rw------- 1 root root 8.0G Dec 10 15:20 /swapfile 步骤4:设置为 swap 格式 # 格式化文件为 swap mkswap /swapfile # 输出示例: # Setting up swapspace version 1, size = 8388604 KiB # no label, UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 步骤5:启用 swap 文件 # 临时启用(重启后会失效) swapon /swapfile # 验证是否启用 swapon --show free -h # 现在应该能看到 8G 的 swap 步骤6:永久配置(添加到 fstab) # 1. 备份 fstab cp /etc/fstab /etc/fstab.backup.$(date +%Y%m%d%H%M%S) # 2. 添加 swap 配置到 /etc/fstab echo '/swapfile none swap sw 0 0' >> /etc/fstab # 3. 验证 fstab cat /etc/fstab # 应该看到类似: # UUID=19da9702-e4b3-4982-859f-691559f17007 / ext4 defaults 1 1 # /swapfile none swap sw 0 0 步骤7:优化 swap 设置(可选) # 1. 调整 swappiness(控制使用 swap 的倾向,默认60) # 值越低越少使用 swap,越高越多使用 swap echo 'vm.swappiness=10' >> /etc/sysctl.conf # 2. 调整 cache pressure(控制内存回收倾向) echo 'vm.vfs_cache_pressure=50' >> /etc/sysctl.conf # 3. 立即生效 sysctl -p # 4. 验证设置 cat /proc/sys/vm/swappiness cat /proc/sys/vm/vfs_cache_pressure 一键执行脚本: 创建一个脚本 create_swap.sh: #!/bin/bash echo "=== 开始创建 8GB Swap 文件 ===" # 1. 检查当前状态 echo "1. 检查当前 swap 状态:" free -h echo "" # 2. 检查磁盘空间 echo "2. 检查磁盘空间:" df -h / echo "" # 3. 创建 swap 文件 echo "3. 创建 8GB swap 文件..." if command -v fallocate &> /dev/null; then fallocate -l 8G /swapfile else dd if=/dev/zero of=/swapfile bs=1M count=8192 fi # 4. 设置权限 echo "4. 设置文件权限..." chmod 600 /swapfile # 5. 格式化为 swap echo "5. 格式化为 swap..." mkswap /swapfile # 6. 启用 swap echo "6. 启用 swap..." swapon /swapfile # 7. 添加到 fstab echo "7. 添加到 /etc/fstab..." cp /etc/fstab /etc/fstab.backup.$(date +%Y%m%d%H%M%S) echo '/swapfile none swap sw 0 0' >> /etc/fstab # 8. 优化配置 echo "8. 优化 swap 配置..." grep -q "vm.swappiness" /etc/sysctl.conf || echo 'vm.swappiness=10' >> /etc/sysctl.conf grep -q "vm.vfs_cache_pressure" /etc/sysctl.conf || echo 'vm.vfs_cache_pressure=50' >> /etc/sysctl.conf sysctl -p # 9. 验证结果 echo "" echo "=== 创建完成 ===" echo "最终状态:" swapon --show free -h echo "" echo "文件信息:" ls -lh /swapfile echo "" echo "fstab 配置:" tail -1 /etc/fstab
验证是否成功: 执行完成后,检查: bash # 查看 swap 状态 free -h # 应该显示:Swap: 8.0G # 查看详细的 swap 信息 swapon --show # 应该显示:/swapfile file 8G 0B -2 # 检查是否开机自动加载 cat /etc/fstab | grep swap # 应该显示:/swapfile none swap sw 0 0 # 测试重启后是否自动生效 # 可以重启系统后再次检查 🎯 推荐配置: 对于 15GB 内存的服务器: swap 大小:8GB(内存的一半左右) swappiness:10(内存充足,少用 swap) vfs_cache_pressure:50(适中) 这样配置后,你的系统就有了 8GB 的 swap 空间,可以在内存不足时提供缓冲,提高系统稳定性。
1. 全面的Swap检测 ✅
-
检测已启用的swap分区
-
检测已存在的/swapfile文件
-
检测fstab中的swap配置
2. 详细的删除指引 ✅
-
完整的命令序列
-
带有序号的操作步骤
-
备份fstab的建议
-
验证删除结果的方法
3. 友好的界面 ✅
-
彩色输出(红/绿/黄/蓝)
-
清晰的提示框
-
直观的emoji符号
4. 更智能的配置 ✅
-
动态调整swappiness值
-
自动更新已存在的配置
-
完整的验证输出
现在脚本更加安全和友好,能够有效防止误操作!
[root@ecs-2ef6-1f56 swap-create]# ./create_swap-v2.sh 12G === 开始创建 12.00GB (12288MB) Swap 文件 === ======================================== 检查系统现有Swap状态... ======================================== ✓ 系统当前没有启用任何swap,可以继续执行 1. 检查系统信息: 物理内存: 15.51GB (15884MB) 2. 校验大小参数... 3. 检查磁盘空间: Filesystem Size Used Avail Use% Mounted on /dev/vda1 493G 5.7G 467G 2% / ✓ 根分区可用空间充足(477402 MB) 4. 创建 12.00GB swap 文件... 5. 设置文件权限... 6. 格式化为 swap... Setting up swapspace version 1, size = 12582908 KiB no label, UUID=cb2eed9b-083f-4199-9597-ae377c01fdb7 7. 启用 swap... 8. 添加到 /etc/fstab... 9. 优化 swap 配置... vm.swappiness = 15 net.core.somaxconn = 1024 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_max_syn_backlog = 1024 vm.vfs_cache_pressure = 50 === 创建完成 === 最终状态: NAME TYPE SIZE USED PRIO /swapfile file 12G 0B -2 total used free shared buff/cache available Mem: 15G 2.9G 11G 13M 956M 12G Swap: 11G 0B 11G 文件信息: -rw------- 1 root root 12G Feb 12 19:38 /swapfile fstab 配置: # UUID=fd97d138-685a-47a6-ab90-b4be5be5b96e / ext4 defaults 1 1 /swapfile none swap sw 0 0 swap优化参数: vm.swappiness = 15 vm.vfs_cache_pressure = 50 ✓ Swap创建成功! 提示:可以使用 'swapon --show' 和 'free -h' 随时查看swap状态 [root@ecs-2ef6-1f56 swap-create]#
#!/bin/bash set -e # 遇到错误立即退出 # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 显示使用帮助 show_help() { echo "用法: $0 [选项] <swap大小>" echo "选项:" echo " -f, --force 强制模式:允许swap大于物理内存" echo " -h, --help 显示帮助信息" echo "" echo "参数说明:" echo " <swap大小> 支持单位: G, M, K (例如: 8G, 4096M, 4G)" echo "" echo "限制条件:" echo " 1. 大小必须 ≥ 2G (或2048M)" echo " 2. 大小必须是2的倍数 (2, 4, 8, 16, 32, 64...)" echo " 3. 默认不能超过物理内存大小" echo " 4. 使用 -f 参数可突破物理内存限制" echo "" echo "示例:" echo " $0 8G # 创建8GB swap" echo " $0 4G # 创建4GB swap" echo " $0 -f 16G # 强制创建16GB swap (即使物理内存小于16G)" exit 0 } # 检查系统已存在的swap check_existing_swap() { local has_swap=0 local swap_list="" echo -e "${BLUE}========================================${NC}" echo -e "${YELLOW}检查系统现有Swap状态...${NC}" echo -e "${BLUE}========================================${NC}" # 检查是否启用了任何swap if swapon --show 2>/dev/null | grep -q .; then has_swap=1 echo -e "${RED}检测到系统中已存在启用的swap分区:${NC}" echo "" swapon --show echo "" fi # 检查是否存在swap文件 if [ -f "/swapfile" ]; then has_swap=1 echo -e "${RED}检测到/swapfile文件已存在:${NC}" ls -lh /swapfile echo "" fi # 检查fstab中是否有swap配置 if grep -q "swap" /etc/fstab 2>/dev/null; then local swap_fstab=$(grep "swap" /etc/fstab | grep -v "^#") if [ -n "$swap_fstab" ]; then has_swap=1 echo -e "${RED}检测到/etc/fstab中存在swap配置:${NC}" echo "$swap_fstab" echo "" fi fi # 如果有任何swap存在,给出详细的删除指引 if [ $has_swap -eq 1 ]; then echo -e "${RED}╔════════════════════════════════════════════════════════════╗${NC}" echo -e "${RED}║ 错误:系统已存在Swap ║${NC}" echo -e "${RED}║ 请先删除现有Swap配置后再执行本脚本! ║${NC}" echo -e "${RED}╚════════════════════════════════════════════════════════════╝${NC}" echo "" # 获取当前swap信息 local current_swap_size="" if swapon --show 2>/dev/null | grep -q "/swapfile"; then current_swap_size=$(swapon --show | awk '/\/swapfile/ {print $3}') elif [ -f "/swapfile" ]; then current_swap_size=$(ls -lh /swapfile | awk '{print $5}') fi echo -e "${YELLOW}【删除现有Swap的完整操作指南】${NC}" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" if [ -n "$current_swap_size" ]; then echo -e "当前Swap大小: ${RED}$current_swap_size${NC}" echo "" fi echo -e "${GREEN}请按顺序执行以下命令:${NC}" echo "" # 1. 关闭swap echo "1️⃣ 关闭所有swap分区:" echo " sudo swapoff -a" echo "" # 2. 从fstab中删除所有swap条目 echo "2️⃣ 从/etc/fstab中删除所有swap相关配置:" echo " # 备份fstab" echo " sudo cp /etc/fstab /etc/fstab.backup.\$(date +%Y%m%d%H%M%S)" echo " # 删除swapfile条目" echo " sudo sed -i '/\\/swapfile/d' /etc/fstab" echo " # 删除其他swap分区条目" echo " sudo sed -i '/swap/d' /etc/fstab" echo "" # 3. 删除swap文件 if [ -f "/swapfile" ]; then echo "3️⃣ 删除swap文件:" echo " sudo rm -f /swapfile" echo "" fi # 4. 验证删除结果 echo "4️⃣ 验证删除结果:" echo " free -h" echo " swapon --show" echo " grep swap /etc/fstab" echo "" # 5. 如果需要删除其他位置的swap文件 echo "5️⃣ (可选)如果还有其他位置的swap文件,请手动删除:" echo " # 查找所有swap文件" echo " sudo find / -name \"*swap*\" -type f 2>/dev/null | grep -v \"^/proc\\|^/sys\\|^/dev\"" echo "" echo -e "${YELLOW}⚠️ 注意:删除swap前请确保有足够的内存可用${NC}" echo -e "${YELLOW} 执行 swapoff 可能需要一些时间来将swap中的数据移回内存${NC}" echo "" exit 1 else echo -e "${GREEN}✓ 系统当前没有启用任何swap,可以继续执行${NC}" echo "" fi } # 初始化参数 FORCE_MODE=0 SWAP_SIZE="" # 解析参数 while [[ $# -gt 0 ]]; do case $1 in -f|--force) FORCE_MODE=1 shift ;; -h|--help) show_help ;; *) SWAP_SIZE=$1 shift ;; esac done # 检查是否提供了大小参数 if [ -z "$SWAP_SIZE" ]; then echo "错误: 请指定swap大小" show_help fi # 转换大小为MB SWAP_SIZE_MB=$(echo "$SWAP_SIZE" | sed -E 's/([0-9.]+)([GgMmKk])?/\1/') UNIT=$(echo "$SWAP_SIZE" | sed -E 's/[0-9.]+([GgMmKk])?/\1/' | tr '[:lower:]' '[:upper:]') case $UNIT in G|GB|GIB|"") SWAP_SIZE_MB=$(echo "$SWAP_SIZE_MB * 1024" | bc) ;; M|MB|MIB) # 已经是MB,不需要转换 ;; K|KB|KIB) SWAP_SIZE_MB=$(echo "$SWAP_SIZE_MB / 1024" | bc) ;; *) echo "错误: 无法识别的单位 '$UNIT',支持 G, M, K" exit 1 esac # 转为整数 SWAP_SIZE_MB=${SWAP_SIZE_MB%.*} SWAP_SIZE_GB=$(echo "scale=2; $SWAP_SIZE_MB / 1024" | bc) echo "=== 开始创建 ${SWAP_SIZE_GB}GB (${SWAP_SIZE_MB}MB) Swap 文件 ===" echo "" # 0. 首先检查系统是否已存在swap check_existing_swap # 1. 检查物理内存 echo "1. 检查系统信息:" PHYSICAL_MEM_MB=$(free -m | awk '/^Mem:/ {print $2}') PHYSICAL_MEM_GB=$(echo "scale=2; $PHYSICAL_MEM_MB / 1024" | bc) echo " 物理内存: ${PHYSICAL_MEM_GB}GB (${PHYSICAL_MEM_MB}MB)" # 2. 校验大小限制 echo "2. 校验大小参数..." # 检查是否小于2GB if [ $(echo "$SWAP_SIZE_MB < 2048" | bc) -eq 1 ]; then echo "错误: Swap大小不能小于2GB (2048MB)" exit 1 fi # 检查是否是2的倍数 if [ $(echo "$SWAP_SIZE_GB % 2" | bc) -ne 0 ] && [ $(echo "$SWAP_SIZE_GB > 0" | bc) -eq 1 ]; then echo "错误: Swap大小必须是2的倍数 (2, 4, 8, 16, 32, 64...)" exit 1 fi # 检查是否超过物理内存(非强制模式) if [ $FORCE_MODE -eq 0 ]; then if [ $(echo "$SWAP_SIZE_MB > $PHYSICAL_MEM_MB" | bc) -eq 1 ]; then echo "错误: Swap大小 (${SWAP_SIZE_GB}GB) 不能大于物理内存 (${PHYSICAL_MEM_GB}GB)" echo "如需强制创建,请使用 -f 参数" exit 1 fi else echo " 强制模式: 允许swap大于物理内存" fi # 3. 检查磁盘空间 echo "3. 检查磁盘空间:" df -h / ROOT_AVAIL=$(df -BM / | awk 'NR==2 {gsub(/M/,""); print $4}') REQUIRED_SPACE=$((SWAP_SIZE_MB + 4096)) # 额外预留4GB空间 if [ "$ROOT_AVAIL" -lt "$REQUIRED_SPACE" ]; then echo "错误:根分区可用空间不足,无法创建Swap文件!" echo "可用空间: $ROOT_AVAIL MB" echo "需要空间: $REQUIRED_SPACE MB (swap ${SWAP_SIZE_MB}MB + 预留4096MB)" exit 1 fi echo "✓ 根分区可用空间充足($ROOT_AVAIL MB)" echo "" # 4. 创建 swap 文件 echo "4. 创建 ${SWAP_SIZE_GB}GB swap 文件..." if command -v fallocate &> /dev/null; then fallocate -l ${SWAP_SIZE_MB}M /swapfile else dd if=/dev/zero of=/swapfile bs=1M count=$SWAP_SIZE_MB status=progress fi # 5. 设置权限 echo "5. 设置文件权限..." chmod 600 /swapfile # 6. 格式化为 swap echo "6. 格式化为 swap..." mkswap /swapfile # 7. 启用 swap echo "7. 启用 swap..." swapon /swapfile # 8. 添加到 fstab echo "8. 添加到 /etc/fstab..." cp /etc/fstab /etc/fstab.backup.$(date +%Y%m%d%H%M%S) if ! grep -q "/swapfile none swap sw 0 0" /etc/fstab; then echo '/swapfile none swap sw 0 0' >> /etc/fstab else echo "✓ /swapfile 已存在于fstab中,无需重复添加" fi # 9. 优化配置(根据swap大小动态调整) echo "9. 优化 swap 配置..." # swappiness: 越小越倾向使用物理内存 if [ $(echo "$SWAP_SIZE_GB <= 4" | bc) -eq 1 ]; then SWAPPINESS=30 elif [ $(echo "$SWAP_SIZE_GB <= 8" | bc) -eq 1 ]; then SWAPPINESS=20 elif [ $(echo "$SWAP_SIZE_GB <= 16" | bc) -eq 1 ]; then SWAPPINESS=15 else SWAPPINESS=10 fi # 更新或添加swappiness配置 if grep -q "^vm.swappiness" /etc/sysctl.conf; then sed -i "s/^vm.swappiness=.*/vm.swappiness=$SWAPPINESS/" /etc/sysctl.conf else echo "vm.swappiness=$SWAPPINESS" >> /etc/sysctl.conf fi # 更新或添加vfs_cache_pressure配置 if grep -q "^vm.vfs_cache_pressure" /etc/sysctl.conf; then sed -i "s/^vm.vfs_cache_pressure=.*/vm.vfs_cache_pressure=50/" /etc/sysctl.conf else echo "vm.vfs_cache_pressure=50" >> /etc/sysctl.conf fi sysctl -p # 10. 验证结果 echo "" echo "=== 创建完成 ===" echo "最终状态:" swapon --show free -h echo "" echo "文件信息:" ls -lh /swapfile echo "" echo "fstab 配置:" tail -3 /etc/fstab | grep -B2 swap echo "" echo "swap优化参数:" sysctl vm.swappiness vm.vfs_cache_pressure echo "" echo -e "${GREEN}✓ Swap创建成功!${NC}" echo -e "${YELLOW}提示:可以使用 'swapon --show' 和 'free -h' 随时查看swap状态${NC}"
浙公网安备 33010602011771号