有时,我必须对服务器上的数据文件执行几次大型迁移更改,我正在寻找一种好方法来执行此操作。我正在考虑使用 rsync 从根数据文件夹开始复制我的目录结构,创建指向所有原始文件的硬链接(其中一些文件相当大),并且我可以在目标树中仅覆盖需要迁移的文件。最后,我可以通过两次mv操作安全地从旧文件切换到新文件。
但是,我似乎无法让 rsync 做到这一点。我试过
rsync -a --link-dest=$DATA $DATA $DATA/../upgrade_tmp
Run Code Online (Sandbox Code Playgroud)
但 rsync 不是创建文件的硬链接,而是完全复制它们。使用相同的源和链接目标目录是否有问题?
我有三个 windows box,它们以各种方式连接到我网络上的 linux box(一个是网络本地的,一个是笔记本电脑,可能是也可能不是本地的,另一个是我的工作台式机)。我目前正在使用 git 在盒子之间同步我的大部分东西(使用 Linux 盒子作为服务器)并且它像冠军一样工作。
但是,现在我还想添加我的 MP3 收藏(12 场),以便在盒子之间有效地同步。我最初认为我可以为此使用 git,但看起来 rsync 是更好的选择,因为我并不真正需要所有历史资料。由于我现有的所有管理脚本都在 git bash(而不是 cygwin)下运行,我希望能够从 git bash 使用它(MINGW32 是窗口标题栏中的内容)。我可以在 Cygwin 中下载它并复制它,还是有更好的方法来处理它?Linux 机器正在运行最新版本的 Ubuntu Server 版本 - 我是否需要对其进行任何操作才能使 rsync 正常工作?
我意识到我这样做的方式可能比需要的要困难一些,但我也将其用作提高我的命令行技能的练习。有什么建议?
我可以从 cygwin shell 使用 rsync,但不能从 msysgit 使用。我尝试将 rsync.exe 从 cygwin 的 bin 文件夹复制到 msysgit 的 bin 文件夹,但它仍然没有找到它。我还需要执行其他步骤才能在那里安装它吗?奇怪的是,我收到了一个找不到文件的错误,而不是给我一个文件的依赖项之一丢失的错误。
我有一个运行 FreeNAS 8 的家庭文件服务器。几天前,我使用 rsync 从 Mac 上传我的整个 iTunes 库,以便我可以通过网络加载我的库,而不是从慢速 USB 驱动器上加载。这基本上有效,现在 iTunes 运行得更好,但我在访问任何包含非 ascii 字符的歌曲时遇到问题(我在加载 Queensrÿche 曲目时第一次注意到这个问题)。这些文件会显示在 Finder 中,但任何访问它们的尝试都会使它们消失,直到我重新连接到服务器。
经过一番研究,我发现这是因为 OSX 使用与 Linux 不同的 UTF 字符顺序。OSX 文件系统使用 Unicode Normalization Form D (NFD),而 linux 使用 Form C (NFC)。Rsync 在执行从我的 mac 到服务器的复制时不会转换这些形式,现在当 iTunes 尝试通过网络访问具有特殊字符的文件时,服务器上的文件的编码错误并且 afpd 报告它们没有存在。
解决这个问题的最佳方法是什么?是否可以在将基本库上传到服务器时让 rsync 执行 unicode 转换?我可以将 afpd 配置为以 NFD 格式传输/接收文件名吗?有没有简单的解决方案来更改服务器上的文件名?我发现了一些关于名为 convmv 的程序的内容,但我不知道是否可以在 FreeNAS 上运行它。
在我工作的一家公司,我们有一种叫做“播放列表”的东西,它是每个约 100-300 字节的小文件。他们大约有一百万。其中每小时大约有 100,000 次更换。这些播放列表需要每小时上传到不同大陆的 10 个其他远程服务器,理想情况下需要在 2 分钟内快速上传。在 master 上删除的文件也会在所有副本上删除,这一点非常重要。我们目前使用 Linux 作为我们的基础设施。
我正在考虑尝试使用 -W 选项进行 rsync 复制整个文件而不比较内容。我还没有尝试过,但也许对 rsync 有更多经验的人可以告诉我这是否是一个可行的选择?
还有哪些值得考虑的选择?
更新:我选择了 lsyncd 选项作为答案,但这只是因为它是最受欢迎的。其他建议的替代方案也以它们自己的方式有效。
是否有一个命令,例如 rsync,可以将巨大的、稀疏的文件从一个 linux 服务器同步到另一个?
目标文件保持稀疏非常重要。它可能比包含它的驱动器更长(但不会更大)。只应通过线路发送更改的块。
我试过 rsync,但没有任何乐趣。https://groups.google.com/forum/#!topic/mailing.unix.rsync/lPOScZgFE9M
如果我编写一个程序来做到这一点,我只是在重新发明轮子吗? http://www.finalcog.com/synchronise-block-devices
谢谢,
克里斯。
我正在尝试将随时间变化的目录镜像到另一个目录。我的问题是 rsync 不会删除目标上的文件,如果它们不再存在于源目录中。这是一个演示脚本:
#!/bin/sh
set -x
DIR1=/tmp/1
DIR2=/tmp/2
rm -rf $DIR1
rm -rf $DIR2
mkdir $DIR1
mkdir $DIR2
echo "foo" > $DIR1/a
echo "bar" > $DIR1/b
rsync -a $DIR1/* $DIR2
rm -f $DIR1/a
rsync -a --delete $DIR1/* $DIR2
ls -1 $DIR2
Run Code Online (Sandbox Code Playgroud)
这是输出:
+ DIR1=/tmp/1
+ DIR2=/tmp/2
+ rm -rf /tmp/1
+ rm -rf /tmp/2
+ mkdir /tmp/1
+ mkdir /tmp/2
+ echo foo
+ echo bar
+ rsync -a /tmp/1/a /tmp/1/b /tmp/2
+ rm -f /tmp/1/a
+ rsync -a --delete …Run Code Online (Sandbox Code Playgroud) 是否可以使用 rsync 仅向一个方向复制文件?
例如,假设我们有:
left/a.txt
right/a.txt
其中文件最初是相同的。
如果然后修改right/a.txt,则:
rsync -avv left/ right/
将复制right/a.txt到left/a.txt.
是否有可能限制rsync将仅复制left/到right/(即防止它从复制right/到left/)?
我正在使用以下 cron 语句从一个文件夹备份到同一台机器上的另一个文件夹:
19 21 * * * root rsync -ac --delete /source/folder /dest/folder
Run Code Online (Sandbox Code Playgroud)
我使用的时候pstree,看到cron fork了三个进程
??cron???cron???rsync???rsync???rsync
Run Code Online (Sandbox Code Playgroud)
和 ps
9972 ? Ds 1:00 rsync -ac --delete /source/folder /dest/folder
9973 ? S 0:29 rsync -ac --delete /source/folder /dest/folder
9974 ? S 0:09 rsync -ac --delete /source/folder /dest/folder
Run Code Online (Sandbox Code Playgroud)
为什么是三个进程?我可以限制只有一个吗?
我已经使用 rsync 和 cygwin 备份了 linux web 服务器。我现在在我的 Windows 笔记本电脑上有一个完美的服务器副本。如果我删除或修改笔记本电脑上的文件并再次使用 cygwin 运行 rsync 会删除/更新服务器上的相同文件吗?我的印象是,如果我在服务器上删除/修改并在我的笔记本电脑上运行 rsync 它将删除/修改我笔记本电脑上的本地文件,但这是否反过来工作?
从服务器复制时,我总是使用以下命令:
rsync --progress -avze ssh user@host:/path/to/files ./here
Run Code Online (Sandbox Code Playgroud)
然而,我的一个朋友告诉我,我可以简单地做:
rsync --progress -avz user@host:/path/to/files ./here
Run Code Online (Sandbox Code Playgroud)
所以问题是,如果你不需要-e ssh它为什么会在那里呢?