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

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

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

使用:

  • Ubuntu 20.04.4 LTS(Focal Fossa)。
  • 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  ; 

示例 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  

以上内容符合预期。当 rsync 从硬盘到硬盘且 rsync 没有文件要传输时(xfr#0),rsync 输出最小,因为硬盘已同步。

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

为什么 USB 闪存盘中的文件列表这么长?

示例2脚本,U盘:

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  ;  

示例 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  

为什么当没有文件可供 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  

输出lsblk -f

sdb    vfat     F_4GBusb

更多命令--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 '

回想一下,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 '

但这不起作用,就是-c不起作用--modify-window=7

time rsync -ahc --delete-before --info=progress2 "$src1/" "$dest" --out-format='%t %i %C %b %n %l '


当“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)
  

答案1

“itemize”输出-i会告诉你它们不同步的确切原因p.f...p.....表示 rsync 认为文件权限源和目标之间有所不同。

文件权限通常会有所不同,因为你的 USB 驱动器使用的 FAT 文件系统是无法存储它们– 即使在 rsync 尝试将目标文件 chmod() 为其他文件后,vfat 始终会报告与挂载选项要求其报告的完全相同的模式和所有权。

用于--no-perms禁用同步文件权限,否则可通过 启用-a

相关内容