Created
July 1, 2015 02:23
-
-
Save koy1619/70e03a2a7c5a0e71a6f6 to your computer and use it in GitHub Desktop.
add_swap.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
######################################### | |
#Function: add a new swap partition | |
#Usage: bash add_swap.sh | |
#Author: Customer service department | |
#Company: Alibaba Cloud Computing | |
#Version: 2.1 | |
######################################### | |
check_os_release() | |
{ | |
while true | |
do | |
if cat /proc/version | grep redhat >/dev/null 2>&1 | |
then | |
os_release=redhat | |
echo "$os_release" | |
break | |
fi | |
if cat /proc/version | grep centos >/dev/null 2>&1 | |
then | |
os_release=centos | |
echo "$os_release" | |
break | |
fi | |
if cat /proc/version | grep ubuntu >/dev/null 2>&1 | |
then | |
os_release=ubuntu | |
echo "$os_release" | |
break | |
fi | |
if cat /proc/version | grep -i debian >/dev/null 2>&1 | |
then | |
os_release=debian | |
echo "$os_release" | |
break | |
fi | |
break | |
done | |
} | |
check_memory_and_swap() | |
{ | |
mem_count=$(free -m|grep Mem|awk '{print $2}') | |
swap_count=$(free -m|grep Swap|awk '{print $2}') | |
if [ "$mem_count" -ge 15000 ] && [ "$mem_count" -le 32768 ] | |
then | |
if [ "$swap_count" -ge 8000 ] | |
then | |
echo -e "\033[1;40;31mYour swap is already enough.Do not need to add swap.Script will exit.\n\033[0m" | |
rm -rf $LOCKfile | |
exit 1 | |
elif [ "$swap_count" -ne 0 ] | |
then | |
echo -e "\033[40;32mYour swap is not enough,need to add swap.\n\033[40;37m" | |
remove_old_swap | |
create_swap 8192 | |
else | |
echo -e "\033[40;32mYour swap is not enough,need to add swap.\n\033[40;37m" | |
create_swap 8192 | |
fi | |
elif [ "$mem_count" -ge 3900 ] && [ "$mem_count" -lt 15000 ] | |
then | |
if [ "$swap_count" -ge 3900 ] | |
then | |
echo -e "\033[1;40;31mYour swap is already enough.Do not need to add swap.Script will exit.\n\033[0m" | |
rm -rf $LOCKfile | |
exit 1 | |
elif [ "$swap_count" -ne 0 ] | |
then | |
echo -e "\033[40;32mYour swap is not enough,need to add swap.\n\033[40;37m" | |
remove_old_swap | |
create_swap 4096 | |
else | |
echo -e "\033[40;32mYour swap is not enough,need to add swap.\n\033[40;37m" | |
create_swap 4096 | |
fi | |
else | |
if [ "$swap_count" -ge 2000 ] | |
then | |
echo -e "\033[1;40;31mYour swap is already enough.Do not need to add swap.Script will exit.\n\033[0m" | |
rm -rf $LOCKfile | |
exit 1 | |
elif [ "$swap_count" -ne 0 ] | |
then | |
echo -e "\033[40;32mYour swap is not enough,need to add swap.\n\033[40;37m" | |
remove_old_swap | |
create_swap 2048 | |
else | |
echo -e "\033[40;32mYour swap is not enough,need to add swap.\n\033[40;37m" | |
create_swap 2048 | |
fi | |
fi | |
} | |
create_swap() | |
{ | |
root_disk_size=$(df -m|grep -w "/"|awk '{print $4}') | |
if [ "$1" -gt "$((root_disk_size-1024))" ] | |
then | |
echo -e "\033[1;40;31mThe root disk partition has no space for $1M swap file.Script will exit.\n\033[0m" | |
rm -rf $LOCKfile | |
exit 1 | |
fi | |
if [ ! -e $swapfile ] | |
then | |
dd if=/dev/zero of=$swapfile bs=1M count=$1 | |
/sbin/mkswap $swapfile | |
/sbin/swapon $swapfile | |
/sbin/swapon -s | |
echo -e "\033[40;32mStep 3.Add swap partition successful.\n\033[40;37m" | |
else | |
echo -e "\033[1;40;31mThe /var/swap_file already exists.Will exit.\n\033[0m" | |
rm -rf $LOCKfile | |
exit 1 | |
fi | |
} | |
remove_old_swap() | |
{ | |
old_swap_file=$(grep swap $fstab|grep -v "#"|awk '{print $1}') | |
swapoff $old_swap_file | |
cp -f $fstab ${fstab}_bak | |
sed -i '/swap/d' $fstab | |
} | |
config_rhel_fstab() | |
{ | |
if ! grep $swapfile $fstab >/dev/null 2>&1 | |
then | |
echo -e "\033[40;32mBegin to modify $fstab.\n\033[40;37m" | |
echo "$swapfile swap swap defaults 0 0" >>$fstab | |
else | |
echo -e "\033[1;40;31m/etc/fstab is already configured.\n\033[0m" | |
rm -rf $LOCKfile | |
exit 1 | |
fi | |
} | |
config_debian_fstab() | |
{ | |
if ! grep $swapfile $fstab >/dev/null 2>&1 | |
then | |
echo -e "\033[40;32mBegin to modify $fstab.\n\033[40;37m" | |
echo "$swapfile none swap sw 0 0" >>$fstab | |
else | |
echo -e "\033[1;40;31m/etc/fstab is already configured.\n\033[0m" | |
rm -rf $LOCKfile | |
exit 1 | |
fi | |
} | |
##########start###################### | |
#check lock file ,one time only let the script run one time | |
LOCKfile=/tmp/.$(basename $0) | |
if [ -f "$LOCKfile" ] | |
then | |
echo -e "\033[1;40;31mThe script is already exist,please next time to run this script.\n\033[0m" | |
exit | |
else | |
echo -e "\033[40;32mStep 1.No lock file,begin to create lock file and continue.\n\033[40;37m" | |
touch $LOCKfile | |
fi | |
#check user | |
if [ $(id -u) != "0" ] | |
then | |
echo -e "\033[1;40;31mError: You must be root to run this script, please use root to install this script.\n\033[0m" | |
rm -rf $LOCKfile | |
exit 1 | |
fi | |
os_release=$(check_os_release) | |
if [ "X$os_release" == "X" ] | |
then | |
echo -e "\033[1;40;31mThe OS does not identify,So this script is not executede.\n\033[0m" | |
rm -rf $LOCKfile | |
exit 0 | |
else | |
echo -e "\033[40;32mStep 2.Check this OS type.\n\033[40;37m" | |
echo -e "\033[40;32mThis OS is $os_release.\n\033[40;37m" | |
fi | |
swapfile=/var/swap_file | |
fstab=/etc/fstab | |
echo -e "\033[40;32mStep 3.Check the memory and swap.\n\033[40;37m" | |
check_memory_and_swap | |
echo -e "\033[40;32mStep 4.Begin to modify $fstab.\n\033[40;37m" | |
case "$os_release" in | |
redhat|centos) | |
config_rhel_fstab | |
;; | |
ubuntu|debian) | |
config_debian_fstab | |
;; | |
esac | |
free -m | |
echo -e "\033[40;32mAll the operations were completed.\n\033[40;37m" | |
rm -rf $LOCKfile |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
阿里云主机建立SWAP分区脚本
所有执行的脚本都需要root身份来执行,执行方法:以root身执行命令:bash xxx.sh
功能:自动检测系统swap分区大小,交换分区大小不合理则自动新增并挂载上
适用系统版本:兼容线上所有linux版本
执行方法:以root身执行命令:bash add_swap.sh
解决了什么问题:一键式检测系统swap分区大小,如果低于物理内存的2倍则自动创建一个物理内存2倍大小的swap分区
备注:swap不是越大越好,由于磁盘速度相对于内存较为低下,所以大swap反而会造成业务响应更慢,通常为2至2.5倍就好,如果有特殊需求可以更大。
内存为32G以上则不考虑
内存在16G至32G之间,交换分区配置为8G
内存在4G至16G之间,交换分区配置为4G
内存小于4G的则配置交换分区为2G