linux调用
fallocate(fd, FALLOC_FL_KEEP_SIZE, offset, len);可用于在不增加文件长度的情况下为文件结束后的文件预分配空间。(对吧?)
问:当fd关闭时,这个磁盘空间会发生什么?是否释放了额外的空间,还是与文件保持关联?
如果它仍然与文件相关联,我如何释放该空间?截断(或open()和ftruncate())是否释放空间?
发布于 2021-12-30 23:43:04
问题:当fd关闭时,这个磁盘空间会发生什么?是否释放了额外的空间,还是与文件保持关联?
什么都没发生。所分配的空间独立于fd。
如果它仍然与文件相关联,我如何释放该空间?截断(或open()和ftruncate())是否释放空间?
truncate()是回收空间的主要方法。另一种方法是删除文件。您还可以尝试在文件的“过度分配”部分上使用FALLOC_FL_PUNCH_HOLE和FALLOC_FL_KEEP_SIZE调用file (),尽管这看起来很麻烦,可能会留下工件。
在遮罩下,用FALLOC_FL_KEEP_SIZE扩展文件将分配文件系统中的块,但将它们标记为未初始化。并不是所有的文件系统都支持这一点。到目前为止,这与没有保持大小标志的调用flag ()是一样的。保持大小标志的不同之处在于,它将使inode (独立于块分配)中的size字段保持不变。所有这些都发生在磁盘上;在shell中,可以使用
ls -s或
stat要观察真正分配的块计数,可以独立于使用哪个进程/fd进行fd()调用。
https://stackoverflow.com/questions/67296238
复制相似问题