Bash tar增量复制错误
我查看了其他相关帖子(关于如何制作增量tar副本的类似问题),他们的答案不适用于我的案例 问题是: 我有一个很大的目录(大约700/800Gb),其中有许多子目录,内容在/storage中。 副本存储在/storage/backup目录中 如果我们将拷贝限制在一个/storage/子目录(8Gb长度),那么首先完成tar工作,然后再进行增量拷贝似乎是正确的(只有一些Kb长度)。 如果我们在/storage(不包括/storage/backup)中执行tar,则完成tar后会抛出一个错误(-2),但如果我们测试它,它似乎会正确解压缩,我们必须在增量备份之后停止它,因为它开始增长,并且似乎增长到与comlpete备份相同的大小。 同一个原始脚本在其他服务器上运行,具有更多内容,增量大小应仅为1/2Gb,不会不断增长 脚本简化代码。应该完成的日期是硬编码的第12天示例,如果我们在12日启动它,它将生成完整的副本,如果在启动增量副本后2天,它似乎会增长到完整的大小Bash tar增量复制错误,bash,tar,Bash,Tar,我查看了其他相关帖子(关于如何制作增量tar副本的类似问题),他们的答案不适用于我的案例 问题是: 我有一个很大的目录(大约700/800Gb),其中有许多子目录,内容在/storage中。 副本存储在/storage/backup目录中 如果我们将拷贝限制在一个/storage/子目录(8Gb长度),那么首先完成tar工作,然后再进行增量拷贝似乎是正确的(只有一些Kb长度)。 如果我们在/storage(不包括/storage/backup)中执行tar,则完成tar后会抛出一个错误(-2),
#!/bin/bash
name_backup="mybck"
data_dir="/storage"
dir_bkp="/storage/backup/MonthCopy"
data_dirs_exclude="/storage/backup"
make_complete_day="${1:-12}"
mydate="$(date "+%Y%m%d")"
#Filenames
fname_bkp="${dir_bkp}/${name_backup}-${mydate}"
fname_inc="${dir_bkp}/mybck.incremental"
fname_inc_save="${dir_bkp}/mybck.incremental.save"
fname_log="${fname_bkp}.log"
#Compression parameters
export XZ_OPT="-3 -T0 -Csha256"
today="$(date "+%d")"
if [ "${make_complete_day}" -eq "${today}" ]
then
echo Its _complete copy
fname_bkp="${fname_bkp}-complete.tar.xz"
time nice -n 19 ionice -c2 -n7 tar -cpf "${fname_bkp}" --use-compress-
program=xz --exclude="${data_dirs_exclude}" --listed-incremental
"${dir_bkp}/snapshot.file" "${data_dir}" && {
echo "Copy OK($?).";
} || {
err=$?
echo "Error in copy($err)."
}
else
echo Incremental copy
fname_bkp="${fname_bkp}-incremental.tar.xz"
time nice -n 19 ionice -c2 -n7 tar -cpf "${fname_bkp}" --use-compress-
program=xz --exclude="${data_dirs_exclude}" --listed-incremental
"${dir_bkp}/snapshot.file" "${data_dir}" && {
echo "Copia OK($?).";
} || {
err=$?
echo "Error in copy($err)."
}
fi
Tar版本是:Tar(gnutar)1.26
在此之后,我的tar完整和增量拷贝是否有任何错误?
如果没有,有没有关于尝试什么的建议?
注意。您是否得到返回值2(
致命错误
)?我看不出如何得到-2,因为退出代码是无符号的。从GNU文档:如果tar调用了一个子流程,并且该子流程以非零退出代码退出,那么tar也会以该代码退出。这可能会发生,例如,如果给tar一些压缩选项。。。外部压缩机程序失败。您收到任何发送到stderr的消息了吗?好的,错误代码是2。控制台没有更多消息,只有一些文件错误不存在,需要3天才能完成,同时一些文件被添加或从/storage目录中删除。例如,我在想如果--exclude不能正常工作,因为所有子目录都是数字格式,可以在tar中使用一些掩码来包含all/storage/beginwithnumber,作为不使用--exclude的替代方法。你怎么能检查它?如果xz失败,这是一个问题,因为使用这些参数的xz压缩比使用tar中的标准J选项要多得多,效率和压缩比要高得多。您是否可以尝试使用少量不存在或不存在文件的文件?C中的错误2是enoint,没有这样的文件或目录,所以它可能只是表明了这一点。对同一个小集合进行实验会发现这是否正确。cdarke,我在一个1.5Gb的子目录中执行了这个脚本,大约有3000个文件,花了3分钟,在运行它之前,我们将一个文件复制为1,2。。到15,每10/20秒我就手动删除一个复制的文件。我没有错。在我们更改脚本后的一天,它做了一个增量(只有一些Kb的拷贝)没有错误。