我正在尝试构建一个备份脚本,该脚本每晚都会从我的系统中创建一个完整的 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。