我有一个问题,我似乎无法找到答案。
我试图编写一个shell脚本来使用tar进行完整的系统备份。显然,有几个我不想备份的文件夹(/ dev,/ mnt,/ proc,/ tmp等)。我不想备份相当数量的文件夹,所以我使用了' exclude-from'标志以保持命令相对干净。
问题是,它无法正常工作。
以下是我使用的焦油标志:
--create
--file $BACKUP_FILE
--preserve-permissions
--same-owner
--numeric-owner
--listed-incremental $INCREMENTAL_FILE
--level=0
--xz
--directory /
--exclude-caches
--exclude-from $EXCLUDE_FILE
-v
这是我的排除档案:
/dev
/lost+found
/media
/mnt
/proc
/run
/sys
/tmp
/var/spool
/var/run
/var/tmp
当我运行我的脚本时,它仍然备份那些我不想备份的文件夹。切换到一堆' - 排除'标志似乎不起作用(我宁愿不使用它们)。我已尝试更改' - 排除 - 来自$ EXCLUDE_FILE' to' - exclude-from = $ EXCLUDE-FILE',我确保在每行之后没有空格和其他一些东西(不能记住它们,事情开始模糊起来了。)
我一直在阅读焦油图案,所以看看是否有我遗失的东西,我还没有遇到任何东西。为了安全起见,我试图查看这是否与tar剥离前导斜杠有关,但我还没有找到任何东西。
虽然谷歌搜索我发现的唯一有帮助的东西是一个人在做同样的事情并通过删除领先的' /'来解决它。从他的排除文件条目。我已经尝试了它并且它有效,但它排除了所有文件夹而不是根文件夹。我可能会有一个媒体'我家中的文件夹,我想要备份那个文件夹而不是/ media文件夹,所以这不是一个合适的解决方案。
答案 0 :(得分:4)
虽然ArchWiki包含有关如何执行full system backup with tar的说明,但您可能希望使用rsync。 ArchWiki还介绍了如何执行full system backup with rsync。以root身份运行:
rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /* /path/to/backup/folder
-aAX
选项集将确保使用“归档模式”。这可确保保留符号链接,设备,权限和所有权,修改时间,ACL和扩展属性。
请注意,rsync还可以读取文件中的排除模式,因此您的用例可能类似于:
rsync -aAXv --exclude-from=FILE /* /path/to/backup/folder
如果您打算在/mnt
或/media
以外的地方备份系统,请不要忘记将其添加到排除模式列表中以避免无限循环。此外,如果系统中存在任何绑定挂载,则也应将它们排除在外,以便仅将绑定挂载的内容复制一次。
答案 1 :(得分:2)
所以,我想在发布后30分钟找到了可能的解决方案。如果我将排除文件条目更改为以“./”(而不是“/”)开头,它似乎可以正常工作。这是有道理的,因为我正在将目录更改为root ./media === / media。
但是,我不打算将此标记为答案。我非常希望将我的排除文件条目保留为'/'而不是'./',这样很明显我排除了根文件夹。是的,我可以在排除文件中留下一条评论,说当前目录是根目录,但如果可以,我宁愿避免使用它。