私は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);
私の質問は、ファイル システムのブロックが連続していることをどのように保証できるかということです。お時間をいただき、ありがとうございます。