使用 rsync 备份时,如何保留完整的目录结构?
比如远程服务器是saturn,我想把saturn的/home/udi/files/pictures备份到本地一个名为backup 的目录下。
我想要(本地)backup/home/udi/files/pictures而不是backup/pictures。
我正在尝试在本地(在 Windows 机器上)使用 rync 到远程服务器(我的 osx 机器)以测试远程部署构建脚本。我之前在 2 个 linux 服务器之间做过 rsync 就好了,但我现在遇到了问题。这是输出:
$ rsync -v -e ssh myuser@10.86.83.11:/Library/WebServer/sites/staging/app1/ ./export
skipping directory /Library/WebServer/sites/staging/app1/.
sent 8 bytes received 13 bytes 3.82 bytes/sec
total size is 0 speedup is 0.00
$
Run Code Online (Sandbox Code Playgroud)
或者
$ rsync -avz -e ssh myuser@10.86.83.11:/Library/WebServer/sites/staging/app1/ ./export
receiving file list ... done
./
sent 26 bytes received 68 bytes 17.09 bytes/sec
total size is 0 speedup is 0.00
$
Run Code Online (Sandbox Code Playgroud)
远程 app1 目录为空,而本地导出目录有 4 个子目录,然后每个目录中有一堆文件
Rsync over ssh,每次都很好用。
但是,尝试 rsync 到仅允许 sftp 登录但不允许 ssh 登录的主机时,会出现以下错误:
rsync -av /source ssh user@remotehost:/target/
协议版本不匹配——你的外壳干净吗?(有关解释,请参阅 rsync 手册页)rsync 错误:compat.c(171) [sender=3.0.6] 处的协议不兼容(代码 2)
这是 rsync 手册页中的相关部分:
此消息通常是由您的启动脚本或远程 shell 工具在 rsync 用于其传输的流上产生不需要的垃圾引起的。诊断此问题的方法是像这样运行远程 shell:
Run Code Online (Sandbox Code Playgroud)ssh remotehost /bin/true > out.dat然后看看out.dat。如果一切正常,那么 out.dat 应该是一个零长度文件。如果您从 rsync 收到上述错误,那么您可能会发现 out.dat 包含一些文本或数据。查看内容并尝试找出产生它的原因。最com?原因是错误配置的 shell 启动脚本(例如 .cshrc 或 .profile)包含非交互式登录的输出语句。
在我的系统上尝试这个在 out.dat 中产生了以下内容:
ssh-dummy-shell:不允许的命令。
正如我所想,主机不允许 ssh 登录。
以下链接显示可以使用带有 sshfs 的保险丝来完成此任务 - 但是它非常慢,并且不适合生产使用。
有没有机会让 rsync sftp 工作?
我在 server_A 上有一个 50 GB 的文件,我正在将它复制到 server_B。我跑
server_A$ rsync --partial --progress --inplace --append-verify 50GB_file root@server_B:50GB_file
Run Code Online (Sandbox Code Playgroud)
Server_B 有 32 GB RAM 和 2 GB 交换。它主要是空闲的,应该有很多空闲内存。它有足够的磁盘空间。在大约 32 GB 时,传输中止,因为远程端关闭了连接。
Server_B 现在已断开网络。我们要求数据中心重新启动它。当我查看崩溃前的内核日志时,我看到它使用了 0 字节的交换空间,并且进程列表使用了很少的内存(rsync 进程被列为使用 600 KB 的 RAM),但是 oom_killer 是变得疯狂,日志中的最后一件事是它杀死了 metalog 的内核读取器进程。
这是内核 3.2.59,32 位(因此任何进程都不能映射超过 4 GB)。
就好像 Linux 更优先考虑缓存而不是长期运行的守护进程。是什么赋予了??我怎样才能阻止它再次发生?
这是 oom_killer 的输出:
Sep 23 02:04:16 [kernel] [1772321.850644] clamd invoked oom-killer: gfp_mask=0x84d0, order=0, oom_adj=0, oom_score_adj=0
Sep 23 02:04:16 [kernel] [1772321.850649] Pid: 21832, comm: clamd Tainted: G C 3.2.59 #21
Sep 23 02:04:16 …Run Code Online (Sandbox Code Playgroud) 我使用rsync的越多,我就越意识到它是文件传输的瑞士军刀。有很多选择。我最近发现你可以去--remove-source-files,当它被复制时,它会从源中删除一个文件,这使它更像是一个移动,而不是复制程序。:)
你最喜欢的 rsync 小技巧和窍门是什么?
目前我有两个目录 A/ 和 B/,除了时间戳之外,它们在各方面都相同。因此,如果我运行命令:
rsync --dry-run -crvv A/ B/
Run Code Online (Sandbox Code Playgroud)
然后所有文件都标记为“最新”,而命令:
rsync --dry-run -rvv A/ B/
Run Code Online (Sandbox Code Playgroud)
显示所有文件都将从 A/ 复制到 B/。
我的问题是:鉴于我知道文件是相同的(就内容而言),那么有没有办法(通过 rsync 或其他方式)将 B/ 中文件的时间戳设置为与中文件的时间戳相同A/,而不将所有文件从 A/ 复制到 B/ ?
谢谢
我正在将我的桌面备份到远程机器。我基本上是在做rsync -a ~ example.com:backup/但是有大量的大文件,例如维基百科转储等。我关心的大多数文件都很小,例如 firefox cookie 文件,或.bashrc. 是否有一些对 rsync 的调用会排除超过特定大小的文件?这样我就可以先复制所有小于 10MB 的文件,然后再复制所有文件。这样我就可以对最重要的文件进行快速备份,然后对其他所有文件进行更长的备份。
我的笔记本电脑和工作站都连接到千兆交换机。两者都运行Linux。但是当我用 复制文件时rsync,它的性能很差。
我得到大约 22 MB/s。理论上我不应该得到大约 125 MB/s 吗?这里的限制因素是什么?
编辑:我进行了一些实验。
笔记本电脑有一个全盘加密的 xfs 文件系统。它使用aes-cbc-essiv:sha256密码模式,密钥长度为 256 位。磁盘写入性能为58.8 MB/s。
iblue@nerdpol:~$ LANG=C dd if=/dev/zero of=test.img bs=1M count=1024
1073741824 Bytes (1.1 GB) copied, 18.2735 s, 58.8 MB/s
Run Code Online (Sandbox Code Playgroud)
我复制的文件位于超过 5 个 HDD 的软件 RAID-5 上。在raid之上是一个lvm。卷本身使用相同的密码加密。工作站有一个 FX-8150 cpu,它有一个本地 AES-NI 指令集,可以加速加密。磁盘读取性能为256 MB/s(缓存是冷的)。
iblue@raven:/mnt/bytemachine/imgs$ dd if=backup-1333796266.tar.bz2 of=/dev/null bs=1M
10213172008 bytes (10 GB) copied, 39.8882 s, 256 MB/s
Run Code Online (Sandbox Code Playgroud)
我在两个客户端之间运行了 iperf。网络性能为939 Mbit/s
iblue@raven $ iperf -c 94.135.XXX
------------------------------------------------------------
Client …Run Code Online (Sandbox Code Playgroud) 当我使用 rsync 传输大量数据时,如果我能一目了然地获得迄今为止的平均速度,而不是每个文件的一堆不同速度,那将会很有帮助。
我用rsync备份了一个非常大的目录,包含很多子目录和文件,所以我不想看到“增量文件列表”。我只想知道最后的总结。如果我使用参数-q,则根本不会输出任何内容。我可以只输出摘要吗?