Anything-sync-daemon

出自 Arch Linux 中文维基

anything-sync-daemon (asd) 是一個小型的、用以將用戶指定的目錄(同步的目標)移至 tmpfs 並定期同步回硬盤(HDD/SSD)的偽守護進程。其原理為通過 bind 掛載以及創造性地使用 rsync 來同步兩處的文件。此外,ASD 有着多種用於崩潰恢復的特性。

ASD 的設計目標以及優點有:

  1. 透明的用戶體驗
  2. 減少對硬盤的損耗
  3. 速度

當目標目錄被移至 tmpfs 之後,相應的讀寫操作也將從硬盤轉移到內存,因而可以減少硬盤損耗,同時提升運行速度與響應速度。內存的訪問時間以納秒計,而硬盤則是以毫秒計,這中間差了六個數量級,或者說,內存比硬盤快出一百萬倍。

警告: 如果你只想同步瀏覽器的 profile,我們建議不要使用 ASD,而是使用專門為此設計的、可以檢查瀏覽器運行狀況的 PSD。ASD 並不會做這些檢查,在某些情況下,瀏覽器 profile 的數據可能丟失。

安裝[編輯 | 編輯原始碼]

安裝 anything-sync-daemon 包。

配置[編輯 | 編輯原始碼]

配置文件在隨軟件包安裝的 /etc/asd.conf

  • 至少需要在 WHATTOSYNC 數組裏定義由 ASD 管理的同步目標。語法見下方。
  • 選做:取消 VOLATILE 變量的註釋並定義 tmpfs 的位置。
  • 選做:啟用 overlayfs 來進一步提升同步的速度並降低內存的使用。注意該選項需要你的內核進行任一 overlay 內核模塊的使用的配置。閱讀 #Overlayfs 模式以了解更多信息。
注意: 對於 VOLATILE 設定來說,默認值 /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 模式[編輯 | 編輯原始碼]

注意: 生產環境下的不同發行版的 Linux 內核有好幾個版本的 overlayfs。版本 22 以及更低的版本的模塊是「overlayfs」,而新版本(23 以及更高)是「overlay」——注意新版本裏沒有了「fs」的後綴。如果被設定使用其中一種 overlayfs 的話,ASD 會自動檢測你的內核裡可用的版本。

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 會刪除所有的恢復快照。請只在確定你想要刪除的時候再運行這個命令。

注意: 如果同步目錄的權限在 root 或者另一用戶手中而 ASD 被調用來清除快照,那麼它會因為同步目標的權限而出錯。用戶可以通過 sudo 或者以 root 身份調用這個功能來避免此類錯誤。

支持[編輯 | 編輯原始碼]

請至 討論貼發表評論或提問。