Anything-sync-daemon

出自 ArchWiki

anything-sync-daemon (asd) 是一个微小的伪守护进程,旨在管理用户指定的目录(以下称为同步目标),将它们置于 tmpfs 中,并定期将它们同步回物理磁盘 (HDD/SSD)。这是通过绑定挂载步骤和创新性地使用 rsync 来实现 tmpfs 副本和媒体绑定的备份之间的同步来完成的。此外,asd 还具有多项崩溃恢复功能。

asd 的设计目标和优点是

  1. 透明的用户体验
  2. 减少物理驱动器的磨损
  3. 速度

由于同步目标被重定位到 tmpfs (RAM 磁盘) 中,与系统使用它们相关的 I/O 冲击也被从物理驱动器重定向到 RAM,从而减少了物理驱动器的磨损,并提高了速度和响应速度。RAM 的访问时间约为纳秒级,而物理磁盘的访问时间约为毫秒级。这相差六个数量级,即快 1,000,000 倍。

警告: 如果希望同步浏览器配置文件,建议不要将 asd 用于此目的。请改用 Profile-sync-daemon,它内置了针对在 tmpfs 中运行浏览器配置文件的特殊情况的健全性检查。Anything-sync-daemon 没有这些检查;在某些情况下,浏览器配置文件数据可能会丢失。您已被警告。

安装

安装 anything-sync-daemon 软件包。

配置

用户管理的设置在 /etc/asd.conf 中定义,该文件包含在软件包中。

  • 至少,在 WHATTOSYNC 数组中定义要由 asd 管理的同步目标。语法如下。
  • 可选地,取消注释并在 VOLATILE 变量中定义 tmpfs 的位置。
  • 可选地,启用 overlayfs 的使用,以进一步提高同步速度并使用更小的内存占用。请注意,此选项需要您的内核配置为使用 'overlay' 内核模块。有关更多详细信息,请参见 #Overlayfs 模式
注意: /tmp 的默认值应该可以很好地用于 VOLATILE 设置。如果使用 bleachbit,请勿使用 --clean system.tmp 开关调用它,否则您将从 /tmp 中删除 asd 需要用来跟踪同步状态的关键点文件 (.foo)。另请注意,仅当用户启用 overlayfs 选项时,使用 /dev/shm 的值可能会导致 systemd 的 NAMESPACE 生成问题。

示例

WHATTOSYNC=('/var/lib/monitorix' '/srv/http' '/foo/bar')

WHATTOSYNC=(
'/var/lib/monitorix'
'/srv/http'
'/foo/bar'
)

使用

启动/启用 asd.service。此外,提供的 resync-timer 将每小时运行一次从 tmpfs 到磁盘的重新同步。resync-timer 与 asd.service 一起自动启动,因此无需手动启动计时器。

预览 (解析) 模式

运行 asd parse 以查看 asd 将根据 /etc/asd.conf 中的条目执行/正在执行的操作。它还将提供有用的信息,例如目录大小、路径以及是否已创建任何恢复快照。

提示和技巧

以更频繁的间隔同步

软件包提供的重新同步计时器每小时触发一次。用户可以选择通过扩展 systemd 单元来重新定义此行为。下面的示例将计时器更改为每十分钟同步一次(请注意,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'。如果您的内核配置为使用其中之一,Asd 将自动检测您的内核可用的 overlayfs。

Overlayfs 是一个简单的联合文件系统,在 Linux 内核版本 3.18.0 中被主线化。从 asd 版本 5.54 开始,overlayfs 可用于减少 asd 的 tmpfs 空间的内存占用,并加快同步和取消同步操作。其奥妙在于 overlay 挂载只写出已更改的数据,而不是整个同步目标。当在 overlayfs 模式下运行时,asd 在其默认模式下使用的相同恢复功能也处于活动状态。通过取消注释 /etc/asd.conf 中的 USE_OVERLAYFS="yes" 行,然后重启守护进程来启用 Overlayfs 模式。

快照

很可能您的同步目标的“最后良好”备份仍然完好无损地位于您的文件系统中。重新启动 asd(例如在重新启动时)时,会执行检查以查看 asd 是否在某些损坏状态下退出。如果检测到,asd 将在旋转回原位之前快照“最后良好”的备份。请注意,由于 asd 试图减少磁盘使用量,因此它从未真正“复制”目录的完整内容,而只是使用到先前文件的硬链接。并且在 rsync 步骤期间,它会创建新文件,以便先前的硬链接保持不变。因此,在 asd 尝试备份期间尝试修改目录可能会使目录处于某种损坏状态。

注意: 如果需要,用户可以通过取消注释并将 USE_BACKUPS 变量设置为 "no"/etc/asd.conf 中完全禁用快照/备份功能。

您将在与同步目标相同的目录中找到快照,它将包含一个日期-时间戳,该时间戳对应于进行恢复的时间。例如,/foo/bar 快照将是 /foo/.bar-backup_asd-crashrecovery-20141221_070112.tar.zstd ——当然,日期_时间后缀对您来说会有所不同。

要恢复您的快照

  • 停止 asd.service
  • 确认 asd 创建的目录不存在。如果存在,则 asd 由于其他原因未正确停止。
  • 将同步目标的“坏”副本移动到备份(不要盲目删除任何内容)。
  • 将快照存档解压到预期的同步目标。

使用 /foo/bar 的示例

$ cd /foo
$ mv bar bar-bad
$ tar -xvf .bar-backup_asd-crashrecovery-20141221_070112.tar.zstd

使用清理模式清理所有快照

运行 asd clean 将删除所有累积的恢复快照。仅当您确定要删除它们时才运行此命令。

注意: 如果同步目标由 root 或其他用户拥有,并且如果调用 asd 进行清理,则会根据同步目标的权限抛出错误。可以以 sudo 或 root 身份调用此函数以避免这些错误。

支持

讨论帖中发布评论或疑虑。