我归档的目录。此目录下有正在被另一个进程写入的文件。当我焦油这个使用Linux焦油/ Perl的焦油模块,在存档的文件中的条目是有,但内容是空的。

tarring之前的文件...

-rw-r--r--  1 irraju dba 28 Feb 18 02:22 a
-rw-r--r--  1 irraju dba 25 Feb 18 02:23 b
-rw-r--r--  1 irraju dba 29 Feb 18 03:38 c

解包后

-rw-r--r-- irraju/dba       28 2009-02-18 02:22:58 a
-rw-r--r-- irraju/dba       25 2009-02-18 02:23:17 b
-rw-r--r-- irraju/dba        0 2009-02-18 03:33:12 c

我怎样才能解决这个问题呢?我要的文件要与它在瞬间被存档内容存档。此文件可以是一个日志文件,并假设我们不能tarring之前关闭文件句柄。

有帮助吗?

解决方案

当你与“Linux的”标签的问题有您使用的是LVM分区的机会。 如果确实是你在一个LVM分区上运行,你可以使用LVM快照功能。

下面是有关 LVM文档的链接,关于如何执行操作

这里的 LVM快照介绍

  

由LVM提供精彩设施是“快照”。这允许管理员创建一个新的块设备呈现一个逻辑卷的精确副本,在某个时间点被冻结。通常,这将被用来当一些批量处理,例如备份,需要在逻辑卷上进行的,但你不想停止正在改变数据的实时系统。当快照设备已完成与系统管理员可以只删除设备。这家工厂确实需要该快照时逻辑卷上的数据是一致的状态时进行 - 为LVM1的VFS锁补丁可以确保一些文件系统创建快照时,自动做到这一点,很多的当没有修补是创建快照在2.6内核文件系统自动执行此操作。

其他提示

首先尝试复制文件......

cp a a.tmp
cp b b.tmp
cp c c.tmp

...然后压缩包都在一起...

tar *.tmp abc.tar

...和清理:

rm *.tmp

如果不工作,那么过程拿着文件句柄不希望共享的读取权限...

您可以发现,这取决于所用文件系统和正在访问该文件的应用程序。最接近于一个通用的解决方案是使用支持快照文件系统并运行焦油之前创建的快照。

你的第二个输出是由的之后的第一个,不能是正确的。我猜测,tar就在这里:当它做它的工作,该文件是空的。您可这里处理中的竞争条件。

正如其他人所说,这取决于文件系统&正在使用OS上。 sync第一(或其他等值是在文件系统上),将文件复制到一个临时目录,然后焦油起来。如果文件系统不会让你复制一个打开的文件,那么你就SOL; Perl中无法回避的文件系统的限制。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top