我创建了一个批处理脚本来备份我们的服务器:
#!/bin/bash
user=$1
# create user dir
ssh root@local.backup.tst -p 5774 mkdir -p /var/backup/server.tst/incremental/$user
# backup mail dir
rsync -rvz --del --rsh='ssh -p5774' /home/$user/imap root@local.backup.tst:/var/backup/server.tst/incremental/$user
cd /home/$user/domains
ls -1 | while read -r domain
do
sh /etc/pxl/backup/domain.sh $user $domain
done
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时sh script.sh username它挂起。
首先我得到了sending incremental file list,然后就不再回应了。当我按 ctrl-C (中止脚本)时,输出会发生变化:
sync error: unexplained error (code 130) at rsync.c(543) [sender=3.0.7]
sending incremental file list
public_html/gh.html
public_html/index.php
public_html/cgi-bin/.htaccess
public_html/... (and so on)
Run Code Online (Sandbox Code Playgroud)
..但又挂起。当我再次按 ctrl-C 时,我得到:
rsync error: received SIGINT, …Run Code Online (Sandbox Code Playgroud) 我的应用程序使用 rsync 将文件从网络驱动程序复制到本地作为缓存以提高性能。
但由于我的应用程序可能是并行运行的,因此 rsync 也是如此,并且可能存在 2 个rsync实例针对同一源和目录并行运行的情况。
我遇到了一个问题,即目标位置未完全同步(将一个子目录留空)。所以我怀疑这是rsync的问题,所以
我正在使用的选项是:
rsync -a --copy-unsafe-links --delete
Run Code Online (Sandbox Code Playgroud) 通过 rsync 通过非常糟糕的连接传输文件时遇到问题(我正在尝试在云服务器上上传文件)。
rsync 在大约一分钟左右后基本上挂起。这是我尝试执行上传的方式:
rsync -avz --progress -e "ssh" ~/target.war root@my-remote-server:~/
Run Code Online (Sandbox Code Playgroud)
没有错误消息或其他信息。它只是挂起显示类似以下内容:
7307264 14% 92.47kB/s 0:07:59
Run Code Online (Sandbox Code Playgroud)
据我所知,Ping 远程端点似乎没有丢失包。
我的本地机器是 Mac。
任何有关如何克服这个问题的帮助都会很好。谢谢。
我通过 Ansible 的同步模块使用 rsync和以下任务定义:
synchronize: src='{{ local_app_path }}/.' dest='{{ remote_app_path }}/' perms=no owner=yes rsync_opts=--delete-after
Run Code Online (Sandbox Code Playgroud)
运行此任务会生成以下命令:
rsync --delay-updates -FF --compress --archive --no-perms --rsh 'ssh -S none -o StrictHostKeyChecking=no' --rsync-path="sudo rsync" --delete-after --out-format='<<CHANGED>>%i %n%L' "../src/." "vagrant@192.168.55.55:/var/www/app/"
Run Code Online (Sandbox Code Playgroud)
我的目录布局是这样的:
src/
# ...
app/
test/
node_modules/
package.json
provisioning/
# ...
playbook.yml
.rsync-filter
Run Code Online (Sandbox Code Playgroud)
这是我的 .rsync 过滤器:
exclude /src/.env
exclude /src/node_modules
Run Code Online (Sandbox Code Playgroud)
现在我期望运行我的同步任务并在服务器上生成的目录结构如下所示(注意丢失的node_modules文件夹):
app/
test/
package.json
Run Code Online (Sandbox Code Playgroud)
这有效。但是,一旦我node_modules在服务器上创建了一个文件夹......
app/
test/
node_modules/
package.json
Run Code Online (Sandbox Code Playgroud)
...并再次运行同步,该node_modules文件夹再次从服务器中删除(即使我已将其排除在 .rsync-filter 中):
app/
test/
package.json
Run Code Online (Sandbox Code Playgroud)
我希望 -node_modules …
我发现rsync总进度(在某种程度上)用 来显示--info=progress2,而部分进度(即当前文件)用--info=progress(或-P)来显示。
有没有办法同时显示两者?
我已经尝试过类似的方法
rsync -avP --info=progress --info=progress2 --progress src dst,但这仅显示了总体进展。
我正在运行 Ubuntu 14.04.2,rsync 版本 3.1.0 协议版本 31
当直接从我的机器运行时,以下任务工作正常。当我通过 SSH 从远程计算机运行它时,它永远挂起。
这是任务:
- name: deploy public directory
synchronize: src="{{ my_root_path }}/.deploy/office/public/" dest="{{ my_root_path}}/office/public/" compress=no checksum=yes delete=yes recursive=yes times=yes links=yes archive=no rsync_opts=--no-motd,--exclude=.gitignore
delegate_to: "{{ inventory_hostname }}"
Run Code Online (Sandbox Code Playgroud)
这是挂起之前的输出:
<88.81.184.149> ESTABLISH CONNECTION FOR USER: root
<88.81.184.149> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/root/.ansible/cp/ansible-ssh-%h-%p-%r" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 88.81.184.149 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1440505364.9-19277754718304 && echo $HOME/.ansible/tmp/ansible-tmp-1440505364.9-19277754718304'
<88.81.184.149> PUT /tmp/tmpr44yYm TO /root/.ansible/tmp/ansible-tmp-1440505364.9-19277754718304/synchronize
<88.81.184.149> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/root/.ansible/cp/ansible-ssh-%h-%p-%r" …Run Code Online (Sandbox Code Playgroud) 我正在尝试将目录树从 OS X (10.11) 同步到 Ubuntu 14.04。虽然大多数文件都可以正常传输,但名称以_(下划线)开头的文件却不能。
这是我使用的命令:
rsync -rtvh --progress ~/Pictures/processed/ ~/mnt/processed/
Run Code Online (Sandbox Code Playgroud)
以及输出的示例:
sending incremental file list
_MG_7425.jpg
4.66M 100% 169.79MB/s 0:00:00 (xfr#1, to-chk=58/60)
_MG_7427.jpg
6.59M 100% 103.07MB/s 0:00:00 (xfr#2, to-chk=57/60)
...
rsync: mkstemp "/Users/user/mnt/processed/._MG_7425.jpg.0cAYb3" failed: No such file or directory (2)
rsync: mkstemp "/Users/user/mnt/processed/._MG_7427.jpg.5Gw1vD" failed: No such file or directory (2)
sent 306.24M bytes received 9.46K bytes 122.50M bytes/sec
total size is 306.17M speedup is 1.00
rsync error: some files/attrs were not transferred (see previous errors) …Run Code Online (Sandbox Code Playgroud) 我有一个外部 USB 驱动器,我将其插入 Linux NAS。我想保持特定文件夹同步,因此对 NAS 上 FolderA 中文件的更改会应用于 USB 驱动器上的 FolderA,反之亦然。
合适的解决方案是运行 rsync 命令两次,即一次将 NAS 同步到 USB,然后再次将 USB 同步到 NAS,例如如下:
# sync NAS to USB
rsync -av --stats /share/FolderA/ /share/USBDisk1/FolderA/
# sync USB to NAS
rsync -av --stats /share/USBDisk1/FolderA/ /share/FolderA/
Run Code Online (Sandbox Code Playgroud)
我希望该过程仅更新/添加(没有删除,只是为了安全),并且尽可能高效。
注意:我将作为 Cron 作业运行这些命令。
谢谢。
作为概念证明,我已经运行 freenas box 几个月了,现在一切似乎都很好,可靠性明智。因此,是时候提高存储容量并将其构建为生产模式了。
我计划在硬盘驱动器上花费 150-200 英镑,这应该可以让我获得大约 3 个 1TB 驱动器,这将使我在容量和冗余之间取得良好的平衡。
我的问题是:我应该将驱动器配置在什么存储机制中,以便为我提供能够容忍驱动器故障的冗余。目前我正在使用 FreeNas 的内置 ZFS 支持,没有冗余(条纹),但它提供“镜像”作为一个选项。
我的另一个选择(因为 FreeBSD/FreeNAS 似乎对它支持的硬件很挑剔)是使用内置的软件 RAID-5 来提供冗余。
不完全熟悉存储机制,然后我考虑了拥有两个磁盘的选项,一个主磁盘然后在磁盘之间进行日常 Rsync,因此总是有一个冗余副本,尽管我意识到这可能需要一天的时间任何时候的日期。不过,不确定这有什么影响。
感谢您的输入。担。
我们使用 将一组虚拟机备份到外部 USB 驱动器rsync -a。源目录报告为 145G du -sh,但目标报告为 181G。
两个文件系统ext3和块大小相同,所以有人可以解释差异是什么吗?