Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash tar增量复制错误_Bash_Tar - Fatal编程技术网

Bash tar增量复制错误

Bash tar增量复制错误,bash,tar,Bash,Tar,我查看了其他相关帖子(关于如何制作增量tar副本的类似问题),他们的答案不适用于我的案例 问题是: 我有一个很大的目录(大约700/800Gb),其中有许多子目录,内容在/storage中。 副本存储在/storage/backup目录中 如果我们将拷贝限制在一个/storage/子目录(8Gb长度),那么首先完成tar工作,然后再进行增量拷贝似乎是正确的(只有一些Kb长度)。 如果我们在/storage(不包括/storage/backup)中执行tar,则完成tar后会抛出一个错误(-2),

我查看了其他相关帖子(关于如何制作增量tar副本的类似问题),他们的答案不适用于我的案例

问题是: 我有一个很大的目录(大约700/800Gb),其中有许多子目录,内容在/storage中。 副本存储在/storage/backup目录中 如果我们将拷贝限制在一个/storage/子目录(8Gb长度),那么首先完成tar工作,然后再进行增量拷贝似乎是正确的(只有一些Kb长度)。 如果我们在/storage(不包括/storage/backup)中执行tar,则完成tar后会抛出一个错误(-2),但如果我们测试它,它似乎会正确解压缩,我们必须在增量备份之后停止它,因为它开始增长,并且似乎增长到与comlpete备份相同的大小。 同一个原始脚本在其他服务器上运行,具有更多内容,增量大小应仅为1/2Gb,不会不断增长

脚本简化代码。应该完成的日期是硬编码的第12天示例,如果我们在12日启动它,它将生成完整的副本,如果在启动增量副本后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的拷贝)没有错误。