我正在使用CentOS5.8,带有XFS文件系统扩展存储磁盘。我想要做的是,预先分配许多文件,在文件系统中具有连续块,包括单个文件和交叉文件。
我可以通过posix_allocate()进行分配,问题是 API 将所有磁盘空间归零,我不能浪费时间。然后我尝试了 XFS 指定 API xfsctl(),带有XFS_IOC_RESVSP"标志,我可以更快地保留空间。
xfsctl()的问题是,它可以使单个文件的块连续,但文件上的块不连续。比如10个文件,a/b/c/d/e/f...保留。在我对这些文件进行真正的写入之后,事实证明文件'b'不在文件'a'旁边,并且某些文件可能与前一个文件和下一个文件都相距甚远,尽管其他文件可能与每个文件相邻其他,很少。
我使用以下代码进行预分配:
ftruncate(fd, FILE_SIZE);
xfs_flock_t flag = {0};
flag.l_whence = SEEK_SET;
flag.l_start = 0;
flag.l_len = 512*1024*1024;
xfsctl(fileName, fd, XFS_IOC_RESVSP64, &flag);
我的问题是,如何保证文件系统连续阻塞文件?感谢您的宝贵时间并感谢您的回答。