Anything-sync-daemon
anything-sync-daemon包 (asd) 是一個小型的、用以將用户指定的目錄(同步的目標)移至 tmpfs 並定期同步回硬盤(HDD/SSD)的偽守護進程。其原理為通過 bind 掛載以及創造性地使用 rsync 來同步兩處的文件。此外,ASD 有着多種用於崩潰恢復的特性。
ASD 的設計目標以及優點有:
- 透明的用户體驗
- 減少對硬盤的損耗
- 速度
當目標目錄被移至 tmpfs 之後,相應的讀寫操作也將從硬盤轉移到內存,因而可以減少硬盤損耗,同時提升運行速度與響應速度。內存的訪問時間以納秒計,而硬盤則是以毫秒計,這中間差了六個數量級,或者説,內存比硬盤快出一百萬倍。
安裝[編輯 | 編輯原始碼]
配置[編輯 | 編輯原始碼]
配置文件在隨軟件包安裝的 /etc/asd.conf
。
- 至少需要在
WHATTOSYNC
數組裏定義由 ASD 管理的同步目標。語法見下方。 - 選做:取消
VOLATILE
變量的註釋並定義 tmpfs 的位置。 - 選做:啟用 overlayfs 來進一步提升同步的速度並降低內存的使用。注意該選項需要你的內核進行任一 overlay 內核模塊的使用的配置。閱讀 #Overlayfs 模式以了解更多信息。
/tmp
就應該很好了。如果你正在使用 bleachbit包,請不要用 --clean system.tmp
選項調用它,否則你會把一個 ASD 用來記錄同步狀態的關鍵的文件(.foo)給移除掉。另外,請注意使用設置成 /dev/shm
可能會帶來問題,此時 systemd 的 NAMESPACE 可能只會在用户開啟 overlayfs 選項時出現。例如:
WHATTOSYNC=('/var/lib/monitorix' '/srv/http' '/foo/bar')
或者
WHATTOSYNC=( '/var/lib/monitorix' '/srv/http' '/foo/bar' )
使用[編輯 | 編輯原始碼]
啟動/啟用 asd.service
。此外,程序提供的同步定時器會每小時運行一次,將文件從 tmpfs 同步回硬盤。同步定時器在 asd.service
啟動後會自動啟動,所以不必手動啟動。
預覽(parse)模式[編輯 | 編輯原始碼]
運行 asd parse
來查看在 /etc/asd.conf
的設定下 ASD 將會進行或是正在進行什麼操作。它同時也會提供目錄大小、路徑、以及是否存在恢復快照等有用信息。
提示以及技巧[編輯 | 編輯原始碼]
更頻繁地進行同步[編輯 | 編輯原始碼]
軟件提供了同步的計時器(timer),每小時運行一次。用户可以通過擴展對應的 systemd unit對其重新設定。下面的例子將定時器設定為每十分鐘同步一次(注意要先清除 OnUnitActiveSec
再設定新的值 [1]):
/etc/systemd/system/asd-resync.timer.d/frequency.conf
[Unit] Description=Timer for Anything-sync-daemon - 10min [Timer] OnUnitActiveSec= OnUnitActiveSec=10min
查看 systemd.timer(5) 以獲取更多選項。
Overlayfs 模式[編輯 | 編輯原始碼]
Overlayfs 是 Linux 內核版本 3.18.0 裡正式引入的簡單的聯合文件系統。從 ASD 版本 5.54 開始,overlayfs 就可以被用於減低 ASD 的 tmpfs 內存使用並加速同步操作(以及取消同步的操作)。關鍵在於 overlay 的掛載只會寫入更改了的數據寫入而不會寫入寫入整個同步目錄。在使用 overlayfs 模式時,ASD 默認啟用的崩潰恢復特性也生效。Overlayfs 模式可以通過取消 /etc/asd.conf
裡的 USE_OVERLAYFS="yes"
一行的註釋並重啟守護進程來開啟。
快照[編輯 | 編輯原始碼]
有時候你的同步目錄的最新的完好的備份還會在你的文件系統裏保存着。在重啟時,ASD 會檢查上次退出時是否處在某種損壞的狀態。如果檢測到是的話,ASD 會先將最新的完好備份快照下來,之後再用這份備份恢復。注意,ASD 為了試圖減少硬盤佔用,它不會把整個目錄都複製下來。它實際上使用了硬連結,在同步的時候才創建新的文件並保留原有的硬連結。所以在 ASD 正在備份的時候嘗試更改目錄可能會導致目錄變為某種損壞的狀態。
/etc/asd.conf
裡取消 USE_BACKUPS
變量的註釋並設成 "no"
來將快照/備份特性直接關閉快照會和同步目標在一個目錄裡,並且它的文件名會帶有對應了恢復時間的時間戳。例如,/foo/bar
的快照會是 /foo/.bar-backup_asd-crashrecovery-20141221_070112.tar.zstd
——當然你對應的時間戳後綴會不同。
要恢復快照的話:
- 停止
asd.service
. - 確認不存在 ASD 創建的目錄。如果存在的話,那麼 ASD 上次因為某些其它的原因沒有正確退出。
- 將損壞的同步目錄轉移至備份位置(不要盲目地刪除任何東西)。
- 將快照存檔的 tar 壓縮包解壓到同步目錄。
以 /foo/bar
為例:
$ cd /foo $ mv bar bar-bad $ tar -xvf .bar-backup_asd-crashrecovery-20141221_070112.tar.zstd
使用清除(clean)模式清除所有快照[編輯 | 編輯原始碼]
運行 asd clean
會刪除所有的恢復快照。請只在確定你想要刪除的時候再運行這個命令。
支持[編輯 | 編輯原始碼]
請至討論貼發表評論或提問。