当将整个根文件系统备份到 /mnt 时,要求 rsync 排除 /mnt /proc 等会忽略排除

当将整个根文件系统备份到 /mnt 时,要求 rsync 排除 /mnt /proc 等会忽略排除

我一直在尝试在不同类型的星座中使用各种 rsync 命令,类似于拱门页面上的这个将我的 Linux 系统备份到 SMB 存储。

这包括以下版本:

  1. 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

  2. rsync -aAXHv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /mnt/mounted_smb_storage

  3. rsync -aAXHv --exclude-from=/path/to/excludelist.txt / /mnt/mounted_smb_storage

无论带引号还是不带引号...

只要我使用根目录作为源,它似乎总是忽略 --exclude 命令。一旦我使用像/mntand use这样的源--exclude /mnt/*,它就会像它应该的那样忽略目录

我使用 Debian 11 和 rsync 版本 3.2.3 协议版本 31

答案1

rsync我通过卸载解决了这个问题apt purge rsync

rsyncmaria-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备份和恢复,以便元数据属性(例如所有权)可以与每个目标文件一起记录。

相关内容