我有一个包含大量结果日志文件(目录大小~4GB)的目录,以及一组正在运行并不断写入这些文件的进程。
为了能够在稍后正确分析结果,我想将整个目录复制到存档目标,并且我无法停止该过程。
我想要一个目录在特定时间点的副本。由于目录大小很大(这意味着复制需要大约 40 秒)并且一些文件正在被写入,因此正常情况下cp -r
不会给我一个特定时间点的快照,而是给我一个分布在 40 秒内的文件快照。这还不够好。
有没有办法在复制时获取目录及其所有组件的独占锁?
答案1
LVM(逻辑卷管理器)支持快照。由于所有 Linux 发行版都内置了 LVM,因此这对您来说是最简单的。唯一的缺点是您需要重新创建文件系统。
答案2
如果 cp 需要太长时间才能提供您需要的结果,您很可能不会对其他选项感到满意。Unix copy 是 I/O 开销最基本的选项。
但是,如果您通过在磁盘和文件更改时利用另一个管理进程来延迟 I/O 进程,则开销可能并不重要。我的意思是,您可以在虚拟机中运行该进程(如果可能的话),尝试使用 rsync 或甚至 subversion 进行快照。
我能想到的唯一其他事情可能是将日志输出传输到符号链接并使用批处理文件将链接更新到辅助位置。
例如:
文件.log -> /mnt/disk1/logarea/文件.log
文件.log -> /mnt/disk/logarea2/文件.log
这样您就可以立即更新符号链接,并将输出管道传输到新的位置。
您甚至可以编写一个批处理文件来更新链接,数到 45 秒,然后将其切换回来 - 从而隔离您需要的数据。
只是想法,祝你好运。
答案3
另一种方法是使用日志旋转每周/每天/每小时存档日志,那么您基本上就会拥有该间隔的快照。
答案4
坦白说,对于你要求的,对我而言唯一有用的是 ZFS-FUSE。Linux 也有原生的 ZFS,但目前还不能用。