远程 RSync 良好

远程 RSync 良好

有没有办法nice在目标机器上使用 RSync 守护进程?我必须 rsync 大量数据(包括许多小文件),并且担心远程 RSync 客户端会显著降低目标速度。

答案1

在我的 Ubuntu 16.04 机器上,/etc/default/rsync 中有以下文本:

# run rsyncd at a nice level?
#  the rsync daemon can impact performance due to much I/O and CPU usage,
#  so you may want to run it at a nicer priority than the default priority.
#  Allowed values are 0 - 19 inclusive; 10 is a reasonable value.
RSYNC_NICE=''

# run rsyncd with ionice?
#  "ionice" does for IO load what "nice" does for CPU load.
#  As rsync is often used for backups which aren't all that time-critical,
#  reducing the rsync IO priority will benefit the rest of the system.
#  See the manpage for ionice for allowed options.
#  -c3 is recommended, this will run rsync IO at "idle" priority. Uncomment
#  the next line to activate this.
# RSYNC_IONICE='-c3'

理论上,通过分别将这些值设置为 10 和 -c3,然后重新启动 rsync 守护进程,它应该会以请求的良好级别运行守护进程。但是,这样做之后,我发现它仍然以 0 的良好级别运行。

$ ps -lfp $(pidof rsync)
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root     18704     1  0  80   0 -  2785 poll_s 13:42 ?        00:00:00 /usr/bin/rsync --daemon --no-detach

那么这里发生了什么?我查看了 rsync 的 systemd 单元文件,发现了以下内容:

$ cat /lib/systemd/system/rsync.service 
[Unit]
Description=fast remote file copy program daemon
ConditionPathExists=/etc/rsyncd.conf

[Service]
ExecStart=/usr/bin/rsync --daemon --no-detach

[Install]
WantedBy=multi-user.target

它甚至没有查看我的 /etc/default/rsync 文件。仅当您使用 System-V init-System 时才使用此文件。对于 systemd(自 Debian 8/jessie 以来为默认设置),它将被忽略。

由于 /lib/systemd/system/rsync.service 文件可能会被覆盖,请将其复制到 /etc/systemd/system/rsync.service。然后将 ExecStart 行更改为如下所示:

ExecStart=/usr/bin/nice -n 10 /usr/bin/ionice -c3 /usr/bin/rsync --daemon --no-detach

然后重新加载 systemd 的配置 ( sudo systemctl daemon-reload) 并重新启动 rsync ( sudo systemctl restart rsync)。结果如下:

$ ps -lfp $(pidof rsync)
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root     18762     1  0  90  10 -  2785 -      13:43 ?        00:00:00 /usr/bin/rsync --daemon --no-detach

我现在得到了我想要的 10 这个不错的值,但我认为下次安装 rsync 更新时,这个值将不会保留。根据您的发行版,您可能只需更改 /etc/default/rsync 中的值即可成功,但请确保在重新启动守护程序后检查正在运行的进程。

答案2

使用--rsync-path选项来运行任何包装器或命令组合(包括sudonice等等),而不是rsync远程端的基本命令。

相关内容