我一直在尝试在不同类型的星座中使用各种 rsync 命令,类似于拱门页面上的这个将我的 Linux 系统备份到 SMB 存储。
这包括以下版本:
rsync -aAXv --exclude=/dev/ --exclude=/proc --exclude=/sys/* --exclude=/tmp/* --exclude=/run/* --exclude=/mnt/* --exclude=/media/* --exclude=/cdrom/* --exclude=/lost+found / /mnt/mounted_smb_storage
rsync -aAXHv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /mnt/mounted_smb_storage
rsync -aAXHv --exclude-from=/path/to/excludelist.txt / /mnt/mounted_smb_storage
无论带引号还是不带引号...
只要我使用根目录作为源,它似乎总是忽略 --exclude 命令。一旦我使用像/mnt
and use这样的源--exclude /mnt/*
,它就会像它应该的那样忽略目录
我使用 Debian 11 和 rsync 版本 3.2.3 协议版本 31
答案1
rsync
我通过卸载解决了这个问题apt purge rsync
。
rsync
maria-db
卸载时对软件包有奇怪的依赖性
单独重新安装后,rsync
命令再次按预期工作。
答案2
你可以更好地把它写成
rsync -aAXv --exclude=/dev/ --exclude=/proc/ --exclude=/sys/ --exclude=/tmp/ --exclude=/run/ --exclude=/mnt/ --exclude=/media/ --exclude=/cdrom/ --exclude=lost+found/ / /mnt/mounted_smb_storage
或者使用能够理解大括号扩展的 shell,
rsync -aAXv --exclude=/{dev,proc,sys,tmp,run,mnt,media,cdrom}/ --exclude=lost+found/ / /mnt/mounted_smb_storage
每个排除项的尾部/
表明rsync
该项目是一个目录。前导/
将每个链接到源路径的顶部。排除的目录本身也将从副本中省略。
更好的是,如果您的 SMB 存储服务器允许您运行,rsync
您可以通过使用网络副本来提高后续副本的效率。例如,
rsync -aAXv --exclude=/{dev,proc,sys,tmp,run,mnt,media,cdrom}/ --exclude=lost+found/ / user@storageServer:/mnt/mounted_smb_storage
对于此类目标上的非 root 帐户,您可能需要添加-M--fake-super
备份和恢复,以便元数据属性(例如所有权)可以与每个目标文件一起记录。