Full tar backup on Linux, excluding certain root folders
我有一个问题似乎找不到答案。
我正在尝试编写一个shell脚本来使用tar进行完整的系统备份。显然,有几个文件夹我不想备份(/dev,/mnt,/proc,/tmp,等等)。有相当多的文件夹我不想备份,所以我使用"排除在"标志来保持命令相对干净。
问题是,它不起作用。
以下是我使用的焦油标记:
1 2 3 4 5 6 7 8 9 10 11 12 | --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 |
这是我的排除文件:
1 2 3 4 5 6 7 8 9 10 11 | /dev /lost+found /media /mnt /proc /run /sys /tmp /var/spool /var/run /var/tmp |
当我运行脚本时,它仍然备份那些我不想备份的文件夹。切换到一组"--exclude"标志似乎不起作用(我宁愿不使用它们)。我尝试将"--exclude from$excludeu file"改为"--exclude from=$exclude-file",我确保每行后面没有空格,还有其他一些东西(不记得了,事情开始变得模糊起来)。
我一直在读关于焦油形态的文章,所以看看是否有我遗漏的东西,我还没有发现任何东西。我试着去看看这是否与出于安全目的的沥青剥离导致的割伤有关,但我还没有找到任何东西。
在谷歌搜索时,我发现只有一个人做了同样的事情,并通过从他的排除文件条目中删除前导的"/"来解决问题。我已经尝试过了,但它排除了所有文件夹,而不是根文件夹。我可能在家里有一个"媒体"文件夹,我想备份它,但不备份/media文件夹,所以这不是一个合适的解决方案。
尽管archwiki包含了如何使用tar执行完整系统备份的说明,但您可能希望改用rsync。Archwiki还描述了如何使用rsync执行完整的系统备份。作为根,运行:
1 | rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /* /path/to/backup/folder |
请注意,rsync还可以从文件中读取排除模式,因此您的用例可能类似于:
1 | rsync -aAXv --exclude-from=FILE /* /path/to/backup/folder |
如果您计划将系统备份到除
所以你想想,我在发帖30分钟后找到了一个可能的解决方案。如果我将排除文件项改为以"./"(而不是"/")开头,它似乎可以工作。这很有意义,因为我正在将目录更改为根目录,所以./media==/media。
不过,我现在还不打算把这个标记为答案。我非常希望将排除文件条目保留为"/",而不是"./",这样很明显我将排除根文件夹。是的,我可以在exclude文件中留下一条注释,说明当前目录是根目录,但是如果可以的话,我宁愿避免它。