一尘不染

删除文件开头而不重写整个文件

linux

我有一个嵌入式Linux系统,该系统将数据存储在一个很大的文件中,并将新数据附加到末尾。随着文件大小逐渐接近可用存储空间,我需要删除最旧的数据。

问题是,我不能真正接受像往常一样将大量数据“向上”移动到文件上所造成的破坏-长时间锁定文件以重写它(加上这是闪存介质) ,则会对闪光灯造成不必要的磨损)。

可能最简单的方法是将文件拆分为多个较小的文件,但这与数据的处理和处理方式有关,这有几个缺点-
所有“客户端”软件都希望使用单个文件。OTOH可以处理将第一条记录切成两半的“损坏”,因此不需要在记录偏移处修剪文件,而只需“在某处”,例如,释放了头几个iNode。无论如何,最旧的数据已经过时了,因此只要“尾巴”保持整洁,并且文件的开头部分可以更精确地删除,就可以完全接受文件开头的更严重损坏-“大约几兆字节”就可以了,无需“精确到第一个4096KB”精度。

是否有一些方法,API,技巧,黑客来截断像这样的文件开头?


阅读 225

收藏
2020-06-07

共1个答案

一尘不染

您可以使用上面针对ext4 / xfs文件系统的Linux内核v3.15实现此目标。

int ret = fallocate(fd, FALLOC_FL_COLLAPSE_RANGE, 0, 4096);
2020-06-07