以下是如何演示该问题:
在 OSX 上抓取终端并运行
cd ~ && mkdir abc && ls -l ~/
Run Code Online (Sandbox Code Playgroud)
以下是有关文件夹“abc”的输出:
drwxr-xr-x 2 justin staff 68 Jan 4 20:20 abc
Run Code Online (Sandbox Code Playgroud)
团体名称可以看作是“工作人员”。
rsync 将文件或文件夹从远程服务器同步到文件夹“abc”:
rsync -aP -v -z -h username@server:/mnt/foo/ ~/abc/
Run Code Online (Sandbox Code Playgroud)再次检查文件夹“abc”的组名:
$ ls -l ~/
drwxr-xr-x 2 justin _lpoperator 68B Jan 4 19:44 abc
Run Code Online (Sandbox Code Playgroud)
而“abc”中的所有文件,组名都是_lpoperator。尝试在“abc”中创建一个文件并检查其组名,
$ touch def
$ ls -l ~/abc
-rw-r--r-- 1 justin _lpoperator 0 Jan 4 20:28 def
Run Code Online (Sandbox Code Playgroud)我知道当我使用 rsync 的 -a 选项时,它会尝试保留该远程文件的权限,但为什么创建 _lpoperator ?这真的很奇怪,有什么想法吗?
我们用于rsync --update将文件从服务器更新到笔记本电脑。
笔记本电脑上的文件不应被修改。
但是笔记本电脑会被几个人使用,所以新手可能会认为他可以更改笔记本电脑上的文件。
为了避免覆盖,我们使用rsync --update.
有没有办法让 rsync 打印出由于本地(笔记本电脑)文件更新而被跳过的所有文件?
我试过了 rsync -auvz foo@server:bar .
我们使用 rsync 版本 3.1.0。
我需要从具有 10GB RAM (Ubuntu) 的 Web 服务器备份数据。要备份数据,我使用 Rsync。
我的第一个测试是对所有网站使用一个 rsync,但它使用了 5GB。所以我决定拆分 rsync 但它仍然使用 5GB。在这两种情况下,它都会消耗大量内存并且在处理后并不总是完全空闲
如果我手动删除 rsync 之间的缓存,它只使用 150Mb 和 500Mb 之间的内存,在此过程后完全释放内存。(并释放服务器 50%-70% 的内存)
for CURDIR in "$ROOTDIR"*
do
echo "Start $CURDIR"
rsync -aHh --stats --compress --delete "$CURDIR" --link-dest="saveofyesterday" "saveoftoday"
echo "Clear"
sync
echo 3 > /proc/sys/vm/drop_caches
echo "Finish $CURDIR."
done
Run Code Online (Sandbox Code Playgroud)
好像不推荐。实现这一目标的正确方法是什么?
使用 rsync 时出现此错误:
$ rsync -av server:file .
Unable to negotiate with 10.1.1.50 port 22: no matching host key type found. Their offer: ssh-dss
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.1]
Run Code Online (Sandbox Code Playgroud)
如何解决?
我在网上找到了一篇文章,其中介绍了如何使用 rsync 备份您的专用服务器。
在本文的步骤之一中,我应该创建一个名为“rsync”的用户并为其添加 sudo 权限。一切都很顺利,但“rsync”用户的 visudo 选项很难理解。“/usr/bin/rsync”命令的一些选项在 Internet 上几乎没有文档。
以下是我所指的 visudo 行:
rsync ALL=(ALL) NOPASSWD: /usr/bin/rsync --server --sender -logDtprze.iLsf --numeric-ids . /
Run Code Online (Sandbox Code Playgroud)
首先,我有点了解“--server --sender”属性。真正困扰我的是选项“-logDtprze.iLsf”。
我有一个 CentOS 服务器,当我运行命令“man rsync”时,rsync 文档中没有此选项。实际上,每次我尝试在 visudo 中使用此选项时,都没有任何效果。
我最终发现对“-logDtprze.iLsf”的模糊引用是 Debian 中 rsync 的一个新功能。我不确定。
我只是想知道这个选项有什么作用,以及是否可以在我的备份设置中忽略它。
我还想了解“./”行末尾的句号和斜杠的用途
编辑:谢谢博吉特!我觉得自己像个白痴!:)
我们有两台大型存储服务器(+100TB),一台运行在 ZFS 上,另一台运行 XFS,我们打算使用 XFS 作为我们的工作服务器,并使用 ZFS 作为备份服务器(快照 <3)。现在的问题是让这些野兽保持同步......(与每日同步一样同步)
最简单的选择是使用 rsync,但遗憾的是目录结构很深,而且到处都是硬链接。所以这意味着我们需要进行一次“全局”扫描,这将花费很长时间……最重要的是,大部分数据都是创建的,并且从未修改过。所以 rsync 可能不是要走的路。
我查看了inotify,它看起来相对便宜,而且因为我们只希望每天同步,所以可以卸载到一个好时机......遗憾的是,如果我们只查看创建的文件,我们会将硬链接复制为数据会使我们备份中使用的存储量增加一倍......(基本上没有办法从 rsync 进行 -H 检查)
我能想到的唯一选择是重新组织我们的存储以使用基于日期的目录,遗憾的是移动这么多数据并不是我们更喜欢的......
还有其他选择吗?
以供参考 :
当我将 ZFS 称为缓慢时,我看到 'ls' 需要几秒钟...
我有一个 VPS,我们很快就会关闭,所以我想创建一个完整的备份。我在考虑 rsync,因为如果我 google linux 和备份词,我经常被 rsync 击中,那为什么不呢。:) 然而,问题来了。
我想备份 VPS 的备份机器无法从 Internet 访问。所以我不能只使用几乎每个人都建议的 SSH 到 VPS,sudo rsync 几乎所有东西,并作为输出标记备份服务器。我想运行一个类似于 dd 的 bash 命令,所以如果我在远程服务器上运行 rsync,我可以将我的本地文件夹标记为输出。另外我不得不提一下,root ssh 登录是不允许的,所以我只能作为一个实际上可以变成 sudo 的用户 SSH 进入 VPS,但默认情况下它只是一个普通用户。
我想出了以下 rsync 命令:
sudo rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /* /backup/machine/folder
Run Code Online (Sandbox Code Playgroud)
我希望以某种方式使用它,就像我用于克隆的 dd 命令一样,但相反:
dd if=/dev/sda bs=4096 | pv | ssh root@<<TargetServer-IP>> ”dd of=/dev/sda bs=4096”
Run Code Online (Sandbox Code Playgroud) 似乎rsync通常使用-a等于的标志来调用-rlptgoD (no -H,-A,-X)
-g, --group preserve group
--devices preserve device files (super-user only)
--specials preserve special files
-D same as --devices --specials
Run Code Online (Sandbox Code Playgroud)
我感到困惑的是为什么-a包含-g和-D。-g似乎什么都-D做,那你为什么要包括-D?
我有2个服务器(A和B),我需要从rsync的文件A,以Broot身份。允许 root ssh 登录是可能的 ( PermitRootLogin without-password),但我想尽可能地将其锁定。我正在使用 ssh 密钥,并且 (on B) 根 ssh 密钥 (in /root/.ssh/authorized_keys) 仅限于A的 IP 地址 ( from="x.x.x.x ...")。
但是我怎样才能更多地锁定(这个 ssh 密钥)呢?是否可以将该 ssh 密钥限制为仅允许 rsync/文件传输(最好仅限于某个目录)?
对此进行研究将我指向提及scponlyshell 或rrsync来自 rsync 或rssh来自 OpenSSH 的脚本的古老网页。但是我怎么能只为那个键设置它们,而不让我的整个 root 帐户成为rssh?
我试图从超过十分钟的远程目录中提取所有内容,然后删除源文件。
我的远程查找似乎正在工作(在远程框上独立测试),但是当 rsync 开始使用它时,我的用户的主路径被添加到查找输出的前缀,如下所示:
rsync -avz --dry-run --remove-source-files --files-from=<(ssh spot@host "find /mnt/volume_2/partners/test/uploads/ -amin +10 -type f,d -print0") spot@host:. .
receiving incremental file list
rsync: [sender] link_stat "/home/spot/mnt/volume_2/partners/test/uploads" failed: No such file or directory (2)
rsync: [sender] link_stat "/home/spot/mnt/volume_2/partners/test/uploads/file-1054" failed: No such file or directory (2)
rsync: [sender] link_stat "/home/spot/mnt/volume_2/partners/test/uploads/file-1105" failed: No such file or directory (2)
rsync: [sender] link_stat "/home/spot/mnt/volume_2/partners/test/uploads/file-1105/subfile-1105" failed: No such file or directory (2)
rsync: [sender] link_stat "/home/spot/mnt/volume_2/partners/test/uploads/file-1101" failed: No such file or directory (2)
rsync: [sender] …Run Code Online (Sandbox Code Playgroud)