# -*- coding: UTF-8 -*- import subprocess def execute_cmd(cmd): p=subprocess.Popen(cmd,shell=True,stdin=subprocess.PIPE,stderr=subprocess.PIPE,stdout=subprocess.PIPE) stdout,stderr=p.communicate() if p.returncode != 0: return p.returncode ,stderr return p.returncode,stdout if __name__ == '__main__': #卸载apps code_kube,kubelet=execute_cmd("systemctl stop kubelet") if code_kube == 0: code_dockerrm,dockerm=execute_cmd(" for i in $(docker ps | awk '{print $1}' | tail -n +2) ; do docker stop $i ; done") if code_dockerrm ==0: execute_cmd("systemctl stop docker") execute_cmd("systemctl disable docker ") execute_cmd("systemctl disable kubelet") print("备份目录") code_apps,apps=execute_cmd("cp -a /apps /apps.bak") if code_apps ==0: execute_cmd('sed -i "s/^[^#].*apps/#&/g" /etc/fstab') #execute_cmd("reboot") else: print("备份有问题,apps") else: print("容器没有关闭完",dockerm) else: print(kubelet) #扩容apps目录 execute_cmd("lvextend -L 30720G /dev/vg1/lv_apps")
2.
""" 卸载apps,重新挂载新的/dev/sdb上 通过parted,kvm创建挂载盘 """ # -*- coding: UTF-8 -*- import subprocess #执行shell命令 def execute_cmd(cmd): p=subprocess.Popen(cmd,shell=True,stdin=subprocess.PIPE,stderr=subprocess.PIPE,stdout=subprocess.PIPE) stdout,stderr=p.communicate() if p.returncode != 0: return p.returncode ,stderr return p.returncode,stdout #stop apps ,umount apps def stop_apps(code,result): if code_kube == 0: code_dockerrm,dockerm=execute_cmd(" for i in $(docker ps | awk '{print $1}' | tail -n +2) ; do docker stop $i ; done") if code_dockerrm ==0: execute_cmd("systemctl stop docker") execute_cmd("systemctl disable docker ") execute_cmd("systemctl disable kubelet") execute_cmd('for i in $(df -h |grep "/apps/data" | awk "{print $6}"); do umount $i; done') kill_lsof_code,kill_lsof=execute_cmd("for i in `lsof | grep apps | awk '{print $2}'` ;do kill -9 $i; done") print(kill_lsof_code,kill_lsof) print("备份目录") code_apps,apps=execute_cmd("cp -a /apps /apps.bak") #前面执行过一次,实际测试还是有没有删除的进程,多删除次 execute_cmd("for i in `lsof | grep apps | awk '{print $2}'` ;do kill -9 $i; done") if code_apps ==0: execute_cmd('sed -i "s/^[^#].*apps/#&/g" /etc/fstab') ####execute_cmd("reboot") check_mount_code,check=execute_cmd("df -h |grep apps") if check == "": print("已经卸载") return 0 else: umount_code,umount=execute_cmd("umount /apps") if umount_code == 0 : print("卸载成功") return 0 else: print("卸载失败") return 1 else: print("备份有问题,apps") return 1 else: print("容器没有关闭完",dockerm) return 1 else: print(kubelet) return 1 #kvm parted def kvm(dev_var): print("parted") parted_code,parted=execute_cmd("parted " + dev_var + " 'mklabel gpt' yes") #if parted_code == 0: pri_code,pri=execute_cmd('echo "Ignore" | parted ' + dev_var + ' "mkpart primary xfs 0% 100%"') if pri_code == 0: print("vgcreate") vgcreate_code,vgcreate=execute_cmd("vgcreate vg1 " + dev_var + "1 -y") if vgcreate_code ==0: lvcreate_code,lvcreate=execute_cmd("lvcreate -L 30T -n lv_apps vg1 ") if lvcreate_code ==0: print("lvcreate") execute_cmd("mkfs.xfs /dev/vg1/lv_apps") else: print("lvcreate异常",lvcreate) exit() else: print("vgcreate异常",vgcreate) exit() else: print("parted异常",pri) exit() # else: # print("parted异常1",parted) # exit() #挂载 # execute_cmd("echo '/dev/mapper/vg1-lv_apps /apps xfs defaults 0 0'>> /etc/fstab") # execute_cmd("mount /dev/mapper/vg1-lv_apps /apps") # execute_cmd("chown apps:apps /apps") # execute_cmd("chmod 775 /apps") #mount apps def mount_apps(): dev_var = execute_cmd("blkid |grep vg1-lv_apps |awk '{print $1}' |sed 's/://g'") print(dev_var[1].split()[0]) mount = "echo " + dev_var[1].split()[0] + " /apps xfs defaults 0 0 >> /etc/fstab" print(mount) execute_cmd(mount) mount_code, mount = execute_cmd("mount -a") if mount_code ==0: print("挂载成功") return 0 else: print("挂载失败",mount) return 1 #恢复数据,启动服务,修改权限 def recover_data(): execute_cmd("cp -a /apps.bak/* /apps/") execute_cmd("chmod 775 /apps") execute_cmd("chown apps:apps /apps") execute_cmd("systemctl enable docker ") execute_cmd("systemctl enable kubelet ") execute_cmd("systemctl start docker") execute_cmd("systemctl start kubelet") status_docker_code,status_docker=execute_cmd("systemctl start docker") print(status_docker,status_docker_code) if __name__ == '__main__': dev="/dev/sdb" # kvm(dev) code_kube, kubelet = execute_cmd("systemctl stop kubelet") result=stop_apps(code_kube, kubelet) if result ==0: result_mount=mount_apps() if result_mount == 0: recover_data() else: print("请先卸载")