0

我正在使用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);

我的问题是,如何保证文件系统连续阻塞文件?感谢您的宝贵时间并感谢您的回答。

4

1 回答 1

0

从 XFS 邮件列表中得到答案,原来是默认 inode 分配器的问题。使用 inode64 挂载,如果 AG 中有足够的可用磁盘空间,则文件在内部和外部都是连续的。由于默认的 inode32 分配器,请始终尝试在每次分配的 AG 之间轮换。

于 2012-11-12T09:19:09.417 回答