前提条件
1、服务器系统:CentOS6+/Debian7+/Ubuntu12+
2、虚拟化架构:KVM、VMware
3、检查Swap分区命令free -m
以root账户登陆VPS服务器
区分办法:登录后,可见终端显示从$号变成#号
非root账户:
[root@localhost ~]$
root账户:
[root@localhost ~]#
下载并运行程序
CentOS运行命令
yum -y install wget && wget -O set_swap.sh --no-check-certificate https://soft.mengclaw.com/Bash/set_swap.sh && bash set_swap.sh
Debian运行命令
yum -y install wget && wget -O set_swap.sh --no-check-certificate https://soft.mengclaw.com/Bash/set_swap.sh && bash set_swap.sh
说明:
1、部分服务器自带一些SWAP交换分区,自行添加后,旧的交换分区将会被删除。
2、OpenVZ虚拟化架构无法自主添加交换分区
过程概览
-------------------------
设置虚拟内存
版本:1.0
作者:WolfSkylake
-------------------------
1、添加虚拟内存
2、取消虚拟内存
-------------------------
请输入要执行的操作:1
开始检查系统
管理员权限检查通过
虚拟化检查通过
开始设置虚拟内存容量,建议为内存的2倍。但过大的交换分区会影响磁盘IO,请悉知。
请输入需要添加的虚拟内存容量,单位MB: 1024
1024+0 records in
1024+0 records out
1024000000 bytes (1.0 GB) copied, 3.64437 s, 281 MB/s
Setting up swapspace version 1, size = 999996 KiB
no label, UUID=6de54f86-e5b0-4adb-b517-8008669381ba
虚拟内存设置完成
程序源码
#!/bin/bash
############################################################
# 设置虚拟内存
#
# 发布日期:2020-03-05
# 程序版本:1.0
# 出处:2020萌爪实验室
############################################################
# 判断系统版本
check_system_os(){
if [[ -f /etc/redhat-release ]];then
release="CentOS"
# -q 执行本条语句的时候不输出,-i 不区分大小写
elif cat /etc/issue | grep -q -i "debian";then
release="Debian"
elif cat /etc/issue | grep -q -i "ubuntu";then
release="Ubuntu"
else
release="Unknown"
echo -e "\n 系统不受支持,安装失败 \n"
exit 1
fi
}
# 检查是否是root账户
check_root(){
if [[ $EUID != 0 ]];then
echo -e " 当前非ROOT账号,无法继续操作。\n 请更换ROOT账号登录服务器。 "
exit 1
else
echo -e "\n 管理员权限检查通过 "
fi
}
# 安装系统依赖
dependent_install(){
if [[ $release == "CentOS" ]];then
yum -y makecache
yum -y install virt-what
elif [[ $release == "Debian" ]] || [[ $release == "Ubuntu" ]];then
apt-get -y update
apt-get -y install virt-what
else
echo -e " 系统不受支持,退出…… \n"
exit 1
fi
}
# 检查虚拟化
virt_check(){
if [[ `virt-what` == "openvz" ]];then
echo -e " 当前虚拟化为OVZ,不支持本脚本 "
elif [[ `virt-what` == "kvm" ]] || [[ `virt-what` == "vmware" ]] ;then
echo -e "\n 虚拟化检查通过 \n"
else
echo -e "\n 不支持当前虚拟化,退出…… \n"
exit 1
fi
}
# 取消交换分区
unset_swap(){
if [[ -e /swap/swapfile ]] || [[ -e /swap ]] || [[ `free | grep -i swap | awk -F " " '{print $2}'` -ne 0 ]];then
swapoff -a
rm -rf /swap
sed -i '/swap/d' /etc/fstab
if [[ -e /swap/swapfile ]] || [[ -e /swap ]] || [[ `free | grep -i swap | awk -F " " '{print $2}'` -ne 0 ]];then
echo -e "\n 删除失败,写保护 \n"
else
echo -e "\n 删除完成 \n"
fi
else
echo -e "\n 删除失败,没有找到虚拟内存 \n"
fi
}
# 设置交换分区
set_swap(){
echo -e " 开始设置虚拟内存容量,建议为内存的2倍。但过大的交换分区会影响磁盘IO,请悉知。 "
read -p " 请输入需要添加的虚拟内存容量,单位MB: " swap_capacity
if [[ -e /swap/swapfile ]] || [[ -e /swap ]] || [[ `free | grep -i swap | awk -F " " '{print $2}'` -ne 0 ]];then
read -e -p " 交换分区文件已存在,继续创建会删除以前的交换分区,是否继续创建? [Y/n] :" yn
[[ -z "${yn}" ]] && yn="y"
if [[ $yn == [Yy] ]]; then
unset_swap
mkdir /swap
dd if=/dev/zero of=/swap/swapfile bs=1MB count=$swap_capacity
mkswap /swap/swapfile
chmod 600 /swap/swapfile
swapon /swap/swapfile
sed -i '/swap/d' /etc/fstab
echo "/swap/swapfile swap swap defaults 0 0" >>/etc/fstab
if [[ -e /swap/swapfile ]] || [[ -e /swap ]] || [[ `free | grep -i swap | awk -F " " '{print $2}'` -ne 0 ]];then
echo -e "\n 新的虚拟内存设置完成 \n"
else
echo -e "\n 设置失败,启动删除程序 \n"
unset_swap
fi
else
echo -e "\n 用户取消,程序退出 \n"
exit 1
fi
else
echo " " # 为了美观输出一个空行
mkdir /swap
dd if=/dev/zero of=/swap/swapfile bs=1MB count=$swap_capacity
mkswap /swap/swapfile
chmod 600 /swap/swapfile
swapon /swap/swapfile
sed -i '/swap/d' /etc/fstab
echo "/swap/swapfile swap swap defaults 0 0" >>/etc/fstab
if [[ -e /swap/swapfile ]] || [[ -e /swap ]] || [[ `free | grep -i swap | awk -F " " '{print $2}'` -ne 0 ]];then
echo -e "\n 虚拟内存设置完成 \n"
else
echo -e "\n 设置失败,启动删除程序 \n"
unset_swap
fi
fi
}
# 设置交换分区前的环境检查
before_set_swap(){
echo -e "\n 开始检查系统 "
check_system_os
check_root
dependent_install >/dev/null 2>&1 &
virt_check
set_swap
}
############################################################
echo -e " -------------------------"
echo -e " 设置虚拟内存"
echo -e " 版本:1.0"
echo -e " 作者:WolfSkylake "
echo -e " -------------------------"
echo -e " 1、添加虚拟内存"
echo -e " 2、取消虚拟内存"
echo -e " -------------------------"
read -p " 请输入要执行的操作:" num
case "$num" in
1)
before_set_swap
;;
2)
unset_swap
;;
esac
############################################################
其他人脚本
wget https://www.moerats.com/usr/shell/swap.sh && bash swap.sh