为什么 rsync 在 rsync 到 USB 闪存驱动器与硬盘之间提供不同的输出?

jos*_*h22 5 linux usb backup hard-drive rsync

当没有文件可供 rsync 传输时,为什么 rsync 会给出不同的输出,即 ( xfr#0) 从硬盘到硬盘的 rsync 与从 USB 闪存驱动器到硬盘的 rsync?

使用:

  • Ubuntu 20.04.4 LTS(焦点窝)。
  • rsync 版本 3.2.3 协议版本 31。

所有目录都是同步的,都是最新的。因此,没有文件可供 rsync 传输,这意味着xfr#0第二次运行 rsync 时 ( )。

示例1脚本:

src1='/media/u3/d_HDD931GB/TemP'  
dest='/media/u3/s_HDD931GB/1/TemP'   
tput setaf 2  ; echo "$src1   $dest" ;   
tput setaf 1  ; test ! -d "$src1" && echo "ErrorS" ; test ! -d "$dest" && echo "ErrorD" ; tput setaf 2 ;  
time rsync -ah --delete-before --info=progress2 "$src1/" "$dest" --out-format='%t %i %C %b %n %l ' ;  
echo "$src1   $dest" ; echo  ; 
Run Code Online (Sandbox Code Playgroud)

示例 1 输出:

/media/u3/d_HDD931GB/TemP   /media/u3/s_HDD931GB/1/TemP   
              0   0%    0.00kB/s    0:00:00 (xfr#0, to-chk=0/5)  

real    0m0.054s  
user    0m0.004s   
sys     0m0.010s  
/media/u3/d_HDD931GB/TemP   /media/u3/s_HDD931GB/1/TemP  
Run Code Online (Sandbox Code Playgroud)

以上是预期的情况。当从硬盘到硬盘进行 rsync 且 rsync 没有要传输的文件 ( xfr#0) 时的最小 rsync 输出,因为硬盘已同步。

但是,当从 USB 闪存驱动器 rsync 到硬盘时,当 USB 闪存驱动器没有要传输的文件 ( xfr#0) 时,会输出一长串带有 rsync 输出的文件,因为 USB 闪存驱动器已同步且是最新的。

为什么 USB 闪存驱动器的文件列表如此长?

示例 2 脚本,USB 闪存驱动器:

src1='/media/u3/F_4GBusb'    
dest='/media/u3/d_HDD931GB/Rare/Sophos'   
tput setaf 3  ; echo "$src1   $dest" ;   
tput setaf 1 ; test ! -d "$src1" && echo "ErrorS" ; test ! -d "$dest" && echo "ErrorD" ; tput setaf 3 ;  
time rsync -ah --delete-before --info=progress2 "$src1/" "$dest" --out-format='%t %i %C %b %n %l ' ;  
echo "$src1   $dest" ; echo  ;  
Run Code Online (Sandbox Code Playgroud)

示例2输出,USB闪存驱动器:

/media/u3/F_4GBusb   /media/u3/d_HDD931GB/Rare/Sophos  
2022/07/30 20:11:46 .d...p.....                                  0 ./ 4096  
2022/07/30 20:11:46 .f...p.....                                  0 words.txt 4862992  
2022/07/30 20:11:46 .f...p.....                                  0 virtualbox.odt 22142  
etc ...  
etc ...  
etc ...  
etc ...  
etc ... listing 502 files  
etc ...  
              0   0%    0.00kB/s    0:00:00 (xfr#0, to-chk=0/502)  

real    0m0.088s  
user    0m0.015s  
sys     0m0.012s  
/media/u3/F_4GBusb   /media/u3/d_HDD931GB/Rare/Sophos  
Run Code Online (Sandbox Code Playgroud)

当没有文件可供 rsync 传输时,为什么 rsync 会给出不同的输出,即 ( xfr#0) 从硬盘到硬盘的 rsync 与从 USB 闪存驱动器到硬盘的 rsync?

输出sudo fdisk -l

Disk /dev/sdb: 3.75 GiB, 4005560320 bytes, 7823360 sectors  
Disk model: Flash Disk        
Units: sectors of 1 * 512 = 512 bytes  
Sector size (logical/physical): 512 bytes / 512 bytes  
I/O size (minimum/optimal): 512 bytes / 512 bytes  
Disklabel type: dos  
Disk identifier: 0x6f20736b  
Run Code Online (Sandbox Code Playgroud)

输出lsblk -f

sdb    vfat     F_4GBusb
Run Code Online (Sandbox Code Playgroud)

更多命令--modify-window=7不起作用。

同样的问题。列出了超过 500 个没有 rsync 传输的文件。
2 个目录是同步的,为什么要列出 500 多个文件?

time rsync -ah --delete-before --modify-window=7 --info=progress2 "$src1/" "$dest" --out-format='%t %i %C %b %n %l '
Run Code Online (Sandbox Code Playgroud)

回想一下,2 个目录是同步的。因此没有 rsync 传输。
意义(xfr#0, to-chk=0/503)

并且-c没有工作,同样的问题。

time rsync -ahc --delete-before --modify-window=7 --info=progress2 "$src1/" "$dest" --out-format='%t %i %C %b %n %l '
Run Code Online (Sandbox Code Playgroud)

但这不起作用,只是-c没有--modify-window=7

time rsync -ahc --delete-before --info=progress2 "$src1/" "$dest" --out-format='%t %i %C %b %n %l '
Run Code Online (Sandbox Code Playgroud)


当从目标驱动器删除“file.txt”时,从硬盘到硬盘的 rsync 正在按预期工作。

2022/07/31 01:05:08 >f+++++++++ ad7d6d11c4cf0b771ade515eee5465c8 8945 file.txt 8902     
          8.90K   0%    0.00kB/s    0:00:04 (xfr#1, to-chk=0/121057)
  
Run Code Online (Sandbox Code Playgroud)

use*_*686 11

“itemize”输出-i准确地告诉您它们不同步的原因:pin.f...p.....意味着 rsync 认为源和目标之间的文件权限不同。

\n

文件权限通常会有所不同,因为您的 USB 记忆棒使用的 FAT 文件系统无法存储它们\xe2\x80\x93 即使 rsync 尝试将目标文件 chmod() 到其他文件后,vfat 始终报告完全相同的模式以及挂载选项告诉它报告的所有权。

\n

用于--no-perms禁用同步文件权限,否则由-a.

\n