執行交互腳本
/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 "--> \033[1;34;31m[${shname}] \033[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 "--> \033[1;34;31m[${shname}]\033[0m 執行完成 \033[1;34m^-^\033[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 "--> \033[1;34;31m[${shname}] \033[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 "--> \033[1;34;31m備份還原,慎重操作 \033[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 "--> \033[1;34;31m備份還原,慎重操作 \033[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 "--> \033[1;34;31m[${shname}]\033[0m 執行完成 \033[1;34m^-^\033[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
