从 Ubuntu 20 升级到 Ubuntu 22 后,rsync 复制未更改的文件并将修改时间更改为当前时间

从 Ubuntu 20 升级到 Ubuntu 22 后,rsync 复制未更改的文件并将修改时间更改为当前时间

使用 Ubuntu 未请求的提示从 Ubuntu 20.04 升级到 Ubuntu 22.04 进行升级。

几个月来,我一直rsync在本地 PC 上运行 Unix shell 脚本,将文件传输到 Raspberry Pi 上本地安装的 Samba 共享,运行良好。Rsync 正在使用-aHv选项。客户端 Samba 安装正在使用 CIFS。升级后不久,我注意到 rsync 所需的时间更长。我还注意到,传输的文件比源本地 PC 上的新文件多。

我调查后发现,在 Ubuntu 22 升级后创建的任何文件(这些是使用原生 Ubuntu 文本编辑器的文本文件)在每次调用 rsync 时都会被 rsync 传输,即使它们没有更改。我还发现所有传输文件的修改时间都是当前传输时间,而不是本地源文件的修改时间。

跑步: rsync -aHv --progress <source directory> <target directory>

这只发生在 rsync 传输到本地安装的远程 Samba 共享时。当我测试将文件从一个本地目录传输到另一个本地目录时,不会发生这种情况。

mount -t cifs -o rw,username=<u>,password=<p>,file_mode=0777,dir_mode=0777 //<IP>/<sharedremote> /media/<sharedlocal>

Ubuntu 22.04 版本:

:/var/log/apt$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:    22.04
Codename:   jammy

预计安装日期(2022 年 8 月 16 日)

:/var/log/installer$ ls -ltr
total 1160
-rw------- 1 root   root    956 Sep  2  2016 casper.log
-rw------- 1 root   root     19 Sep  2  2016 version
-rw------- 1 root   root 381309 Sep  2  2016 partman
-rw------- 1 root   root   7112 Sep  2  2016 debug
-rw-r--r-- 1 root   root     60 Sep  2  2016 media-info
-rw-rw-r-- 1 root   root 468344 Sep  2  2016 initial-status.gz
-rw------- 1 syslog adm  310006 Aug 16 19:46 syslog
bruce@bruce-Aspire-E1-572:/var/log/installer$ 

“错误” rsync 远程文件传输的示例 rsync 源文件和目标文件 ls 信息:

来源:

-rw-rw-r--  1 bruce bruce     26 Aug 30 10:54 test1.txt

目标:

-rwxrwxrwx 1 root root 26 Aug 31 08:23 test1.txt

希望这些信息足以让我进行测试,看看其他人是否也遇到过这种情况,或者我的设置是否特殊。我对 Ubuntu 的了解足以让我意识到它很危险,但我并不是专家。

sudodus:谢谢你的回复:

问:我是否理解正确,“每次 rsync 调用期间”不仅意味着升级到 22.04 后的第一次,还意味着每次运行备份时?

答:是的。每次运行 rsync 时,文件都会被复制,修改时间会更新为当前时间。即使 rsync 操作是在第一次运行几分钟后运行的。似乎升级后添加的任何文件,甚至在第一次 rsync 后每次都会被复制。升级前创建的文件不会被复制(有数百个)。

问:rsync 传输的服务器和客户端使用什么操作系统(发行版和版本)?

服务器(Raspberry PI):

$ uname -a
Linux pi4nfs 5.10.103-v7l+ #1529 SMP Tue Mar 8 12:24:00 GMT 2022 armv7l GNU/Linux

cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

$ rsync --version
rsync  version 3.1.3  protocol version 31
Copyright (C) 1996-2018 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes, prealloc

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

客户:

Ubuntu 22 版本:

:/var/log/apt$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:    22.04
Codename:   jammy 

$ rsync --version
rsync  version 3.2.3  protocol version 31
Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others.
Web site: https://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes,
    batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv,
    symtimes, prealloc, stop-at, no crtimes
Optimizations:
    SIMD, no asm, openssl-crypto
Checksum list:
    xxh128 xxh3 xxh64 (xxhash) md5 md4 none
Compress list:
    zstd lz4 zlibx zlib none

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

问:Samba 共享上有什么文件系统?

 $ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/root      ext4      458G  171G  264G  40% /
....

问:是否可以通过其他方式访问它,例如“正常”挂载并直接通过 ssh/rsync 访问它?

我可以尝试通过 ssh 进行操作。我看过相关信息,但还没有使用过。

问:您是否准备修改 rsync 命令行的选项,直到您可以避免通过 samba 使用当前方法复制未修改的文件?

当然。我有一个测试脚本,可以轻松修改它来执行此操作。

谢谢。

== 09.07.22:sudodus 解决方法有效。使用 rsnch 的 ssh 目标手动运行 rsync(如 @ 所示。(我将按照他的建议检查对我来说是新密钥的生成)。因为我想将其放入重复 rsync 的自动脚本中,所以我需要嵌入密码。所以这也有效:

sshpass -f ~/. rsync -aHv --progress <local=源目录>/ @:/

存在与 samba 定义的所有权 nogroup:nobody 所有权相关的问题,我可以解决这个问题。

但是,原始问题仍然存在:什么行为发生了变化导致我的问题? Samba 似乎是罪魁祸首,因为相同的物理文件在相同的 rsync 下按预期工作,但使用直接 ssh 访问而不是 Samba。

== 另一个怪异之处。在测试中,我开始注意到,当我是这个系统上唯一的用户(个人用户,而非公司用户)时,编辑我旧的(非测试文件夹)本地 Samba 连接的远程文件中的文件时,会弹出“文件在磁盘上已更改”的通知。我必须缩小范围,但似乎相当一致。似乎我的旧文件目录不知何故被搞乱了。到目前为止,必须响应这些弹出窗口只是一件烦人的事情,尤其是在保存后重新打开它们时。

答案1

我认为如果直接通过 rsync 连接(而不是通过 samba),效果会更好。

此示例将一个文件从这台计算机(我的主计算机,装有 Ubuntu 18.04.6 LTS)复制到另一台装有测试系统(Ubuntu 22.04.1 LTS 和安装的软件包openssh-server以提供 ssh 服务器)的计算机。您可能需要安装openssh-server

首先进行“试运行”,选择-n

$ rsync -Havn /media/multimed-2/test/mafoelffen/system-info.69 [email protected]:/home/olle/
sending incremental file list
system-info.69

sent 63 bytes  received 19 bytes  164.00 bytes/sec
total size is 76,419  speedup is 931.94 (DRY RUN)

如您所见,目标语法是user@IP-address:/path/to/target/directory/。如果看起来不错,您可以n从选项列表中删除,

$ rsync -Hav /media/multimed-2/test/mafoelffen/system-info.69 [email protected]:/home/olle/
sending incremental file list
system-info.69

sent 76,538 bytes  received 35 bytes  153,146.00 bytes/sec
total size is 76,419  speedup is 1.00

当你重复时,什么都没有被复制,因为没有什么新东西可以复制。

$ rsync -Hav /media/multimed-2/test/mafoelffen/system-info.69 [email protected]:/home/olle/
sending incremental file list

sent 60 bytes  received 12 bytes  144.00 bytes/sec
total size is 76,419  speedup is 1,061.38

开始使用时,必须输入密码。在提供以下信息后,在计算机之间运行 rsync 将更加简单和安全:使用密钥进行 ssh 授权

相关内容