如何在Linux中同步本地和远程目录

本教程描述了如何使用Lsyncd(实时同步守护程序)在Linux上同步本地和远程目录。 使用Lsyncd,我们可以轻松地镜像本地目录和远程目录。 如果要在经常用新内容更新的目录之间同步数据,这将非常有用。 同步 设计用于将本地目录树与预期的更改较低的配置文件同步到远程镜像。 这对于将数据从受保护区域同步到不太安全的位置特别有用。

使用Lsyncd在Linux中同步本地和远程目录

安装Lsyncd

在Debian和类似Ubuntu,Linux Mint的衍生产品上,运行以下命令以安装Lsyncd:

sudo apt-get install lsyncd

在RHEL,CentOS上,您需要首先启用EPEL存储库。

sudo yum install epel-release

然后安装 同步 使用命令:

sudo yum install lsyncd

Debian和Ubuntu及其衍生产品上的Lsyncd配置

Lsyncd在基于DEB的系统上不提供默认配置文件。 我们需要手动创建它。 但是,Lsyncd包含一些示例配置文件,这些文件对于了解如何进行同步的总体思路很有用。 配置示例文件可在目录下找到 “ / Usr / share / doc / lsyncd-* /示例”

ls /usr/share/doc/lsyncd/examples/

输出示例:

lbash.lua lgforce.lua lpostcmd.lua lrsyncssh.lua
lecho.lua limagemagic.lua lrsync.lua

如您在上面的输出中看到的,每个配置文件都带有.lua扩展名。 这是因为lsync配置文件是使用Lua编程语言编写的。 让我们看一个样本配置文件。

cat /usr/share/doc/lsyncd/examples/lrsync.lua

Lrsync配置文件如下所示:

----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync.
--
settings = {
 statusFile = "/tmp/lsyncd.stat",
 statusInterval = 1,
}

sync{
 default.rsync,
 source="src",
 target="trg",
}

RHEL和CentOS上的Lsyncd配置

在RHEL和CentOS系统上,将自动创建Lsyncd配置文件。 您可以使用以下命令查看此文件的内容:

cat /etc/lsyncd.conf

并且,在以下位置提供了示例配置文件。

ls /usr/share/doc/lsyncd-2.1.5/examples/

在Debian,Ubuntu上同步本地目录

现在,我们将同步两个本地目录。

让我们创建两个包含一些内容的目录,例如:

sudo mkdir source_dir
sudo mkdir dest_dir

让我们在source_dir目录中创建随机文件:

sudo touch source_dir/file{1..10}

(可选)您可以为Lysyncd创建多个日志文件。 这只是可选的。 如果您不想使用日志文件,请跳过此步骤。

sudo mkdir /var/log/lsyncd
sudo touch /var/log/lsyncd/lsyncd.{log,status}

然后为Lsyncd创建一个配置文件:

sudo mkdir /etc/lsyncd
sudo nano /etc/lsyncd/lsyncd.conf.lua

编辑/更改以下行:

settings {
        logfile = "/var/log/lsyncd/lsyncd.log",
        statusFile = "/var/log/lsyncd/lsyncd.status"
}

sync {
        default.rsync,
        source = "/home/sk/source_dir",
        target = "/home/sk/dest_dir",
}

用您自己的值替换路径中的源目录和目标目录。 保存并关闭文件。

使用以下命令启用,启动或重新启动Lsyncd服务:

sudo systemctl enable lsyncd
sudo systemctl restart lsyncd

现在,检查source_dir和dest_dir目录的内容。

ls source_dir/

输出示例:

file1 file10 file2 file3 file4 file5 file6 file7 file8 file9

检查dest_dir目录的内容:

ls dest_dir/

输出示例:

file1 file10 file2 file3 file4 file5 file6 file7 file8 file9

请记住,我们仅在source_dir目录中创建文件,并且该目录的内容自动与dest_dir目录同步。

此外,您可以查看日志文件以检查复制是否已完成。

tail -10 /var/log/lsyncd/lsyncd.log

输出示例:

Sat Apr 15 13:14:12 2017 Normal: recursive startup rsync: /home/sk/source_dir/ -> /home/sk/dest_dir/
Sat Apr 15 13:14:12 2017 Normal: Startup of "/home/sk/source_dir/" finished.

检查Lsyncd状态文件:

more /var/log/lsyncd/lsyncd.status

输出示例:

Lsyncd status report at Sat Apr 15 13:14:12 2017

Sync1 source=/home/sk/source_dir/
There are 0 delays
Excluding:
 nothing.


Inotify watching 1 directories
 1: /home/sk/source_dir/

在RHEL,CentOS上同步本地目录

编辑Lsyncd配置文件:

sudo nano /etc/lsyncd.conf

编辑并更改以下几行:

----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync, but executing moves through on the target.
--
-- For more examples, see /usr/share/doc/lsyncd*/examples/
-- 
settings {
 logfile = "/var/log/lsyncd.log",
 statusFile = "/var/log/lsyncd.status"
}

sync {
 default.rsync,
 source = "/root/source_dir",
 target = "/root/dest_dir",

用您自己的值替换源路径和目标路径。 保存并关闭文件。

使用以下命令启用并启动Lsyncd服务:

sudo systemctl enable lsyncd
sudo systemctl start lsyncd

现在,检查source_dir和dest_dir目录的内容。

Ls source_dir /

输出示例:

file10 file1 file2 file3 file4 file5 file6 file7 file8 file9

检查dest_dir目录的内容:

Ls dest_dir /

输出示例:

file10 file1 file2 file3 file4 file5 file6 file7 file8 file9

优秀! source_dir的内容已成功与dest_dir目录同步。

此外,您可以查看日志文件以检查复制是否已完成。

tail -10 /var/log/lsyncd.log

检查Lsyncd状态文件:

more /var/log/lsyncd.status

在Debian,Ubuntu系统上同步远程目录

我们需要为SSH设置登录名和密码。 这是因为Lsyncd无需用户干预即可自动将本地目录的内容复制到远程目录。

sudo su
ssh-keygen -t rsa

不要输入密码。 只需按ENTER接受默认值。

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/home/sk/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:dHc2aKk5F2wBq7CIc5sVHJwYNjoPdwgxDKb1KuBBkgs [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|o*=.++.. ... |
|E..*.+o. o + |
|+o+ + = . o O + |
|+ .B o = o * + . |
|..+ + o S + . |
| . o + o |
| o |
| |
| |
+----[SHA256]-----+

现在,将SSH公钥复制到您的远程系统:

ssh-copy-id [email protected]

输出示例:

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.10.150 (192.168.10.150)' can't be established.
ECDSA key fingerprint is SHA256:U7I0O1OOzzbHFlhIG0HoGDr1usHzLBju6Jmr6bUB9Es.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password: 

Number of key(s) added: 1

Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

192.168.10.150是远程系统的IP地址。

现在,您无需输入密码就可以通过SSH进入远程系统:

ssh [email protected]

使用以下命令在远程系统上创建目标目录:

mkdir remotesync

注销远程系统:

exit

然后在源计算机上编辑Lsyncd配置文件:

sudo nano /etc/lsyncd/lsyncd.conf.lua

编辑/更改以下行:

settings {
 logfile = "/var/log/lsyncd/lsyncd.log",
 statusFile = "/var/log/lsyncd/lsyncd.status"
}

sync {
 default.rsync,
 source = "/home/sk/source_dir",
 host = "192.168.10.150",
 targetdir = "/root/remotesync",
}

192.168.10.150是我的远程主机的IP地址。 并且,目标目录在我的远程系统上是/ root / remotesync /。 用您自己的值替换。 保存并关闭文件。

重新启动Lsyncd服务,以开始将源目录的内容复制到目标。

sudo systemctl restart lsyncd

现在,SSH进入您的远程系统:

SSH [email protected]

并且,检查目标目录的内容(在本例中为/ root / remotesync /)。 您将看到本地系统源目录中的所有文件都已播放到目标系统上的目标目录中。

[email protected] ~]# ls remotesync/
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9

对于RHEL和CentOS系统,此过程相同。 设置无密码的SSH登录名,并确保您在RHEL或CentOS系统上的主Lsyncd配置文件(/etc/lsyncd.conf)中更改了正确的源路径和目标路径,其余步骤相同。

现在您知道了如何使用Lsyncd在Linux上同步本地和远程目录。 如您所见,这是一种非常简单明了的方法。

资源:

Sidebar