Tar 退出代码非零

Tar 退出代码非零

我正在尝试构建一个备份脚本,该脚本每晚都会从我的系统中创建一个完整的 tarball。为此,我遵循了教程这里

为了测试它,我决定创建一个手动备份:

tar -cvpzf backup.tar.gz --exclude=/backup.tar.gz --one-file-system / 

当我尝试运行此命令时出现错误:

tar: /run/: file is on a different filesystem; not dumped

这会导致退出代码为 1。但是,我想在脚本中运行此命令,如果返回代码为,0我想移动输出文件,否则删除它。如果我从上面链接的教程中理解正确,则--one-file-system意味着/run/被忽略。但为什么我会收到错误呢?

为了完整性,脚本(WIP)如下所示:

#!/bin/bash

# Location to store backups
STORAGE=/media/storage/backups/full
# Current date
DATE=$(date +"%d.%m.%YT%H.%M")
TAR="$DATE.tar.gz"


# Check if the file already exists. Should never be the case though.
if [ ! -f /tmp/$TAR ]; then

    echo "Changing dir to /"
    cd /
    # Create tarball
    echo "Creating tarball"
    tar -cvpzf /tmp/$TAR --exclude=/tmp/$TAR --one-file-system /
    retcode=$?

    echo "Exit status: $retcode"

    if [ $retcode = 0 ] ; then
        echo "Moving file.."
        # Move the file
        mv /tmp/$TAR $STORAGE/$TAR
        echo "Done!"
    fi
fi

答案1

您应该--one-file-system在排除规则之前先声明。您遵循的同一指南中有说明。

如果您想要排除当前挂载之外的所有其他挂载(我指的是挂载到目录的分区),则使用在排除规则之前附加的 --one-file-system 选项。这可以阻止 tar 跨越到任何目录中的任何其他挂载,包括 /mnt 或 /media。

相关内容