我最近设置了一台带有 Ubuntu Server 的机器来托管游戏服务器。我为每个游戏服务器安装了一个备份插件,它会在机器上的特定文件夹中频繁备份游戏世界文件。我还建立了一个cron任务,每天晚上使用带有-a选项的rsync 自动将这些备份复制到我的 Dropbox 文件夹。
几个月后,我的 Dropbox 帐户达到了存储限制,我意识到我无法保留这么多备份,因此我将游戏服务器备份插件配置为不保留这么多备份,然后等了几天看看是否可以删除旧备份,因为它计划每周执行一次。备份插件最终完成了它的工作并删除了旧备份,所以我期待rsynccron 任务随后从我的 Dropbox 文件夹中删除旧备份以匹配源文件夹,但它没有这样做。所以我有几个问题:
默认情况下,是否rsync只将添加到源文件夹的文件添加到目标文件夹并更改源文件夹中已更改的文件,但不删除从源文件夹中删除的文件?
如果是这种情况,最好的方法是rsync什么?我希望目标文件夹能够完美地反映源文件夹,这意味着删除已从源文件夹中删除的所有文件。
我看到手册页中列出的一些选项rsync可能可以解决问题,但因为我不熟悉。
我正在尝试使用 rsync 备份我的主目录,并且我想排除一些包含垃圾的目录。我想特别排除/home/ben/.ccache和/home/ben/build。不幸的是,rsync 的文档信息过载,并没有回答我的问题。这是我尝试过的:
rsync -arv --exclude "/home/ben/.ccache:/home/ben/build" /home/ben /media/ben/thumbdrive/
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?
我试过:
rsync -v -v -e 'ssh -p YY' ./testfile me@XXXXX:/home
Run Code Online (Sandbox Code Playgroud)
错误信息
opening connection using: ssh -p YY -l me 146.6.84.206 rsync ->-server -vvve.s . /home
[sender] make_file(testfile,*,0)
send_file_list done
send_files starting
server_recv(2) starting pid=17537
rsync: connection unexpectedly closed (9 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(600)[sender=3.0.6]
_exit_cleanup(code=12, file=io.c, line=600): about to call exit(12)
Run Code Online (Sandbox Code Playgroud)
这工作正常:
ssh -p YY me@XXXXX
Run Code Online (Sandbox Code Playgroud)
这向我表明问题既不sshd是未运行也不是 YY 端口被防火墙设置。反正我查过了。
还会有什么问题?
编辑:问题似乎是“自我解决”。第二天我无法复制。我启动了本地计算机。也许值得注意的是,我的 IP 地址与上次不同。现在 rsync 神奇地起作用了。如果它消失了,我会很感激猜测它可能会是什么。
有一个rsync 没有按预期设置 UID 和 GID的问题,我的直觉是rsync应该像root在目标机器上一样运行。
我无法root通过 SSH登录,因为出于安全目的禁用了它。目标计算机上的用户可以使用sudo.
是否有可能使用rsync与sudo?
我正在尝试在我的 NAS 驱动器上备份我的主文件夹。我给这个:
rsync -Paz --exclude-from 'rsync-exclude.txt' /home/chris/ admin@192.168.1.65:LinuxHome
Run Code Online (Sandbox Code Playgroud)
哪里rsync-exclude.txt有这个内容:
/home/chris/Downloads/*
/home/chris/Downloads/
/home/chris/Downloads/*.*
Run Code Online (Sandbox Code Playgroud)
它在我执行 rsync (主文件夹)的同一个文件夹中。
但是 rsync 也会尝试复制此文件夹。
我究竟做错了什么?
直到上周我还在愉快地运行 Ubuntu 20.04,然后周末决定备份所有内容并安装 22.04。我遇到了一些初期问题,我已经解决了,但是我在 SSH 方面遇到了真正的问题。我有两个第一代 WD MyCloud 硬盘,可以处理我在家和外出时的所有备份和文件。我仍然可以毫无问题地连接到共享,但是我需要通过 SSH 连接到两个驱动器,以便在云驱动器之间运行维护、备份等。
最初,升级后我根本无法获得 SSH 访问权限,但是该网站的一次性修复有效。我现在可以通过 SSH 连接并输入密码。
然而,在 Ubuntu 20.04 中,我设置了一个密码,以便我使用 rsync 使用的各种自动脚本可以在云驱动器之间以及 Ubuntu 和云驱动器共享之间进行复制。在我升级之前,这一直有效,现在脚本不断询问我的密码,我不知道如何阻止它。
我最初做的是跑步
ssh-keygen -b 4096
Run Code Online (Sandbox Code Playgroud)
生成密码,然后
ssh-copy-id root@server
Run Code Online (Sandbox Code Playgroud)
复制密码
如果我随后进入
ssh root@server
Run Code Online (Sandbox Code Playgroud)
它只是连接而不询问我的密码。
我知道这是因为我的云驱动器只支持现在不安全的 SSH,但我无法将其升级到更安全的(除非有人知道如何 - 老实说我更愿意这样做)。我的维护脚本可以在几个小时内建立多达 20 个连接,而必须坐下来不断输入密码变得很痛苦。
任何人都可以帮助我让我的远程 rsync 命令再次工作,这样他们就不会一直询问我的密码
当我运行这些时,终端输出是
colin@colin-desktop:~/.ssh$ ssh-keygen -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/colin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in …Run Code Online (Sandbox Code Playgroud) 我在互联网上进行了搜索,每个人都提出了同样的建议——添加--exclude=´.*´应该从 rsync 中排除隐藏的文件和文件夹。它没有。我也试过添加斜杠和/或双引号,例如。--exclude=¨\.*¨似乎没有任何效果。啊啊!!真的很感激一些帮助。
我目前正在通过以下命令在计算机中的本地文件夹之间进行同步:
rsync -av --delete "[source]" "[destination]"
Run Code Online (Sandbox Code Playgroud)
现在我想通过 GUI 来做到这一点。那么,是否有任何可用于 Ubuntu 的GUI,其工作方式与命令类似rsync?以及如何安装它?
rsync ×10
ssh ×2
android ×1
backup ×1
command-line ×1
delete ×1
encryption ×1
gui ×1
hidden-files ×1
permissions ×1
sync ×1