如何在文件夹中的文件可能由其他进程写入时tar文件夹

时间:2014-08-20 11:04:36

标签: bash cron tar

我正在尝试为cron作业创建一个脚本。我有大约8 GB的文件夹包含数千个文件。我正在尝试创建一个bash脚本,首先tar该文件夹,然后将tarred文件传输到ftp服务器。

但我不确定tar是否正在使用该文件夹,而其他一些进程正在访问其中的文件或写入其中的文件。

虽然如果tar tar文件没有包含最近的更改,那么它对我来说没问题。

建议我正确的方法。感谢。

2 个答案:

答案 0 :(得分:1)

焦油会“无论它能做什么”。但是在解压缩时你可能会有一些惊喜,因为在皮重之前,tar还会存储它所称的文件的大小。所以期待一些惊喜。

  • 一个非常令人不快的惊喜是:如果大小被截断,那么tar将用“NUL”字符“填充”它以匹配它的记录大小......这会产生非常令人不快的副作用。在某些情况下,tar,当解开时,什么都不会说,并且默默地添加它需要匹配大小的NUL字符(事实上,在unix中,它甚至不需要这样做:操作系统执行它,请参阅“稀疏文件“)。在某些情况下,如果在文件去皮过程中发生截断,tar会抱怨它在解开时会遇到意外的文件结尾(因为它预计有XXX个字节,但只读取少于此数),但仍然会说该文件应该是XXX bytes(然后unix操作系统会将其创建为稀疏文件,并在末尾神奇地附加“NUL”字符以匹配预期的大小)。 (查看NUL字符:一个简单的方法是less thefile(或cat -v thefile | more在一个非常旧的unix上。查找任何^@

  • 但相反,如果文件只附加到(日志等),那么副作用就不那么成问题了:你只会错过它们的一些部分(你说你很好),并没有那种令人不愉快的“填充NUL字符”的副作用。 tar解压文件时可能会抱怨,但它会解压缩。

答案 1 :(得分:0)

我认为在归档期间修改归档文件时tar失败(因此不要创建归档)。正如Etan所说,解决方案取决于你最终在tarball中想要的东西。

为避免tar失败,您可以简单地将文件夹复制到其他地方以调用tar。但在这种情况下,您无法确信备份目录的一致性。这不是一个原子操作,因此一些文件将是todate而其他文件将过时。这可能是一个严重的问题或不符合您的情况。

如果可以,我建议您配置这些文件的创建方式。例如:“仅附加最近的文件,不会更改超过1天的文件”,在这种情况下,您可以轻松备份文件,备份将保持一致。

更一般地说,你必须接受松散的最后数据 AND 不一致(每个文件在不同的日期备份),或者你必须采取不同的行动。我建议:

  1. 配置生成数据的软件以选择一致性
  2. 或使用OS /虚拟化功能。例如,可以在某些虚拟存储上对存储执行一致的快照...