是否可以使用 tar 进行完整系统备份?

Som*_*net 5 linux tar backup

是否有充分的理由不使用tar根目录上的命令进行完整系统备份?或者,是否有更好的方法来创建 Linux 系统的完整副本?

sch*_*ily 3

基于 tar 的备份是否适合您取决于您​​想要归档的元数据类型以及您使用的 tar 实现。

GNU tar 最近添加了对 Linux ACL 的支持,但该支持存在缺陷,可能是使用不在存档中、而是从父目录继承的 ACL 提取文件。这可能会向不应具有此访问权限的用户授予访问权限。

类似的问题也适用于 GNU tar 中的 SELinux 支持。

如果您不依赖这种元数据并且不打算进行增量备份,则可以使用 GNU tar。

顺便说一句:最新版本star(在 schilytools 中)添加了 SELinux 支持。

相信可以使用 GNU tar 进行增量备份的人应该运行此脚本来验证它是否不起作用。相关的 bug 报告已于 2004 年 9 月、2011 年和 2016 年发送给 GNU tar 维护者,这个 bug 已经存在 14 年了:

if [ "$gtar" ]; then
    #
    # Permit: gtar=/tmp/tar-1.30/src/tar sh gnutarfail.sh
    #
    GT=`"$gtar" --help 2> /dev/null | grep GNU`
else
    GT=`gtar --help 2> /dev/null | grep GNU`
    if [ "$GT" ]; then
            gtar=gtar
    else
            # Some systems have "gtar" installed as "tar"
            GT=`tar --help 2> /dev/null | grep GNU`
            if [ "$GT" ]; then
                    gtar=tar
            fi
    fi
fi
if [ -z "$GT" ]; then
    echo No gtar found
    exit 1
fi
echo gtar installed as $gtar
# Preparation complete
#-----------------------------------

cd /tmp
mkdir test.$$
cd test.$$

set -x

mkdir test
mkdir test/dir1
mkdir test/dir2

echo dir1-file > test/dir1/dir1-file
echo dir2-file > test/dir2/dir2-file

$gtar -g/tmp/test.$$/listed-incr -c -f /tmp/test.$$/full.tar test

rm -rf test/dir2
mv test/dir1 test/dir2

$gtar -g/tmp/test.$$/listed-incr -c -f /tmp/test.$$/incremental.tar test

mv test orig

$gtar -x -g/dev/null -f /tmp/test.$$/full.tar
$gtar -x -g/dev/null -f /tmp/test.$$/incremental.tar
Run Code Online (Sandbox Code Playgroud)

  • 它不适用于大多数重命名目录的情况,因为“gtar”使用不跟踪文件标识(inode 号)的存档格式,并且因为“gtar”允许进行跨挂载点的增量备份。另一侧的“star”跟踪存档中的 inode 编号,并在恢复期间使用原始和当前 inode 编号创建数据库。这使得“star”能够可靠地检测重命名并在恢复期间执行正确的操作。“star”增量存档保存所有需要的元数据,但比“gtar”存档小(gtar 将整个树存档在触摸的目录后面) (2认同)