zoukankan      html  css  js  c++  java
  • Centos7系统备份和还原脚本

    执行交互脚本

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    

    备份脚本(原创,转载不要删名字)

    #!/bin/bash
    # -----------------------------------------------------------------
    # Date: 2020-04-23
    # Author: jiftle
    # Description: 系统备份脚本
    # bash -c "$(curl -fsSL http://192.168.112.25:36081/sh/factorymode/backup.sh)"
    # -----------------------------------------------------------------
    # 有报错脚本退出
    set -o nounset
    set -o errexit
    
    # ----------------- 变量 ---------------------
    shname="系统备份脚本"
    # kmstats="22"
    # kmstatsfile="/etc/kms/.stat"
    backdir="/backup"
    backfile="${backdir}/backup.tgz"
    
    # ---------------- 逻辑控制 -------------------
     echo -e "--> 33[1;34;31m[${shname}] 33[0m开始执行..."
     
    # # 读取文件
    # if [ -f ${kmstatsfile} ];then
    #   # 读取状态
    #   lastkmstats=$(cat ${kmstatsfile})  
    #   if [[ ${lastkmstats} -ge ${kmstats} ]];then
    #     echo "  |--> (X) 设备状态: [${lastkmstats}] , 脚本已经执行,请勿重复执行!"
    #     exit 1
    #   fi
    # else
    #   echo "  |--> (X) 设备状态文件[${kmstatsfile}] file not found !"
    #   exit 1
    # fi
    
    # 询问确认
    read -r -p "您确认需要**备份系统**吗? [Y/n] " input
    
    case $input in
        [yY][eE][sS]|[yY])
             echo "Yes"
             ;;
    
        [nN][oO]|[nN])
             exit 1
             ;;
    
        *)
             echo "无效的输入"
             exit 1
             ;;
    esac
    
    
    # ----------------- 脚本 ---------------------
    if [ ! -d ${backdir} ];then
      echo "  |--> 创建备份目录${backdir}"
      mkdir -p ${backdir}
    fi
    
    echo "  |--> 执行系统备份"
    tar cvpzf 
      ${backfile} 
      / 
      --exclude=/proc 
      --exclude=/lost+found 
      --exclude=${backdir} 
      --exclude=/mnt 
      --exclude=/sys 
    
    
    # ------------------ 善后 --------------------
    # echo "  |--> 写入设备状态标记"
    # echo ${kmstats} > ${kmstatsfile}
    
    # -OVER- 输出
    echo -e "--> 33[1;34;31m[${shname}]33[0m 执行完成 33[1;34m^-^33[0m"
    

    还原脚本(原创,转载不要删名字 )

    #!/bin/bash
    # -----------------------------------------------------------------
    # Date: 2020-04-23
    # Author: jiftle
    # Description: 系统还原脚本
    # bash -c "$(curl -fsSL http://192.168.112.25:36081/sh/factorymode/restore.sh)"
    # -----------------------------------------------------------------
    # 有报错脚本退出
    # set -o nounset
    # set -o errexit
    
    # ----------------- 变量 ---------------------
    shname="系统备份脚本"
    # kmstats="22"
    # kmstatsfile="/etc/kms/.stat"
    backdir="/backup"
    backfile="${backdir}/backup.tgz"
    
    # ---------------- 逻辑控制 -------------------
     echo -e "--> 33[1;34;31m[${shname}] 33[0m开始执行..."
     
    # # 读取文件
    # if [ -f ${kmstatsfile} ];then
    #   # 读取状态
    #   lastkmstats=$(cat ${kmstatsfile})  
    #   if [[ ${lastkmstats} -ge ${kmstats} ]];then
    #     echo "  |--> (X) 设备状态: [${lastkmstats}] , 脚本已经执行,请勿重复执行!"
    #     exit 1
    #   fi
    # else
    #   echo "  |--> (X) 设备状态文件[${kmstatsfile}] file not found !"
    #   exit 1
    # fi
    
    
    # ----------------- 脚本 ---------------------
    echo "  |--> 检测备份目录是否存在,${backdir}"
    if [ ! -d ${backdir} ];then
      echo "  |--> (X) 目录不存在,${backdir},脚本终止!"
      exit 1
    fi
    
    # 询问确认
    echo -e "--> 33[1;34;31m备份还原,慎重操作 33[0m"
    read -r -p "您确认需要使用备份还原系统吗? 如果确认当前所有数据都会被**清空**!!! [Y/n] " input
    
    case $input in
        [yY][eE][sS]|[yY])
             echo "Yes"
             ;;
    
        [nN][oO]|[nN])
             exit 1
             ;;
    
        *)
             echo "无效的输入,终止执行"
             exit 1
             ;;
    esac
    
    echo "  |--> 执行系统还原操作... start ..."
    dir="/opt"
    echo "  |--> 擦除数据${dir}"
    rm -rf ${dir}
    sleep 1
    
    dir="/home"
    echo "  |--> 擦除数据${dir}"
    rm -rf ${dir}
    sleep 1
    
    dir="/root"
    echo "  |--> 擦除数据${dir}"
    rm -rf ${dir}
    sleep 1
    
    dir="/var/log"
    echo "  |--> 擦除数据${dir}"
    rm -rf ${dir}
    sleep 2
    
    # 询问确认
    echo -e "--> 33[1;34;31m备份还原,慎重操作 33[0m"
    read -r -p "下一步,进行备份还原,请问是否继续? [Y/n] " input
    
    case $input in
        [yY][eE][sS]|[yY])
             echo "Yes"
             ;;
    
        [nN][oO]|[nN])
             exit 1
             ;;
    
        *)
             echo "无效的输入,终止执行"
             exit 1
             ;;
    esac
    
    
    echo "  |--> 解压备份文件"
    sleep 10
    tar xvpfz 
      ${backfile} 
      -C /
    
    echo "  |--> 恢复文件权限"
    restorecon -Rv /
    
    sleeptd=5                                                                                                                                              
    echo "  ----- 禁用selinux,您有${sleeptd}秒时间可以终止还原!!! -----"
    sleep ${sleeptd}
    sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
    
    
    # ------------------ 善后 --------------------
    # echo "  |--> 写入设备状态标记"
    # echo ${kmstats} > ${kmstatsfile}
    
    # -OVER- 输出
    echo -e "--> 33[1;34;31m[${shname}]33[0m 执行完成 33[1;34m^-^33[0m"
    
    
    echo "  |--> 30秒后,系统执行重启! Ctrl+C 可以强制终止"
    sleep 30
    reboot
    
    
    

    tar系统备份和还原

    # 备份
    tar cvpzf backup.tgz / --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys
    # 还原
    tar xvpfz backup.tgz -C /
    # 恢复权限
    restorecon -Rv /
    # 禁用selinux **否则,会出现root登录提示/bin/bash权限拒绝** 测试时发现虚拟机上未出现,实体机出现。如果已经出现这种现象,启动进行单用户模式,修改配置即可。
    /etc/selinux/config  设置为disabled
    

    单用户模式 进入参考: https://www.cnblogs.com/jsjrj01/p/10301603.html

    tar方法教程

    Linux不像windows,它不限制根用户存取任何东西,因此,你完全可以把一个分区上每一个的文件放入一个TAR文件中。

    使用root用户切换到根目录
    然后,使用下面的命令备份完整的系统:
    tar cvpzf backup.tgz / --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys
    或者
    tar cvpzf /state/partition1/home/backup.tgz / --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys
    说明:
    tar 部分就是我们将要使用的软件。
    'cvpfz'是我们给tar加的选项,像“创建一个压缩文档”(这是显然的),“保存权限”(以便使每一个相同的文件有相同的权限),以及“gzip”(缩减大小)。接下来,是压缩文档将获得的名称,在我们的例子中是backup.tgz。
    紧随其后的是我们想要备份的根目录。既然我们想备份所有东西:/。接着就是我们要剔除的目录了:我们不想备份每一样东西,因为包括有些目录不是非常有用。同时确保你没有把备份文件本身也加进去了,否则,你会得到怪异的结 果的。你也许同样不打算把/mnt文件夹包括进来——如果你在那儿挂载了其他分区——否则最终你会把那些也备份的。同时确保你没有任何东西挂载在 /media(即没有挂载任何cd或可移动介质)。否则,剔除/media。

    在进程的最后,你也许会得到一条信息,写着“tar:由于先前错误的耽搁而存在错误”或者其他什么,不过大多数情况下你可以仅仅忽略它。
    作为选择,你可以使用Bzip来压缩你的备份。这意味着较高的压缩比但是也意味着较低的速度。如果压缩比对你很重要,只需用“j”替换命令中的“z”,同时给备份命一个相应的扩展名。这些会使命令变成这样:
    tar cvpjf backup.tar.bz2 / --exclude=/proc --exclude=/lost+found --exclude=/backup.tar.bz2 --exclude=/mnt --exclude=/sys

    恢复:
    如果系统被毁坏,那么我们就可以用备份好的tar包进行恢复。
    在分区的根目录下的backup.tgz文件
    再一次确保你是根用户以及备份文件在文件系统的根目录。

    Linux美妙的地方之一就是这一项工作甚至可以在一个正在运行的系统上进行;没必要被引导cd或者任何东西搞得晕头转向。当然,如果你使你的系统 无法被引导了。你也许别无选择,只能使用一张live-cd了,但是结果是一样的。你甚至可以在Linux系统正在运行的时候,移除它里面所有文件。可是 我不告诉你那个命令!
    这是我要用的命令:
    tar xvpfz backup.tgz -C /

    如果你使用 bz2:
    tar xvpfj backup.tar.bz2 -C /

    警告:这会把你分区里所有文件替换成压缩文档里的文件!

    确保在你做其他任何事情之前,重新创建你剔除的目录:
    mkdir proc
    mkdir lost+found
    mkdir mnt
    mkdir sys
    /proc 权限:文件所有者:root群组:root 所有者:读取 执行 群组:读取 执行 其它:读取 执行
    /lost+found 权限:文件所有者:root群组:root 所有者:读取 写入 执行 群组:读取 执行 其它:读取 执行
    /mnt 权限:文件所有者:root群组:root 所有者:读取 写入 执行 群组:读取 执行 其它:读取 执行
    /sys 权限:文件所有者:root群组:root 所有者:读取 写入 执行 群组:读取 执行 其它:读取 执行
    当你重启以后,所以的事情都会和你备份的时候一模一样。

    用户参照了上面的教程做的备份和恢复,普遍反映:重启电脑后还是会一直提示用户名和密码 输入以后一闪还是提示用户名和密码,反正就是登不进系统。

    网络上有人提到:请教了高手,找到了解决方法,还原后,执行以下命令再重启,即可解决这个问题:restorecon -Rv /

    ————————————————
    版权声明:本文为CSDN博主「tham_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/tham_/article/details/50402109

  • 相关阅读:
    C if语句判断年龄
    C 计算时间差
    C 计算身高
    JRebel激活破解完美解决方式
    Maven optional和scope
    判断当前时间是否在某个时间段内
    给定时间加上几个小时
    RabbitMQ学习笔记
    浏览器、服务器会话
    Maven核心知识点梳理
  • 原文地址:https://www.cnblogs.com/jiftle/p/12764867.html
Copyright © 2011-2022 走看看