Logrotate 本來是拿來備份系統 log 檔用的; 不過被我拿來充份利用、 備份自己的資料 :-) 我每天都會 (至少一次) 把最近幾天內更動過的檔案 (文件/圖片/...) 備份起來, 比方叫做 backup.zip 。 因為這個檔案很小, 所以可以不時上傳到雲端、 下載到隨身碟上。 但偶爾還是會需要挖出較舊的備份, 把檔案還原到舊版。 所以我會用 logrotate 把過去一週的 backup.zip 每天保留一個版本。
首先用 EDITOR=nano VISUAL=nano crontab -e
編輯你的 crontab, 在最後面加一句:
37 4 * * * /home/ckhung/work/daily-job.sh
之類的, 設定每天半夜 4:37 執行 daily-job.sh 。
我的 daily-job.sh 長得像這樣:
date >> /home/ckhung/archive/cron.log find /home/ckhung/work -type f -mtime -3 | zip -@y /home/ckhung/archive/backup.zip /usr/sbin/logrotate -s /home/ckhung/archive/logrotate.status /home/ckhung/work/logrotate.conf DAYOFWEEK=$(date +"%w") if [ "$DAYOFWEEK" == 6 ]; then # 每週六要做的事 echo fi
date 那句是為了要確認 cron 有設定成功, 每天有按時執行。 find 那句把 ~/work 底下最近 3 天內修改過的檔案都壓縮起來。 logrotate 那句會根據 ~/work/logrotate.conf 的設定來幫 backup.zip 做備份。 注意: 在 ubuntu 底下, logrotate 的執行檔不是放在 /usr/bin ! 如果沒有寫完整的路徑, 這句話會失敗。 最後那段 if 只是在示範如何順便把每週固定做的事順便寫在同一個檔案裡, 這樣 crontab 就不需要另外加一句。
至於 work/logrotate.conf 的內容則長得像這樣:
missingok copy /home/ckhung/archive/backup.zip { daily rotate 7 } /home/ckhung/archive/backup.zip.1 { weekly rotate 5 } /home/ckhung/archive/backup.zip.1.1 { monthly rotate 12 }
這樣可以製造 「近密遠疏」 的備份效果, 也就是說, 最近一週每天有一個版本的備份 (backup.zip.1 到 backup.zip.7)、 最近一個月每週至少有一個版本的備份 (backup.zip.1.1 到 backup.zip.1.5)、 最近一年每個月至少有一個版本的備份 (backup.zip.1.1.1 到 backup.zip.1.1.12)。 實際上我只做前兩層, 沒有做第三層, 所以隔一陣子之後, 所有的備份看起來類似這樣:
ckhung@localhost:~/copy $ ls -trl update* -rw-r--r-- 1 ckhung ckhung 90742 1月 1 04:37 update.zip.1.5 -rw-r--r-- 1 ckhung ckhung 532881 1月 7 04:37 update.zip.1.4 -rw-r--r-- 1 ckhung ckhung 515260 1月 15 04:37 update.zip.1.3 -rw-r--r-- 1 ckhung ckhung 73122 1月 21 04:37 update.zip.1.2 -rw-r--r-- 1 ckhung ckhung 711893 1月 24 04:37 update.zip.7 -rw-r--r-- 1 ckhung ckhung 749767 1月 25 04:37 update.zip.6 -rw-r--r-- 1 ckhung ckhung 742107 1月 26 04:37 update.zip.5 -rw-r--r-- 1 ckhung ckhung 163966 1月 27 04:37 update.zip.4 -rw-r--r-- 1 ckhung ckhung 163966 1月 28 04:37 update.zip.3 -rw-r--r-- 1 ckhung ckhung 163966 1月 29 04:37 update.zip.2 -rw-r--r-- 1 ckhung ckhung 163966 1月 29 04:37 update.zip.1.1 -rw-r--r-- 1 ckhung ckhung 163966 1月 30 04:37 update.zip.1 -rw-r--r-- 1 ckhung ckhung 163966 1月 30 10:30 update.zip
配合人腦 「對最近的事情比較關心」 的特性, 用很少的空間, 備份很久的資料, 很方便吧!
logrotate的執行檔是不是放在/usr/bin似乎得看distribution是怎麼打包的
回覆刪除謝謝! 好的, 已更正。
刪除貴哥要不要以分享一下自己怎麼整理、備份檔案?一直覺得整理檔案很痛苦……,學校的教材、自己的作業、程式或單純大資料,很多東西積在一起,之前整理過幾次,但過一陣子又會亂掉。
回覆刪除這個講起來有點囉嗦零碎沒什麼技巧,不知道該怎麼寫。 簡單講就是按照大小和更新頻率分類。
刪除佔很多空間、很少更新的檔案 (例如下載的 .iso、 自己建的虛擬機映像檔) 放在同一個目錄 (叫做 archive/ 好了), 久久 rsync 一次就可以了。
另一個主要目錄 (叫做 work/ 好了) 放的是較常查看或常更新的檔案, 檔案大小通常不大。 這些檔案除了可以每天 rsync 之外, 還可以 「find 最近幾天內修改的檔案」 再 zip 壓縮放隨身碟上。 這些小檔累積起來, 每年連同 e-mail 一起大備份一次, 移到 archive/。 然後 work/ 底下就可以大掃除, 丟掉很久沒用到的子目錄, 反正已有備份。
部落格的圖片每張小小的, 但數量很多。 產生之後就不再變動。 反正是公開的, 就乾脆放到 github 上面去。 其他凡是知識類、 適合公開分享的東西, 就盡量都貼到部落格或 github 公有雲上面去。 這樣還可以被 google cache 起來、 被 wayback machine 備份。