我應該在 rsync 中包含和排除什麼來備份我的系統?
我花了一整天的時間試驗 rsync
exclude-from
和include-from
,沒有成功,完全輸了。我找不到任何範例或幫助來回答我的確切但非常簡單的要求,並且要麼我無法使它們工作,要麼我沒有得到我想要的結果,我也不明白為什麼。我正在嘗試設置自動每日備份,經過幾天的嘗試,基於這個非常好的網站,我密切關注增量備份,並且在測試中一切正常,我已經達到了一個階段幹執行我的 /home/Harry 目錄,沒有排除和包含,它也可以正常工作。我還整理了將為我執行它的 cron 作業。
在有人建議使用 rsync 和 cron 以外的其他工具之前,請注意,我將安排它在每天晚上 11 點到 30 點執行,幾分鐘後電腦會關閉。這在測試中也可以正常工作。如果當時電腦沒有打開,那也沒關係,因為那天沒有什麼可以備份的。
為了進一步取得進展,並使用 Mark Sobell 的“A Practical Guide to Fedora and Red Hat LInux”中的建議,第 7 版第 607 頁,以及其他資源,我想對其進行改進以包括
/home/
、/var/
和; 並排除, , , /sys/ 和./usr/local/``/etc/
/tmp/``/var/tmp/``/usr/tmp/``/proc/,``/var/cache/
請:首先,這些是明智的清單嗎?第二:如何在我的 rsync 呼叫中指定此要求?
在我的問題得到回答後添加。
感謝所有回答我最初問題的人,我現在有一個可行的解決方案,列在下面的腳本中。我的經驗可能對任何嘗試類似事情的人有用,邁克爾霍納要求我展示出問題的地方。請參閱引用的網站以獲取有關循環如何工作的完整描述,並且需要最少的儲存空間。
我之前的試驗在某種程度上記錄在腳本中的註釋行中,這是我用於測試的內容,最初是為了備份一些測試文件,後來嘗試將備份放到外部硬碟驅動器上。我的做法是,當我更改某些內容時,我會通過保留和註釋掉原始內容來記錄更改,以便在必要時可以再次返回。
以 CA6 開頭的長標識符用於 1 TB 外部硬碟驅動器,我打算在其上儲存每日備份,可能以 10 天為周期。我還有一個 750 GB 的驅動器,用於每周備份,可能一年一次。您將在腳本接近尾聲時看到此循環仍需處理。
如果發生崩潰,我不關心是否需要完全恢復系統。我之前有三台電腦,沒有一台出現故障,但我在外部硬碟驅動器上進行了手動備份,現在只是將它們用作我仍然需要的任何材料的來源。所以我會從一個裸安裝開始,然後根據需要添加我需要的內容。
正如我的問題所暗示的那樣,我嘗試使用 rsync
exclude-from
和include-from
,但無法掌握必要文件的格式。稍後我可能會嘗試將長列表放入文件中。#!/bin/bash # Adapted from: http://webgnuru.com/linux/rsync_incremental.php # Website Backup Script #====================================================================== # Define Variables # Todays date in ISO-8601 format e.g. 2013-10-19: DAY0=`date -I` # Yesterdays date in ISO-8601 format: DAY1=`date -I -d "1 day ago"` # The source directory: SRC="/home/Harry/testrsync/bravo/" #SRC="/home/Harry/" # Filename of list of files to include INC="/home/Harry/testrsync/include" # Filename of file list to exclude EXC="/home/Harry/testrsync/exclude" # The target directory: #TRG="/home/Harry/testrsync/backups/$DAY0" TRG="/run/media/Harry/CA6C321E6C32062B/annals/$DAY0" # The link destination directory: #LNK="/home/Harry/testrsync/backups/$DAY1" LNK="/run/media/Harry/CA6C321E6C32062B/$DAY1" # The log file #LOG="--logfile="/home/Harry/testrsync/backups/bulog --log-file-format="%t\n";"" LOG="--log-file=/home/Harry/testrsync/backups/bulog" #The rsync options: #OPT="--dry-run -avh --delete --link-dest=$LNK" OPT="-aAXvh --delete --link-dest=$LNK" #OPT="-ah --delete --link-dest=$LNK" #====================================================================== #Execute the backup #rsync -avvv $OPT --include-from=$INC --exclude-from=$EXC $SRC $TRG $LOG #rsync -avv $OPT --include-from=$INC $SRC $TRG $LOG #rsync $OPT--delete --stats --exclude-from=$EXC /home/Harry /var /usr/local /etc $TRG $LOG rsync $OPT --exclude {"/dev/*","/proc/*","/sys/*","/tmp/*","/usr/tmp/*","/run/*","/mnt/*","/media/*","/var/cache/*","var/tmp/*","/","/lost+found"} /* $TRG $LOG #Delete old backups cyclically # for my tests I am going to use a three day cycle DAY4=`date -I -d "4 days ago"` #Delete the backup from 4 days ago, if it exists if [ -d /home/Harry/testrsync/backups/$DAY4 ] then rm -r /home/Harry/testrsync/backups/$DAY4 #rm -r /run/media/HarryCA6C321E6C32062B/$DAY4 fi # Cron does not output to a screen, so no result from next line # zenity --info --text='Backup complete' --title="Backup Test"
因此,–exclude-from文件將是:
var/tmp/ var/cache/
並像這樣使用 rsync:
rsync -aAv --delete --stats --exclude-from /excludes /home /var /usr/local /etc /Backup/
包括
/
(根文件系統),並包括您要備份的任何其他文件系統的根目錄(例如,如果/home
它位於單獨的分區上,也包括它)。使用該-x
選項排除所有其他文件系統:記憶體中的文件系統,如/proc
and/sys
、掛載的可移動媒體、遠端文件系統等。排除您不想備份的文件。
/tmp
是一個常見的候選者,也許也是/var/tmp
,下的一些目錄/var/cache
,等等。備份空間很昂貴,因此您可能不想備份易於恢復的文件,例如從軟體包安裝的程序。所以你應該排除
/usr
except/usr/local
。有關rsync 包含和排除列表的介紹性指南,請參閱Rsync 過濾器:僅複製一個模式。你會想要類似的東西rsync -ax --exclude='/tmp/*' --include=/usr/local --exclude=/usr / backup: