tar:选择增量存档时的潜在错误(?) - 删除目标中的文件

tar:选择增量存档时的潜在错误(?) - 删除目标中的文件

我有一个非常有趣的观察,这可能是一个错误的表现。

我的用例是:

  • 备份一个文件夹,并将该文件夹中的一组文件添加到 --exclude-from 文件中。我正在使用增量备份(-g 选项集)
  • 在新机器上,将 tar 恢复到与原始机器上相同的位置。注意,新机器该位置已经有一些文件;如果存在任何东西,我想替换/覆盖它。

重现步骤

  1. 创建文件和文件夹结构如下:

    /tmp/src
    └── etc
        ├── A.cfg
        └── config
            ├── 1.cfg
            ├── 2.cfg
            └── 3.cfg
    
  2. 创建排除和包含文件

    mbp:tarTests jhartman$ cat /tmp/include.cfg
    /tmp/src/etc/
    mbp:tarTests jhartman$ cat /tmp/exclude.cfg
    /tmp/src/etc/config/*.cfg
    
  3. 创建档案

    $ rm -f /tmp/snapshot 
    $ tar -g /tmp/snapshot -cvz -f /tmp/test.tar.gz -X /tmp/exclude.cfg -T /tmp/include.cfg
    
    
    ./tar-1.27/src/tar: /tmp/src/etc: Directory is new
    ./tar-1.27/src/tar: /tmp/src/etc/config: Directory is new
    ./tar-1.27/src/tar: Removing leading `/' from member names
    /tmp/src/etc/
    /tmp/src/etc/config/
    /tmp/src/etc/A.cfg
    
  4. 取消存档到新服务器。取消归档之前,新服务器中的文件:

    /tmp/src
    └── etc
        ├── A.cfg
        └── config
            ├── 3.cfg
            ├── 4.cfg
            └── 5.cfg
    
    • 取消归档(在目标机器上)

      $TAR_BASE/src/tar --overwrite --extract --force-local --listed-incremental=/dev/null --file /tmp/test.tar.gz -v -C /
      
      tmp/src/etc/
      tmp/src/etc/config/
      ./tar-1.30/src/tar: Deleting ‘tmp/src/etc/config/4.cfg’
      ./tar-1.30/src/tar: Deleting ‘tmp/src/etc/config/5.cfg’
      tmp/src/etc/A.cfg
      

所以最终,该文件夹中的文件:

/tmp/src
└── etc
    ├── A.cfg
    └── config
        └── 3.cfg

正如您所看到的,尽管4.cfg它们5.cfg不在源机器中,但它们已经消失了。我猜这是因为/tmp/src/etc/config/*.cfg在排除文件中使用。

值得一提的是,这种行为在各个版本中都在变化:1.30、1.27、1.27.1、1.29 - NOK、1.25、1.26、1.28 - OK(其中 NOK 意味着 - 我可以看到删除我关心的文件的消息)。

你怎么认为?

谢谢你,贾里克

更新, 2018-08-21, 20:51

无论我运行哪个版本,--list操作的输出都是相同的并显示Dconfig文件夹中:

tar --list --incremental --verbose --verbose --file /tmp/test.tar.gz

drwxr-xr-x jhartman/staff   16 2018-08-21 20:44 tmp/src/etc/
Y A.cfg
D config

drwxr-xr-x jhartman/staff   22 2018-08-21 20:44 tmp/src/etc/config/
N 1.cfg
N 2.cfg
N 3.cfg

-rw-r--r-- jhartman/staff   30 2018-08-21 20:44 tmp/src/etc/A.cfg

更新 21:03

作为参考,我用于测试的脚本存储在https://github.com/jaroslawhartman/tar-tests回购。

请参阅output.txt参考资料 详细的测试结果。

相关内容