2012-11-05 20 views
0

我正在使用CentOS5.8,與XFS文件系統擴展存儲磁盤。我想要做的是,預先分配許多文件,連續的文件系統塊,包括單個文件和交叉文件。如何使用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

從XFS郵件列表中得到答案,原來這是默認inode分配器的問題。使用inode64掛載,並且如果AG中有足夠的磁盤空間可用,則文件將在內部和外部連續存在。由於默認的inode32分配器,總是嘗試在AG之間爲每個分配輪換。