如何对另一个进程正在使用的文件进行 tar 压缩?

Ram*_*Ram 3 linux perl tar archive

我正在归档一个目录。该目录有一个正在被另一个进程写入的文件。当我使用 Linux tar/Perl Tar 模块对其进行 tar 时,在存档中文件的条目在那里,但内容为空。

在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
Run Code Online (Sandbox Code Playgroud)

解压后

-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
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?我希望该文件与它在存档时的内容一起保存在存档中。这个文件可以是一个日志文件,并假设我们不能在tarring之前关闭文件句柄。

Tom*_*ner 5

当您用“Linux”标记问题时,您可能正在使用 LVM 分区。如果您确实在 LVM 分区上运行,则可以使用 LVM 快照功能。

这是有关如何执行操作的相关LVM 文档的链接。

这是LVM 快照介绍的一部分:

LVM 提供的一个很棒的工具是“快照”。这允许管理员创建一个新的块设备,该设备呈现逻辑卷的精确副本,在某个时间点冻结​​。通常,当需要在逻辑卷上执行某些批处理(例如备份),但您不想停止正在更改数据的实时系统时,将使用此方法。当快照设备完成后,系统管理员可以移除该设备。此功能确实要求在逻辑卷上的数据处于一致状态时创建快照——LVM1 的 VFS 锁补丁确保某些文件系统在创建快照时自动执行此操作,并且许多2.6 内核中的文件系统在不打补丁的情况下创建快照时会自动执行此操作。