我正在寻找一种无需执行大量 IO 即可占用 AIX 文件系统中空间的方法。
我已经尝试过了dd
并且lmktemp
。 dd
创建稀疏文件,但不锁定空间。lmktemp
工作做得很好,但是有一些 IO 并且有点耗时。我相信fallocate
速度很快而且没有IO。
答案1
您的问题的字面答案是:不,AIX 不提供该命令fallocate。 AIX 提供了库调用 posix_fallocate()。
更多细节:
root@x066:[/data/prj/python/python3-3.6.8]find /usr/include -name \*.h | xargs egrep "(fallocate|truncate)64\("
/usr/include/unistd.h: extern int ftruncate64(int, off64_t);
/usr/include/unistd.h: extern int truncate64(const char *, off64_t);
root@x066:[/data/prj/python/python3-3.6.8]find /usr/include -name \*.h | xargs egrep "(fallocate|truncate)\("
/usr/include/fcntl.h:extern int posix_fallocate(int,off_t,off_t);
/usr/include/sys/fp_io.h:fp_ftruncate( struct file *fp,
/usr/include/sys/fp_io.h:extern int fp_ftruncate();
/usr/include/unistd.h: extern int ftruncate();
/usr/include/unistd.h: extern int truncate();
/usr/include/unistd.h: extern int ftruncate(int, off_t);
/usr/include/unistd.h: extern int truncate(const char *, off_t);
至于 dd 提供“稀疏”文件,而不是锁定空间。我的理解是,这是“稀疏”文件的定义——占用的逻辑空间,而不是物理空间。此外,re: dd,如果没有给出“seek”参数,那么文件不应该是稀疏的 - 但会花费 IO 子系统的时间和精力。
是的 - 很久以后才有答案 - 但那是因为我正在 AIX 上研究 Fallocate - 以及我在 AIX 上使用 Fallocate() (调用!,实际上是 posix_fallocate())的应用程序中发现的一个可能的错误。
希望这可以帮助!
答案2
您可以使用 truncate() 系列(ftruncate() 等)的调用不仅可以减少文件,还可以扩展文件。只需将它们“截断”为比当前尺寸更大的尺寸即可。在支持有漏洞的文件的文件系统上,它会很快,比将所需的空块附加到文件末尾要快得多。