【问题标题】:Full tar backup on Linux, excluding certain root foldersLinux 上的完整 tar 备份,不包括某些根文件夹
【发布时间】:2015-03-10 18:36:13
【问题描述】:

我有一个问题,我似乎找不到答案。

我正在尝试编写一个 shell 脚本来使用 tar 进行完整的系统备份。显然,有几个文件夹我不想备份(/dev、/mnt、/proc、/tmp 等)。有相当多的文件夹我不想备份,所以我使用“exclude-from”标志来保持命令相对干净。

问题是,它不起作用。

这是我正在使用的 tar 标志:

--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”标志似乎不起作用(我宁愿不使用它们)。我尝试将 '--exclude-from $EXCLUDE_FILE' 更改为 '--exclude-from=$EXCLUDE-FILE',我确保每行和其他一些内容之后没有空格(不记得它们,事情开始变得模糊起来)。

我一直在阅读 tar 模式,所以看看是否有我遗漏的东西,我还没有遇到任何东西。出于安全目的,我试图查看这是否与 tar 剥离前导斜杠有关,但我还没有找到任何东西。

在谷歌搜索时,我发现唯一的帮助是一个人在做同样的事情并通过从他的排除文件条目中删除前导“/”来解决它。我已经尝试过了,它可以工作,但它排除了所有文件夹而不是根文件夹。我的家中可能会有一个“媒体”文件夹,我想备份该文件夹,但不备份 /media 文件夹,因此这不是一个合适的解决方案。

【问题讨论】:

    标签: linux tar archlinux


    【解决方案1】:

    所以去想,我在发布 30 分钟后找到了一个可能的解决方案。如果我将排除文件条目更改为以“./”(而不是“/”)开头,它似乎可以工作。这是有道理的,因为我将目录更改为 root 所以 ./media === /media。

    但是,我还不打算将此标记为答案。我非常想将我的排除文件条目保留为“/”而不是“./”,这样很明显我排除了根文件夹。是的,我可以在排除文件中留下评论说当前目录是根目录,但如果可以的话,我宁愿避免它。

    【讨论】:

    • 既然你用的是Arch,你有没有看过the ArchWiki post on this subject?您可能会对有关 rsync 的部分感兴趣,因为它完成了大部分工作并且还支持增量备份(仅支持更改的部分)。我可能是错的,但我相信 tar 每次都会创建一个全新的 tarball。
    • 是的,我有。我选择 tar 有多种原因(它可以进行增量/差异备份)。我还阅读了wiki.archlinux.org/index.php/Full_System_Backup_with_tar,它正在做我正在尝试的事情(排除具有绝对路径的文件)。但是,我在它和我正在做的事情之间看到的唯一区别是它们在标志之后有一个“=”,一个用于排除目录的尾随“/”(据我所知,我不想要,因为它会复制文件夹而不是内容,我不想复制文件夹期间)和不同的标志顺序,所有这些我都试过了。
    • 好的。我对 tar 了解不多,无法帮助您。如果您还没有,您可以考虑在 Arch 论坛上发帖或在 reddit.com/r/archlinus 上自行发帖
    【解决方案2】:

    虽然ArchWiki 包含有关如何执行full system backup with tar 的说明,但您可能希望改用rsyncArchWiki 还描述了如何执行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 以外的位置备份系统,请不要忘记将其添加到排除模式列表中以避免无限循环。另外,如果系统中有任何绑定挂载,也应该排除它们,以便绑定挂载的内容只复制一次。

    【讨论】:

    • 我很高兴被告知替代方案,但是我确实阅读了有关使用 rsync 的内容,而是选择使用 tar。
    • @anEverydayGuy:请问为什么?
    • 最终归结为它们的设计目的(因此最擅长,尽管两者都能够完成这项工作)。 Tar 设计用于备份/长期存储,而 rsync 设计用于镜像/传输文件。 tar 很容易做完整/差异/增量备份;让 rsync 进行差异备份更复杂。另外,我首先得到了 tar 工作(同时尝试了两者),并且我对 tar 有更多的经验。
    • @anEverydayGuy:Tar 最初是为运行磁带备份而开发的,这就是名称的来源 - (T)ape (ar)chive。今天,tar 实际上只是一个存档实用程序。是的,您可以使用它来运行备份,因为它包含这些选项,但 rsync 是一种更新的、更通用的工具,它更适合执行数据备份,因为它默认执行镜像并内置远程文件传输。但是,我以前从来不需要创建差异(或“真正的”增量)备份,所以我真的无法评论。也许这会有所帮助:rsync.samba.org/examples.html
    • 如果您想通过网络连接使用rsync,即备份到远程服务器,那么添加-z 标志以启用数据压缩会很有用。当然是 YMMV。
    猜你喜欢
    • 2013-08-02
    • 2010-11-02
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多