1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
| #!/bin/bash #一键分区 #一键扩容 #用法:bash homeV2.sh
#v1.1.20180914 #新增避免重复同时运行 #新增日志记录
rsname=homeV2 #shell名称 LOCKfile=/root/.$(basename $0).lock LOGfile=/root/.$(basename $0).log
Echo() { case $1 in success) flag="\033[1;32m" ;; failure) flag="\033[1;31m" ;; warning) flag="\033[1;33m" ;; msg) flag="\033[1;34m" ;; *) flag="\033[1;34m" ;; esac if [[ $LANG =~ [Uu][Tt][Ff] ]] then echo -e "${flag}${2}\033[0m" else echo -e "${flag}${2}\033[0m" iconv -f utf-8 -t gbk fi #写日志 [ "${3}A" == "LogA" ] && Shell_log $2 }
Shell_log(){ LOG_INFO=$1 Echo "msg" "$(date "+%Y-%m-%d") $(date "+%H:%M:%S"):$rsname:$LOG_INFO" >> $LOGfile }
Shell_lock(){ touch $LOCKfile } Shell_unlock(){ rm -f $LOCKfile } Exit(){ Shell_unlock exit }
CheckWDCP() { service httpd $1 service nginxd $1 service mysqld $1 service pureftpd $1 [ -e /etc/init.d/wdcp ] && service wdcp $1 [ -e /etc/init.d/wdapache ] && service wdapache $1 [ -e /etc/init.d/redis_6379 ] && service redis_6379 $1 [ -e /etc/init.d/memcached ] && service memcached $1 }
YunPanMBR() { Echo "msg" "有挂载云盘$1且没有分区,是否需要一键分区。" "Log" fstab_file="/etc/fstab" read -p "[y/n]: " autoyunpan while [[ ! $autoyunpan =~ ^[y,n]$ ]] do Echo "warning" "输入错误,只能输入y或n" "Log" read -p "[y/n]: " autoyunpan done if [ "$autoyunpan" == 'y' ];then yunpandev=$1 fdisk $yunpandev << EOF n p 1 2048
w EOF sleep 5 mkfs.ext4 ${yunpandev}1 Echo "msg" "请输入挂载点,比如:/yunpan" "Log" read -p ": " mountdir [ ! -d "$mountdir" ] && mkdir -p $mountdir echo "${yunpandev}1$mountdirext4 defaults0 0" >>$fstab_file mount -a df -vh Echo "success" "$yunpandev一键分区成功,挂载点是$mountdir" "Log" fi }
Auto() { tempdev=`ls /dev/vd[b-z]` Echo "msg" "请输入设备名,比如以下设备名,扩容数据盘[home分区]/dev/vdb请直接回车" "Log" Echo "msg" "$tempdev" "Log" read -p ":" devpart [ -z "$devpart" ] && devpart="/dev/vdb" while [[ ! -e "$devpart" ]] do Echo "warning" "输入设备名错误,请重新输入" "Log" read -p ":" devpart done data_part=`df -vh grep ${devpart}1awk '{print $6}'` Swap=`free -m awk '/Swap:/{print $2}'` Swapdir=$(cat /etc/fstab grep swapawk '{print $1}') [ "$Swap" -ne '0' ] && swapoff $Swapdir [ -d /www/wdlinux/wdcp ] && Echo "msg" "预装WDCP面板系统,正在停止WDCP相关服务。" && CheckWDCP stop which fuser >/dev/null 2>&1 [ $? -ne 0 ] && yum -y install psmisc fuser fuser -m $data_part -k umount $data_part [ $? -ne 0 ] && Echo "warning" "取消$data_part挂载失败,程序自动退出,请手动操作扩展" "Log" && [ -d /www/wdlinux/wdcp ] && CheckWDCP start && Exit Startflag=`parted $devpart printsed -n '/primary/p'awk '{print $2}'` parted $devpart printgrep primary > /parted.txt [ ! -e /parted.txt ] && Echo "warning" "备份分区表文件不成功,程序自动退出,请手动操作扩展" "Log" parted $devpart rm 1 yesparted $devpart mkpart primary $Startflag 100% [ $? -ne 0 ] && Echo "warning" "分区扩容失败,请手动操作扩展" "Log" && Exit Echo "msg" "如果硬盘较大,时间可能会很长,请耐心等待!" "Log" resize2fs -f ${devpart}1 mount -a [ "$Swap" -ne '0' ] && swapon $Swapdir [ -d /www/wdlinux/wdcp ] && Echo "msg" "预装WDCP面板系统,正在启动WDCP相关服务" "Log" && CheckWDCP start df -vh Echo "success" "$devpart扩容成功" "Log" Exit }
Main() { if [ -e "/dev/vdc" ] ;then for devname in `ls /dev/vd[c-z]` do if [ -e "$devname" ] && [ ! -e "${devname}1" ] ;then YunPanMBR $devname fi done fi Echo "msg" "是否需要扩容磁盘" "Log" read -p "[y/n]: " autodisk while [[ ! $autodisk =~ ^[y,n]$ ]] do Echo "warning" "输入错误,只能输入y或n" "Log" read -p "[y/n]: " autodisk done if [ "$autodisk" == 'y' ];then Auto fi } if [ -f "$LOCKfile" ];then Echo "warning" "核实脚本正在运行中,请勿重复运行,若是之前强行中断引起的,请手工清理$LOCKfile" "Log" && exit else Echo "msg" "首次运行脚本,将自动创建锁文件然后继续,避免在执行中重复运行脚本。" "Log" Shell_lock fi Main Exit
|