自从有一次不小心把home目录删没了,还有一次调整分区大小不小心把home给格没了,我就长心眼了。一定要数据备份。
然后统计了一下,我的个龟龟,30w个文件我拿命备份啊,文件倒是不到(迁移了一部分在移动硬盘里),但是qq聊天记录那些乱七八糟的表情包啊小图片啊,光这一部分就有8w个文件,淦。自然就想到了增量备份。
我比较懒就不发引用了,增量同步大致就有点像git仓库,原理上是会根据文件差异来传输文件,而不是一股脑把所有文件都拷过去(当然它肯定没法像git一样回溯)
其实lsyncd[3]它使用的工具是rsync+inotify。rsync是linux自带的,几乎所有发行版应该都有这个工具,你们也可以尝试一下,直接rsync -av /home/core /tmp/xxx
就好了。第一次拷因为很大所以慢,但是在做出一些修改之后,第二次使用同样的命令就非常快了,只会拷贝修改的文件,具体其它骚操作可以看这里Linux文件同步工具-rsync[2]或者直接man一下手册。
关于lsync的原理下面直接引用大佬的发言[1],本文主要参考的就是这篇了
Lysncd 实际上是lua语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过rsync去差异同步,达到实时的效果。我认为它最令人称道的特性是,完美解决了
inotify + rsync
海量文件同步带来的文件频繁发送文件列表的问题 —— 通过时间延迟或累计触发事件次数实现。另外,它的配置方式很简单,lua本身就是一种配置语言,可读性非常强。lsyncd也有多种工作模式可以选择,本地目录cp,本地目录rsync,远程目录rsyncssh。
作为arch系,aur里怎么可能没有包,一顿yay -Sy lsyncd
搞定。(yaourt已经过时啦赶紧yay用起来)
这个包最骚的是它丫竟然没有给默认配置,我:???
还好文档还是有的,感谢大佬[1]做了大部分翻译工作,欢迎直接参考,这边只说几个大佬网站上没讲的部分。
安好了之后并没有任何指导,但你知道它是个daemon,所以问题不大,vim /usr/lib/systemd/system/lsyncd.service
,就能看到它的daemon的配置文件
(这里面注释的是我自己写后来删掉了,其余的应该和刚装好没什么区别。)
红线备注出来的部分便是配置文件了,当然你打开这个目录的时候会发现它并没有目录,也没有给默认配置,这就需要配置文件了,具体的规则在大佬的博客[1]里写得很清楚了,他是把原本的官方文档[4]翻译了一波。
这里我对着我自己的配置简单说一下要注意的地方
settings {
nodaemon=false,
maxProcesses=4
}
sync {
default.rsync,
source="/home/core",
target="/run/media/core/Home-Bak/core",
delay=4000,
delete="startup",
excludeFrom="/home/core/.config/lsyncd.exclude",
rsync={
binary="/usr/bin/rsync",
archive=true,
compress=false,
verbose=false
}
}
sync {
default.rsync,
source="/run/media/core/Data-2.5",
target="/run/media/core/Data-3.5/Data-2.5",
delay=7000,
delete="startup",
rsync={
binary="/usr/bin/rsync",
archive=true,
compress=false,
verbose=false
}
}
把配置文件写好了之后sudo systemctl start lsyncd.service
就能使用啦。
加入开机启动列表:sudo systemctl enable lsyncd.service
对于kde平台,在系统设置-开机和关机-后台服务
里先启用自动挂载服务
然后在系统设置-可移动设备
里有一个自动挂载配置,会有一个挂载选项,根据需求选择登录时挂载/连接时挂载即可。
其它桌面平台应该都有类似的设置,靠你们自己找咯,反正我第一个接触的桌面平台就是manjaro-kde嘿嘿嘿
但是这里还没有结束,因为你会发现设备的自动挂载是在sddm那个界面输入了密码之后才进行的,而使用sudo systemctl enable lsyncd.service
会让它在这之前就启动服务。
所以这里需要disable掉lsyncd这个服务:sudo systemctl disable lsyncd.service
,然后让每次输入完密码之后start服务。
具体做法是,系统设置-开机和关机-自启动
有个添加脚本,事先写好一个可执行的脚本就好啦,然后添加进来就好啦。(我后来把ss和aria2cd都放这里面了,感觉登录之后再启动的逻辑更好一点(毕竟属于用户自定义的启动进程嘛)
最后一句,如果你的sudo需要输入密码的话这个部分就不好使了,自己visudo让sudo命令执行特定指令不需要密码吧。
试试就知道了,这个daemon的状态会fail,重新连接设备并且挂载之后sudo systemctl restart lsyncd.service
即可。
对于笔记本来说,其实开机自启动并不够友善,而且在使用电池或者没有备份的设备(移动硬盘)没有连接到电脑时很尴尬。前者会增加耗电量,降低续航,后者则会导致服务会fail。这里还是以kde plasma平台为例讲一下我的做法。
其实原理很简单,写好特定的脚本,在交流电和电池切换的时候触发执行即可。
首先kde plasma桌面在系统设置-开机和关机-自动启动
有一个开机自启动管理,要做的事情很简单
[1] lsyncd实时同步搭建指南——取代rsync+inotify
[2] Linux文件同步工具-rsync
[3] lsyncd github
[4] 官方配置文档