我们正在使用 Logstash 来摄取我们的日志,并且由于 inode 被重用,我们正面临一些问题。我们在 Logstash 方面尝试了所有可能的选项,因此我们正在探索操作系统方面。
据我所见,如果我创建一个文件,将其删除,然后再创建一个新文件,大多数情况下它将获得相同的 inode
[root@XXXX~]# touch a.txt
[root@XXXX~]# stat -c%i a.txt
671092802
[root@XXXX~]# rm a.txt
rm: remove regular empty file ‘a.txt’? y
[root@XXXX~]# touch a.txt
[root@XXXX~]# stat -c%i a.txt
671092802
[root@XXXX~]# rm a.txt
rm: remove regular empty file ‘a.txt’? y
[root@XXXX~]# touch b.txt
[root@XXXX~]# stat -c%i b.txt
671092802
如何防止带有 XFS 的操作系统将最近使用的 inode 重用于新文件?
理想情况下,我们希望定义从文件被删除到 inode 被重用之间的时间段。磁盘很大,所以我们预计问题不会达到 inode 限制。
谢谢
防止创建具有给定 inode 编号的文件的唯一方法是如果已经有一个(或者如果 inode 值是文件系统不会使用的一个,当然)。您不能保留 inode 值。通过通用接口(即通过不特定于特定文件系统类型的接口)是正确的,大多数文件系统都是如此(即大多数没有保留 inode 编号的专有方法),并且就我而言毫无疑问,这对于 XFS 来说尤其如此。
如果您在删除一个文件后立即创建一个新文件,那么在许多文件系统上,大多数情况下,新文件将具有与刚刚删除的文件相同的 inode。但这永远无法保证。
如果您希望 inode 继续使用,请不要删除该文件。如果需要,您可以截断它(例如
truncate -s0 /path/to/file
或: >|/path/to/file
)以节省磁盘空间。如果某个工具正在探索一个目录并且您不希望该工具再看到该文件,则可以将其移动到同一文件系统上的另一个目录。