樹莓派自建 NAS 雲盤之——資料自動備份
把你的樹莓派變成資料的安全之所。
在《樹莓派自建 NAS 雲盤》系列的 第一篇 文章中,我們討論了建立 NAS 的一些基本步驟,新增了兩塊 1TB 的儲存硬碟驅動(一個用於資料儲存,一個用於資料備份),並且通過網路檔案系統(NFS)將資料儲存盤掛載到遠端終端上。本文是此係列的第二篇文章,我們將探討資料自動備份。資料自動備份保證了資料的安全,為硬體損壞後的資料恢復提供便利以及減少了檔案誤操作帶來的不必要的麻煩。
備份策略
我們就從為小型 NAS 構想一個備份策略著手開始吧。我建議每天有時間節點、有計劃的去備份資料,以防止干擾到我們正常的訪問 NAS,比如備份時間點避開正在訪問 NAS 並寫入檔案的時間點。舉個例子,你可以每天凌晨 2 點去進行資料備份。
另外,你還得決定每天的備份需要被保留的時間長短,因為如果沒有時間限制,儲存空間很快就會被用完。一般每天的備份保留一週便可以,如果資料出了問題,你便可以很方便的從備份中恢復出來原資料。但是如果需要恢復資料到更久之前怎麼辦?可以將每週一的備份檔案保留一個月、每個月的備份保留更長時間。讓我們把每月的備份保留一年時間,每一年的備份保留更長時間、例如五年。
這樣,五年內在備份盤上產生大量備份:
- 每週 7 個日備份
- 每月 4 個周備份
- 每年 12 個月備份
- 每五年 5 個年備份
你應該還記得,我們搭建的備份盤和資料盤大小相同(每個 1 TB)。如何將不止 10 個 1TB 資料的備份從資料盤存放到只有 1TB 大小的備份盤呢?如果你建立的是完整備份,這顯然不可能。因此,你需要建立增量備份,它是每一份備份都基於上一份備份資料而建立的。增量備份方式不會每隔一天就成倍的去佔用儲存空間,它每天只會增加一點佔用空間。
以下是我的情況:我的 NAS 自 2016 年 8 月開始執行,備份盤上有 20 個備份。目前,我在資料盤上儲存了 406GB 的檔案。我的備份盤用了 726GB。當然,備份盤空間使用率在很大程度上取決於資料的更改頻率,但正如你所看到的,增量備份不會佔用 20 個完整備份所需的空間。然而,隨著時間的推移,1TB 空間也可能不足以進行備份。一旦資料增長接近 1TB 限制(或任何備份盤容量),應該選擇更大的備份盤空間並將資料移動轉移過去。
利用 rsync 進行資料備份
利用 rsync
命令列工具可以生成完整備份。
pi@raspberrypi:~ $ rsync -a /nas/data/ /nas/backup/2018-08-01
這段命令將掛載在 /nas/data/
目錄下的資料盤中的資料進行了完整的複製備份。備份檔案儲存在 /nas/backup/2018-08-01
目錄下。-a
引數是以歸檔模式進行備份,這將會備份所有的後設資料,例如檔案的修改日期、許可權、擁有者以及軟連線檔案。
現在,你已經在 8 月 1 日建立了完整的初始備份,你將在 8 月 2 日建立第一個增量備份。
pi@raspberrypi:~ $ rsync -a --link-dest /nas/backup/2018-08-01/ /nas/data/ /nas/backup/2018-08-02
上面這行程式碼又建立了一個關於 /nas/data
目錄中資料的備份。備份路徑是 /nas/backup/2018-08-02
。這裡的引數 --link-dest
指定了一個備份檔案所在的路徑。這樣,這次備份會與 /nas/backup/2018-08-01
的備份進行比對,只備份已經修改過的檔案,未做修改的檔案將不會被複制,而是建立一個到上一個備份檔案中它們的硬連結。
使用備份檔案中的硬連結檔案時,你一般不會注意到硬連結和初始拷貝之間的差別。它們表現的完全一樣,如果刪除其中一個硬連結或者檔案,其他的依舊存在。你可以把它們看做是同一個檔案的兩個不同入口。下面就是一個例子:
左側框是在進行了第二次備份後的原資料狀態。中間的方塊是昨天的備份。昨天的備份中只有圖片 file1.jpg
並沒有 file2.txt
。右側的框反映了今天的增量備份。增量備份命令建立昨天不存在的 file2.txt
。由於 file1.jpg
自昨天以來沒有被修改,所以今天建立了一個硬連結,它不會額外佔用磁碟上的空間。
自動化備份
你肯定也不想每天凌晨去輸入命令進行資料備份吧。你可以建立一個任務定時去呼叫下面的指令碼讓它自動化備份。
#!/bin/bash
TODAY=$(date +%Y-%m-%d)
DATADIR=/nas/data/
BACKUPDIR=/nas/backup/
SCRIPTDIR=/nas/data/backup_scripts
LASTDAYPATH=${BACKUPDIR}/$(ls ${BACKUPDIR} | tail -n 1)
TODAYPATH=${BACKUPDIR}/${TODAY}
if [[ ! -e ${TODAYPATH} ]]; then
mkdir -p ${TODAYPATH}
fi
rsync -a --link-dest ${LASTDAYPATH} ${DATADIR} ${TODAYPATH} $@
${SCRIPTDIR}/deleteOldBackups.sh
第一段程式碼指定了資料路徑、備份路徑、指令碼路徑以及昨天和今天的備份路徑。第二段程式碼呼叫 rsync
命令。最後一段程式碼執行 deleteOldBackups.sh
指令碼,它會清除一些過期的沒有必要的備份資料。如果不想頻繁的呼叫 deleteOldBackups.sh
,你也可以手動去執行它。
下面是今天討論的備份策略的一個簡單完整的示例指令碼。
#!/bin/bash
BACKUPDIR=/nas/backup/
function listYearlyBackups() {
for i in 0 1 2 3 4 5
do ls ${BACKUPDIR} | egrep "$(date +%Y -d "${i} year ago")-[0-9]{2}-[0-9]{2}" | sort -u | head -n 1
done
}
function listMonthlyBackups() {
for i in 0 1 2 3 4 5 6 7 8 9 10 11 12
do ls ${BACKUPDIR} | egrep "$(date +%Y-%m -d "${i} month ago")-[0-9]{2}" | sort -u | head -n 1
done
}
function listWeeklyBackups() {
for i in 0 1 2 3 4
do ls ${BACKUPDIR} | grep "$(date +%Y-%m-%d -d "last monday -${i} weeks")"
done
}
function listDailyBackups() {
for i in 0 1 2 3 4 5 6
do ls ${BACKUPDIR} | grep "$(date +%Y-%m-%d -d "-${i} day")"
done
}
function getAllBackups() {
listYearlyBackups
listMonthlyBackups
listWeeklyBackups
listDailyBackups
}
function listUniqueBackups() {
getAllBackups | sort -u
}
function listBackupsToDelete() {
ls ${BACKUPDIR} | grep -v -e "$(echo -n $(listUniqueBackups) |sed "s/ /\\\|/g")"
}
cd ${BACKUPDIR}
listBackupsToDelete | while read file_to_delete; do
rm -rf ${file_to_delete}
done
這段指令碼會首先根據你的備份策略列出所有需要儲存的備份檔案,然後它會刪除那些再也不需要了的備份目錄。
下面建立一個定時任務去執行上面這段程式碼。以 root 使用者許可權開啟 crontab -e
,輸入以下這段命令,它將會建立一個每天凌晨 2 點去執行 /nas/data/backup_scripts/daily.sh
的定時任務。
0 2 * * * /nas/data/backup_scripts/daily.sh
有關建立定時任務請參考 cron 建立定時任務。
- 當沒有備份任務時,解除安裝你的備份盤或者將它掛載為只讀盤;
- 利用遠端伺服器作為你的備份盤,這樣就可以通過網際網路同步資料
你也可用下面的方法來加強你的備份策略,以防止備份資料的誤刪除或者被破壞:
本文中備份策略示例是備份一些我覺得有價值的資料,你也可以根據個人需求去修改這些策略。
我將會在 《樹莓派自建 NAS 雲盤》 系列的第三篇文章中討論 Nextcloud。Nextcloud 提供了更方便的方式去訪問 NAS 雲盤上的資料並且它還提供了離線操作,你還可以在客戶端中同步你的資料。
via: https://opensource.com/article/18/8/automate-backups-raspberry-pi
作者:Manuel Dewald 選題:lujun9972 譯者:jrg 校對:wxy
相關文章
- 樹莓派自建 NAS 雲盤之——雲盤構建樹莓派
- 樹莓派自建 NAS 雲盤之——樹莓派搭建網路儲存盤樹莓派
- 樹莓派的硬體資料樹莓派
- 樹莓派FRP內網穿透及自啟動樹莓派FRP內網穿透
- 樹莓派使用入門:如何啟動一個新的樹莓派樹莓派
- 樹莓派使用入門:如何更新樹莓派樹莓派
- 樹莓派是什麼 樹莓派能做什麼 樹莓派的功能用途樹莓派
- 樹莓派使用入門:用樹莓派學 Linux樹莓派Linux
- Synology群暉NAS儲存如何設定備份計劃自動備份電腦資料夾
- 樹莓派使用樹莓派
- NAS如何遠端備份資料
- 如何將手機裡的資料自動備份到鐵威馬NAS?
- 樹莓派安裝vnc server並設定自啟動樹莓派VNCServer
- 阿里雲資料庫備份DBS與自建備份系統有什麼優勢?阿里資料庫
- 樹莓派使用入門:慶祝樹莓派的 14 天樹莓派
- 樹莓派使用入門:如何用樹莓派來娛樂樹莓派
- 樹莓派使用入門:如何購買一個樹莓派樹莓派
- 樹莓派CM4(四):樹莓派映象替換核心樹莓派
- Mysql資料庫自動備份MySql資料庫
- 樹莓派筆記樹莓派筆記
- 樹莓派配置watchdog樹莓派
- 樹莓派與FileZilla樹莓派
- 樹莓派使用入門:如何為樹莓派社群做出貢獻樹莓派
- 樹莓派搭建git伺服器 | 樹莓派小無相系列樹莓派Git伺服器
- 「玩轉樹莓派」樹莓派 3B+ 配置無線WiFi樹莓派WiFi
- 巧用天翼雲盤備份雲主機資料
- 計算機實驗室之樹莓派計算機樹莓派
- 樹莓派 | 修改樹莓派3熱點的名稱和密碼樹莓派密碼
- 樹莓派開發筆記(十五):樹莓派4B+從原始碼編譯安裝mysql資料庫樹莓派筆記原始碼編譯MySql資料庫
- 如何將電腦資料備份至NAS?
- 每天自動備份Oracle資料庫Oracle資料庫
- 樹莓派安裝nodejs樹莓派NodeJS
- 樹莓派 -入門篇樹莓派
- 樹莓派安裝 vscode樹莓派VSCode
- 樹莓派-進階篇樹莓派
- 樹莓派 4 來襲!樹莓派
- 樹莓派raspiOS換源樹莓派iOS
- 樹莓派桌面體驗樹莓派