两台linux机器之间自动文件传输

两台linux机器之间自动文件传输

你好,我有两台linux机器。服务器 A (LUbuntu) 和服务器 B (Raspbian)。我想要做的是让服务器 A 从服务器 B 检查特定目录(安装在 A 上的 NFS),如果有任何文件将它们传输到服务器 A 上的某个位置。理想情况下,传输后,B 上的所有传输文件都会被删除。请注意,我不想同步 A 和 B,并且我不想从 A--->B 进行任何传输,而只希望从 B--->A 进行传输。另外理想情况下,我不想传输重复的文件,而只是删除它们。

在没有太多脚本的情况下实现这一目标的最佳方法是什么?由于A并非一直在线,因此恢复文件传输很重要。

是否有任何现有软件可以执行此操作,或者我必须自己编写所有脚本。

谢谢

答案1

该方案的基本缺陷是主机 B 无法知道何时可以安全地复制文件。如果 A 正在向 NFS 共享目录写入一个文件,而主机 B 在该文件完全写入之前就获取了该文件,该怎么办?主机 B 将复制部分文件,如果该(部分)复制成功,它将删除该文件全部的文件,包括它没有复制的部分,因为主机A还没有写完。

也就是说,这似乎是一个相当简单的rsync.阅读该man页面,特别是--partial选项,也许是--checksum选项,并且特别是有关部分的警告 --remove-source-files选项。建议使用文件名的解决方法,例如*.new当主机 A 写入要由主机 B 复制的文件时,然后将文件重命名.new为其应有的名称,可能适合您。在单个文件系统内重命名通常是一个原子操作,因此主机 B 必须要有耐心并忽略任何 *.new 文件。一旦它们被重命名,主机 B 将在下次cron作业运行时转移它们。

答案2

我会建议快照

它是一个 Perl 基本脚本,脚本已经为您完成,只需编辑其/usr/local/etc/rsnapshot.conf文件并指定来源目的地对于副本。

然后你跑/usr/local/bin/rsnapshot 我认为可执行文件被放置的地方

自动运行:crontab -e并执行类似的操作

0 12 * * *   /usr/local/bin/rsnapshot daily

crontab 语法是:

minute   hour   day_of_month   month   day_of_week

根据我的 crontab 语法,将在每天中午 12:00 运行指定的任何内容

0 22 * * 2  /usr/local/bin/rnsapshot daily   # will run at 8:00pm only every Monday

阅读有关 rsnapshot perl 脚本的每日输入参数的 rsnapshot 说明

rsnapshot 可以在任何内容之间进行复制,前提是您设置了所需的所有内容 [说明中所述]

相关内容