当没有文件可供 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
。