我正在使用 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);
我的问题是,如何保证文件系统阻止文件连续?感谢您的时间并感谢您的回答。
答案 0 :(得分:0)
从XFS邮件列表得到答案,结果是默认的inode分配器的问题。使用inode64挂载,如果AG中有足够的磁盘空间,则文件在内部和外部都是连续的。从默认的inode32分配器开始,总是尝试在每个分配的AG之间轮换。