使用Lsyncd实时同步windows共享文件到NAS

最近换了新电脑Lenovo yoga 730, 用起来还不错。触屏的演示效果更是舒服,不再产生尴尬因为操作不到位,直接在屏幕上用手,跟平板无异。但是老板资金预算有限,只配了个512G的硬盘,三年的邮件和资料保存下来,也就没有多少空间可用了。想过用移动硬盘解决,但经常出差,带着不方便也不安全,硬盘经常撞击的话说不一定什么时候资料就没有了。还有一个问题就是yoga730只有一个USB接口,另外两个是雷电的,雷电的移动硬盘贵得很呢。那只有NAS是最好的解决的方案了。

NAS 有专业的公司制作主机和软件,专用NAS主机就不说了!自己有一台老主机,以前拿来打游戏的。不过也很老了: 奔腾G2020+B75技嘉主板+4G内存。当NAS用是完全没问题了。 另外找了两块500G旧硬盘用RAID0模式拼成一个盘,这个组合不是为了数据保存,主要是为了提高读写速度,另外是因为500G容量有点小,在数据分配上不方便。另外买一块新的60G SSD当系统盘。又买了块新的2T硬盘当作主力数据备份盘。总共4块硬盘,组成三个盘符。

系统选用及软件安装

接下来选NAS操作系统。我使用NAS主要是文件备份。

  • 能够从我目前使用的windows 10系统自动备份到NAS硬盘上。是自动,不是手动。
  • NAS内部硬盘之间能够自动同步。为什么会另外购置一块2T,就是希望作二次备份。可能计划再购置一块4T硬盘当线下备份。

根据网络资料评测来看,开源系统openmediavault最目前最好的选择。这套NAS系统主要是简洁,因为我不需要太复杂的功能和配置,它有最常用的功能:SSH, (S)FTP, SMB/CIFS, DAAP media server, RSync, BitTorrent client 。如果不够用,安装docker再进行功能扩展。功能太复杂了,暂进不提了,只能以后慢慢增加。

系统安装比较简单,这里主要记录一下需要用到的软件和软件配置 文件备份主力软件Lsyncd:全称是live syncing daemon,中文就是文件实时同步。所谓的实时就是当你在源文件盘上进行文件操作,所有动作产生的的文件内容变动在你修改完成后规定的时间内均会自动更新到指定的备份盘上,它可以监控文件删除,修改,移动,改名等。

Lsyncd有两种安装方式:

  • Openmediavault(OMV) 是以Debian为基础的Linux系统,已经整合了Lsyncd,不过目前版本为2.1.6 虽然官方上的最新版本。安装命令: apt-get install lsyncd -y 。这个是最快的安装方法,不用软件配置环境。
  • 另外一种,就是从官方 (http://axkibe.github.io/lsyncd/)上直接下载源安装包2.2.1,进行环境配置。因为是用lua语言写的,所以之前在虚拟机配置的时候出现了错误,后就直接改用上面的简单安装方式了。用起来没差别,不知道最新版本是不是性能上更好,后续跟进更新下。

Lsyncd必须是跟rsync一起工作的,OMV系统已经默认安装好了。但是如果是源码安装 lsyncd2.2.1必须要求rsync为3.1版本以上。Lsyncd的配置文件默认在/etc/lsyncd.conf. 直接打开编辑即可。

实时同步配置

第一步:将windows10的共享文件夹挂载到OMV系统中。首先需要把windows下准备要同步的文件的文件夹开放共享,权限方面是设置成只读就可以了。这样可以避免文件被误操作。

第二步:进入到OMV-插件-安装remote mount插件,也就是远程挂载插件。这个插件可以将远程主机上的共享目录挂载到OMV系统中,也就是将windows共享出来的文件夹挂载到OMV中。挂载细节如下图,一些参数如果不懂的话还是保持原样就行,除非你真的了解才去更改。

挂载成功后,在文件系统File Systems中你会看到被远程挂载过来的windows共享文件夹,状态栏Status显示online在线,表示挂载成功。

第三步:获取本地硬盘和windows共享文件夹被挂载后的具体位置。在OMV的文件file system中,windows共享文件夹在设备栏Device中显出来,但看不到本地硬盘被挂以位置,只能进入命令行才行。进入命令行后,输入:df -h 就会将所有被挂载的信息显示出来。

图片中红色框显示的信息才是我们要的。

  • /dev/md0 被挂载到了 /srv/dev-disk-by-label-files ; 后面会设置将windows共享文件夹的内容同步到这个硬盘上。
  • /dev/sda1 被挂载到了 /srv/dev-disk-by-label-docs;这是2T的文件备份盘,后面会设置将/dev/md0上的内容再同步到这个盘上。
  • //192.168.118.195/d, 这个就是windows共享文件夹,被挂载到/srv/8d6aec7f-bbfc-4bbd-9a1d-4132ce56983f,这个也就称为source源文件盘。

第四步:设置lsyncd的配置文件,lsyncd的配置文件位于/etc/lsyncd.conf,只要打开直接编辑就好。官主和网上的解释很多,这里主要记录下自己遇到的问题

  • source就是源文件盘,target就是文件要被同步到的目的地。
  • 我们要将windows共享文件夹的内容同步到OMV硬盘上,只需要将 source = "/srv/8d6aec7f-bbfc-4bbd-9a1d-4132ce56983f" 即可。
  • 在将windows共享文件夹的内容远程同步到OMV中,maxProcesses 不能设置过大,而且要限流_extra = {"--bwlimit=1000"}, 否则很容易将你的windows系统拖死。至于设置数字多大,根据自己的电脑配置而定,下面参考是我测试过刚刚好的。如果再大点,windows系统必死。
  • lsyncd的后台进程管理,因为要求lsyncd实时监控,必然要求lsyncd常驻后台运行,我是关掉daemon的,用supervisor来管理后台进程。这个可以根据自己的情况而定,也可写入systemctl来控制。
  • Lsyncd.conf配置文件中,sync可以配置多个实时同步,它们是互不干涉的,就像我将windows共享文件远程同步到OMV的NAS盘上,同时也在NAS的本地硬盘之间进行本地实时同步。
settings {
    logfile = "/tmp/lsyncd.log",
    statusFile = "/tmp/lsyncd.status",
    nodaemon = true,
    insist = true,
    inotifyMode = "CloseWrite or Modify",
    maxProcesses = 10,
}
sync {
    default.rsync,
    source = "/srv/dev-disk-by-label-files",
    target = "/srv/dev-disk-by-label-docs",
    delay = 60,
    excludeFrom = "/etc/rsyncd_exclude_files.lst",
    rsync = {
        binary = "/usr/bin/rsync",
        archive = true,
        verbose = true
    }
}
sync {
    default.rsync,
    source = "/srv/8d6aec7f-bbfc-4bbd-9a1d-4132ce56983f",
    target = "/srv/dev-disk-by-label-files",
    delay = 60,
    maxProcesses = 5,
    excludeFrom = "/etc/rsyncd_exclude_yoga730.lst",
    rsync = {
        binary = "/usr/bin/rsync",
        archive = true,
        verbose = true,
        _extra = {"--bwlimit=1000"}
    }
}

到目前为止,所有配置已经完成了,启动lsyncd,如果是第一次同步,就会看到同步已经自己开始了。你在windows共享文件夹下的修改都会被实时远程同步到NAS系统盘上。

Previous/Next

Say Something!

Leave a Reply