Shell-Script

計劃文件夾備份

  • April 26, 2021

我正在尋找如何將 CentOs 7 中使用者的主目錄自動備份到遠端主機或 NAS 或僅備份到 ~/.snapshot。在某些 Linux 設置中,我在使用者的主目錄 (~/.snapshot/) 中看到了一個 .snapshot 文件夾,其中保存了其主目錄的每小時、每晚和每周備份(即 ~/.snapshot/weekly1 的副本) 1 週前在使用者的主目錄中)。

/home/username/.snapshot/ 目錄將由使用者只讀。它不是用於防止硬體故障的備份。如果您不喜歡所做的更改,那麼能夠從昨天或今天早上恢復文件真是太好了。

我看過幾篇關於堆棧溢出的相關文章,但到目前為止,我還沒有看到解釋完整工作流程的指南。

這是我目前所知道的:

  1. 用於rsync將給定文件夾的內容複製到遠端主機、NAS 或 (~/.snapshot/hourly0)
  2. 創建一個shell腳本來執行rsync命令

#!/bin/bash sudo rsync -av --progress --delete --log-file=/home/username/$(date +%Y%m%d)_rsync.log --exclude "/home/username/.snapshot" /home/username/ /home/username/.snapshot/hourly1

  1. 更改腳本的權限以使其可執行

sudo chmod +x /home/username/myscript.sh

  1. 用於crontab在所需的備份間隔安排 rsync 命令
  2. 在執行計劃的每小時 rsync 之前,以某種方式將 hourly0 移動到 hourly1
  3. rsync 成功完成後刪除最舊的備份

是否有任何指南涵蓋如何執行此操作?我不明白如何隨著時間的推移自動重命名文件夾(即每週 1 到每週 2),或者如果我決定只保留最多 9 週,如何刪除“week10”。這是另cron一份工作嗎?

更新:在Google搜尋之後,我發現 NetApp 會創建快照文件夾。我只是目前沒有 NetApp NAS。https://library.netapp.com/ecmdocs/ECMP1635994/html/GUID-FB79BB68-B88D-4212-A401-9694296BECCA.html

這個指南怎麼樣:

  1. 創建您的腳本:創建新文件並呼叫它myrsync.sh,複製/粘貼以下行:

#!/bin/bash sudo rsync -av –progress –delete –log-file=/home/your-username/Desktop/$(date +%Y%m%d) rsync.log –exclude “/ home/your-username/.folder” /home/data /media/dataBackup $(date +%Y%m%d_%T)

標誌的含義:

-av bit: 'a' means archive, or copy everything recursively, preserving things like permissions, ownership and time stamps. 
 -'v' is verbose, so it tells you what its doing, either in the terminal, in this case, in the log file.
 --progress gives you more specific info about progress.
 --delete checks for changes between source and destination, and deletes any files at the destination that you've deleted at the source.
 --log-file saves a copy of the rsync result to a date-stamped file on my desktop.
 --exclude leaves out any files or directories you don't want copied. In the command above, the .folder directory

 /home/data is the directory I want copied. /home/data copies the directory and its contents, /home/data would just copy the contents. 

 /media/dataBackup_$(date +%Y%m%d_%T) is the separate drive. Change this to whatever your backup location is. Note that `rsync` will name every sync differently based on day/time of sync
  1. 保存myrsync.sh在您的 ~$HOME 中並通過鍵入以下命令使其可執行:

sudo chmod +x /home/your-username/Desktop/rsync-shell.sh

您現在可以點兩下該 .sh 文件,選擇在終端中執行,它會詢問您的密碼並執行,然後在桌面上留下一個日誌文件。或者,你可以做一個 cron 工作來為你做這件事!

  1. cron 作業

通過鍵入以下命令將文件複製myrsync.sh到 /root:

sudo cp /home/your-username/Desktop/myrsync.sh /root

然後輸入:

sudo crontab -e

你會看到一行寫著:分鍾小時日月年命令

在此之下,輸入: 0 22 * * * /root/myrsync.sh > $HOME/readme.log 2>&1

這表示:

The minute
The hour in military time (24 hour) format (0 to 23)
The day of the month (1 to 31)
The month (1 to 12)
The day of the week(0 or 7 is Sun, or use name)
The command to run
So at 22:00 (10pm) every day root will run the shell script, without prompting you for sudo password (because its running as root already).

現在按 Control-X,然後鍵入“Y”,然後按 Enter

為了刪除較舊的備份,一種方法是創建一個文件,其中包含每個同步的時間戳。例如在命令後添加如下rsync命令myrsync.sh

date +%Y%m%d_%T >> time.txt

使用命令刪除與時間戳匹配的備份,例如:在infind之後添加此命令date +%Y%m%d_%T >> time.txt``myrsync.sh

find . -type f ! -newer /tmp/timestamp -delete

或者

find . ! -newermt $date ! -type d -delete

這將刪除特定日期/時間之前的備份。

可以在此處找到每小時/每天/每月備份的更多詳細資訊和範常式式碼

引用自:https://unix.stackexchange.com/questions/469864