机器 A:Debian 测试版(SparkyLinux 6)rsync 3.1.3
机器 B:Ubuntu Ubuntu 16.04.6,rsync 3.1.1
我有一个 bash 脚本,用于将目录备份到网络连接的机器。我尝试过备份到已安装的目录 (CIFS) 或通过 rsync (由目标上的 root 运行的 rsync 守护进程)。这两个文件系统都是 ext4。两者都以 RW、defaults 的形式安装在 fstab 中。
我的 bash 脚本检查两个目录是否存在,然后运行(以 root 身份):
rsync -artzsv --force --delete --exclude=.Trash* --exclude=lost+found* /media/dcarrco/raid /media/bigdisk
例如,源目录的权限为:
drwxr-x--- 8 dcarrco dcarrco 4.0K Feb 4 2013 dev
-rw-rw-r-- 1 dcarrco dcarrco 32G Nov 8 09:32 data.dat
-rw-rw-r-- 1 dcarrco dcarrco 114K Sep 22 2016 flower.jpeg
一旦我运行 rsync(在 CIFS 挂载目录上或通过守护进程),目标驱动器就会有:
drwxr-xr-x 2 dcarrco dcarrco 0 Feb 4 2013 dev
-rwxr-xr-x 1 dcarrco dcarrco 32G Feb 14 2019 data.dat
-rwxr-xr-x 1 dcarrco dcarrco 114K Sep 22 2016 flower.jpeg
因此,现在每个传输的文件上都设置了执行位。下次我运行 rsync 时,它会再次传输所有相同的文件(因为执行位不在源上,而在目标上)。
所以我尝试删除目标上的目录并进行全新备份。这很有效。然后它(叹气)下次再次复制了所有内容。
所以我将源上的每个文件都设置为执行位。rsync 没有复制任何内容并说它是最新的。
我使用 运行了 rsync --itemize-changes
,但文件上只有可执行位。一遍又一遍。有什么想法吗?
编辑:这最终是 samba 问题,而不是 rsync。我不知道为什么 rsync 守护进程上的 rsync 遇到同样的问题,但是一旦我将 file_mode=0644,dir_mode=0755 添加到 fstab 中的 CIFS 行,它就会按预期工作。
答案1
这是 samba 服务器设置此 x 属性。我不记得设置名称,但它可能与映射 DOS 系统和/或隐藏属性或强制 Windows 文件的可执行状态有关。查看 smb.conf 手册页。
顺便说一句,我认为将 Unix/Linux 文件系统备份到 CIFS 文件系统并不是最好的主意。您不能使用 NFS 吗?