[Tutorials] 如何在DeepinLinux上记录rsync传输日志rsync同步错误日志乱码
Tofloor
poster avatar
深圳市耀影科技有限公司
deepin
2023-11-23 06:53
Author
  • 当执行rsync命令时,特别是使用 -v(verbose)选项时,您将在终端中看到相关的输出。但是,如果您需要保存这个输出,或者是因为您想以后引用它,或者您需要检查无人值守的rsync传输,该怎么办呢?在本指南中,我们将看到如何在Linux上记录rsync传输。
  • 有几种方法可以将rsync的输出发送到日志文件,这取决于您想做什么。看看下面的例子,了解各种方法。

日志rsync输出

例1. rsync内置了 --log-file选项,它会将详细的传输信息发送到日志文件中,同时也会将输出发送到您的终端。

$ rsync -avUXX --log-file=rsync同步日志.log /src /dst

之后,检查日志文件以查看有关传输了哪些文件的信息。日志文件中也会显示详细的输出,因此您可以查看文件的修改时间、权限等是否发生了更改。

$ cat rsync同步日志.log
 
sending incremental file list
src/test1.txt
src/test2.txt

sent 241 bytes  received 55 bytes  592.00 bytes/sec
total size is 22  speedup is 0.07
2023/11/22 22:19:00 [1655] building file list
2023/11/22 22:19:00 [1655] cd+++++++++ src/
2023/11/22 22:19:00 [1655] >f+++++++++ src/test1.txt
2023/11/22 22:19:00 [1655] >f+++++++++ src/test2.txt
2023/11/22 22:19:00 [1655] sent 244 bytes  received 58 bytes  604.00 bytes/sec
2023/11/22 22:19:00 [1655] total size is 22  speedup is 0.07

实施例2. 如果你不想使用rsync的 --log-file参数,你可以不使用它。记录rsync输出的最基本方法是使用 >操作符重定向标准输出。这是你的命令看起来像什么。

$ rsync --progress -avUXX /src /dst > rsync同步日志.log

然后,您可以检查日志文件以查看有关rsync传输的详细信息。

$ cat rsync同步日志.log

sending incremental file list
src/
src/test1.txt
src/test2.txtsent 241 bytes  received 55 bytes  592.00 bytes/sec
total size is 22  speedup is 0.07

这里有一个潜在的问题,那就是错误消息(stderr)仍然会显示在终端中,而不是日志文件中。下一个例子解决了这个问题。

实施例3. 要将rsync输出以及错误消息重定向到日志文件,请使用以下命令语法。

$ rsync --progress -avUXX /src /dst > rsync同步日志.log 2>&1

实施例4. 也可以将输出同时发送到终端和日志文件。为此,我们可以使用如下所示的 tee命令。

$ rsync --progress -avUXX /src /dst | tee rsync同步日志.log 2>&1

使用这个命令意味着rsync的标准输出(stdout)和标准错误(stderr)将同时发送到我们的终端和日志文件。

**实施例5.**如果传输期间错误,需要排查哪些文件没有传输,且源或目的地都没有改变,一个选项是使用rsync开关再次运行 -n试运行,看看在不复制数据的情况下会传输什么。添加 -q将抑制常规输出,禁止显示非错误消息,仅显示无法传输的文件。

rsync --progress -avUXXqn /src /dst

只把错误消息输出到日记,请参考上面的例子加 qn参数即可


参数简介:

  • --progress 在传输过程中显示传输进度
  • -v参数表示输出细节。-vv表示输出更详细的信息,-vvv表示输出最详细的信息。
  • -U 这告诉rsync将目标文件的访问(使用)时间设置为 与源文件相同的值。
  • -XX此选项使rsync更新目标扩展属性, 与源代码相同。 请注意,-X选项不会复制rsync的特殊xattr值(例如: --fake-super使用的那些),除非您重复该选项(例如-XX)。 此“复制所有xattrs”模式不能与--fake-super一起使用。
  • -q禁止显示非错误消息,此选项可减少在传输过程中提供的信息量,特别是禁止来自远程服务器的信息消息。从 cron 调用 rsync 时,此选项很有用。
  • -n在不进行任何更改的情况下执行试运行,这使得 rsync 执行不进行任何更改的试运行(并产生与实际运行大致相同的输出)。它最常与 -v、--verbose 和/或 -i、--parameterize-changes 选项结合使用,以查看 rsync 命令在实际运行之前将要做什么。

Windows和Linux端rsync推拉同步时中文乱码解决方法

使用rsync同步的时候出现无法同步的问题:首先在服务端:配置/etc/rsyncd.conf 设置
Charset = UTF-8 ;中文识别,配合命令$rsync -avz --iconv=utf-8,GBK

接着在在客户机中运行加上iconv参数
\

$rsync -avz --delete --iconv=UTF-8,GBK test@192.168.1.2:/data/test  /data/test/

+++++++++
主要原因是因为Windows和Linux端文件名编码不同导致的!

rsync在3.0版本之后,提供了一个选项,可以进行文件编码的转换,格式如下:
--iconv=,
local指本地编码,remote指远程机器编码,参考示例如下:

从Linux sersync推到Windows时:
Linux端sersync confxml.xml配置
Windows端rsyncd.conf配置文件中添加charset = UTF-8

Windows端从Linux端拉过来时:
Windows端cwRsync要有--iconv=UTF-8,GBK选项
Linux端rsyncd.conf要添加charset = GBK

遇到问题:从Linux推到Windows端时,中英文的文件都正常,但是如果在Linux端删掉文件,Windows端的中文文件不会被删除!

如果出现同步错误,切提示里面有乱码,deepin下 可以加入 --iconv=GBK,UTF-8 就可以定位到错误文件的正常路径显示

rsync --progress -avUXX ​--iconv=GBK,UTF-8​ /src /dst > rsync同步日志.log 2>&1
Reply Favorite View the author
All Replies
深圳市耀影科技有限公司
deepin
2023-11-23 06:58
#1

建议添加到 wiki

Reply View the author
TSAC
deepin
2023-11-23 07:17
#2

很好的教程

Reply View the author