在我的 Linux 机器中,我有两个目录:
我只需要同步权限而不更改文件内容。我尝试了 rsync,但找不到合适的选项。你能给我一些建议吗?
提前致谢。
编辑
感谢您的建议,我有了这个脚本。它递归地更改子树权限:
#!/bin/bash
cd good
find $1/* | while read DIR
do
chown --reference="$DIR" "/bad/$DIR"
chmod --reference="$DIR" "/bad/$DIR"
done
Run Code Online (Sandbox Code Playgroud)
不是杰作,但对我有用。
我在通过某些 rsync 模块提供服务时遇到问题 rsync --daemon
这些行来自我的 /var/log/rsyncd.log 文件:
2013/02/08 12:15:28 [13174] name lookup failed for XXX.XXX.XXX.XXX: Name or service not known
2013/02/08 12:15:28 [13174] connect from UNKNOWN (XXX.XXX.XXX.XXX)
Run Code Online (Sandbox Code Playgroud)
从 rsyncd.conf 手册页:
反向查找
控制守护进程是否对客户端的 IP 地址执行反向查找以确定其主机名,用于“主机允许”/“主机拒绝”检查和“%h”日志转义。这是默认启用的,但如果您知道查找不会返回有用的结果,您可能希望禁用它以节省时间,在这种情况下,守护程序将使用名称“UNDETERMINED”代替。
如果全局启用此参数(即使在默认情况下),rsync 会在客户端连接后立即执行查找,因此为模块禁用它不会避免查找。因此,您可能希望全局禁用它,然后为需要该信息的模块启用它。
所以我将以下行添加到 /etc/rsyncd.conf 中的全局 conf
reverse lookup = no
Run Code Online (Sandbox Code Playgroud)
但是,当我停止并启动守护程序时,将这一行添加到日志文件中:
2013/02/08 12:47:17 [13675] Unknown Parameter encountered: "reverse lookup"
2013/02/08 12:47:17 [13675] IGNORING unknown parameter "reverse lookup"
2013/02/08 12:47:17 [13676] rsyncd version 3.0.7 starting, listening on port 873
Run Code Online (Sandbox Code Playgroud)
这是我服务器上安装的版本:
rsync 版本 3.0.7 协议版本 30
我在 Debian 的 root 的 crontab 中使用以下命令。
rsync -vqrlHEAXogDtzhi --log-file=${LOG} --progress --rsync-path="sudo /usr/bin/rsync" --exclude-from=$CONFIG_DIR/excludes -e "ssh -i /home/backups/.ssh/id_rsa" backups@${HOSTNAME}:/ ${BACKUP_DIR}
Run Code Online (Sandbox Code Playgroud)
我得到以下信息:
sudo: no tty present and no askpass program specified
Run Code Online (Sandbox Code Playgroud)
我尝试将 -t 添加到 ssh 命令中,我得到:
Pseudo-terminal will not be allocated because stdin is not a terminal.
Run Code Online (Sandbox Code Playgroud)
我尝试将 -t -t 添加到 ssh 命令中,我得到:
protocol version mismatch -- is your shell clean?
Run Code Online (Sandbox Code Playgroud)
我已经向远程设备上的备份用户添加了一个 .hushlogin 文件,并确认我可以使用远程设备的密钥 ssh 作为备份而没有显示任何内容(登录被隐藏)。我仍然收到这些消息。
请注意,我可以成功地使用密钥 ssh 作为远程设备的备份。
请注意,我的 sudo 没有 -tt 选项。
请注意,以下是在源和目标的 /etc/sudoers 文件中设置的:
backups ALL= NOPASSWD:/usr/bin/rsync
Run Code Online (Sandbox Code Playgroud)
请注意,我的 …
我有一个每小时运行的 cronjob,除非出现问题,否则完全沉默。嗯……差不多……
工作的一部分是
rsync --del -Cacqrz public/. user@host.example.com:/target/path
Run Code Online (Sandbox Code Playgroud)
这总是打印“登录”。我怎样才能让它停止?('grep -v' 的缩写;-)
如果我执行以下操作,则不会收到“已登录”消息
ssh user@host.example.com ls
Run Code Online (Sandbox Code Playgroud)
传输当然是 ssh(使用密钥)。
源主机是 OSX 或 Ubuntu(两者都试过,行为相同)。目标主机是某种风格的 Linux。
我在 ssh 会话中运行一个rsync命令nohup,但过了一会儿它返回这个错误:
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(549) [generator=3.0.9]
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(549) [receiver=3.0.9]
Run Code Online (Sandbox Code Playgroud)
我没有自己杀死这个进程,我认为没有任何其他进程可以杀死这个进程。我也用nohup. 我使用nohup是因为 ssh 会话因任何原因终止,rsync进程不会终止。
什么导致终止?
操作系统是 Debian Wheezy。
假设我有 100 万个文件,文件列表大概是 20MB。如果我只添加一个文件,inotify会告诉rsync传输文件列表和新文件。我的网络不好,我可能不得不限制带宽 ( --bwlimit)。
可能会一次添加多个文件,并且鉴于网络传输速度,可能会同时运行多个 rsync。
这值得么?有没有更好的办法?
我想将文件夹从一台服务器同步到另一台服务器。
但是 rsync 同步失败:
$ rsync -zr --compress-level=9 --delete /var/www/mywebsite/current/web/js login@192.168.1.4:/srv/data2_http
rsync: write failed on "/srv/data2_http/js/8814c77.js": No space left on device (28)
rsync error: error in file IO (code 11) at receiver.c(322) [receiver=3.0.9]
rsync: connection unexpectedly closed (21747 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
Run Code Online (Sandbox Code Playgroud)
但我有足够的空间!
$ du -h /var/www/mywebsite/current/web/js
2.4M /var/www/mywebsite/current/web/js
df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 5.0G 3.0G 1.8G 64% /
/dev/root 5.0G …Run Code Online (Sandbox Code Playgroud) 在将一些文件从本地文件夹传输到 NFS 文件夹后,Rsync 将进入“可中断睡眠”模式。我尝试备份的文件夹包含超过 180GB 的数据。
这是 rsync 在挂起之前输出的内容:
[sender] expand file_list pointer array to 524288 bytes, did move
Run Code Online (Sandbox Code Playgroud)
我正在使用 rsync 版本 3.1.0 协议版本 31 运行 Ubuntu Server 14.04 LTS,并且使用以下选项运行 rsync:
/usr/bin/rsync -rHAXxvvut --numeric-ids --progress {SRC_FOLDER} {NFS_FOLDER}
Run Code Online (Sandbox Code Playgroud)
感谢您的任何提示
我正在尝试通过在两台服务器上停止 Mongo 然后运行以下命令来在生产服务器和开发环境之间镜像大型 Mongo 数据库:
rsync --archive --delete --recursive --verbose --compress --rsh "ssh -t -o StrictHostKeyChecking=no -i key.pem" remoteuser@remotehost:/var/lib/mongodb/ /var/lib/mongodb
Run Code Online (Sandbox Code Playgroud)
它运行良好几分钟,但随后因错误而停止:
receiving incremental file list
./
collection-228--5129329295041693519.wt
inflate returned -3 (0 bytes)
rsync error: error in rsync protocol data stream (code 12) at token.c(557) [receiver=3.1.1]
rsync: [generator] write error: Broken pipe (32)
rsync error: error in socket IO (code 10) at io.c(820) [generator=3.1.1]
Run Code Online (Sandbox Code Playgroud)
谷歌搜索错误表明这是某种网络连接问题,但我能够很好地连接到两台服务器。
如果我重新运行该命令,它会在完全相同的文件处失败并显示相同的错误消息。是什么原因导致此错误以及如何修复它?
我们在远程服务器上有大量文件,我想定期备份到本地系统以获得额外的冗余。一些细节:
相似:
0123456789/
0123456
abc/
1.fff
2.fff
3.fff
xyz/
9.fff
8.fff
7.fff
9877656578/
5674563
abc/
1.fff
2.fff
3.fff
xyz/
9.fff
8.fff
7.fff
Run Code Online (Sandbox Code Playgroud)
成千上万的根文件夹仅包含一些内部文件夹/文件结构 - 但所有根文件夹都是数字(0-9)。
我rsync -aP第一次用直线跑了,结果花了3196m20.040s. 部分原因是因为远程服务器在rsync2.6.6 上,我无法使用 3.xx 中的增量文件功能。编译文件列表需要将近 12 个小时 - 每 10 秒运行大约 500 个文件。我不认为后续运行会花费这么长时间,因为初始运行必须重新下载所有内容 - 然而,即使 12 小时仅用于文件列表也太长了。
文件夹命名分解如下:
$ ls | grep "^[^67]" | wc -l …Run Code Online (Sandbox Code Playgroud) rsync ×10
linux ×4
ssh ×3
debian ×2
backup ×1
filesystems ×1
inotify ×1
mongodb ×1
nfs ×1
nohup ×1
performance ×1
reverse-dns ×1
sudo ×1
ubuntu ×1
ubuntu-14.04 ×1