如何修改XFS预分配块的数量



我写了一个简单的程序,并在ext4和xfs上运行。

#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
int
main(int argc, char *argv[])
{
        int fd;
        char *file_name = argv[1];
        struct stat buf;
        fd = open (file_name, O_RDWR|O_CREAT);
        if (fd == -1) {
                printf ("Error: %sn", strerror(errno));
                return -1;
        }
        write (fd, "hello", sizeof ("hello"));
        fstat (fd, &buf);
        printf ("st_blocks: %lun", buf.st_blocks);
        stat (file_name, &buf);
        printf ("st_blocks: %lun", buf.st_blocks);
        close (fd);
        stat (file_name, &buf);
        printf ("st_blocks: %lun", buf.st_blocks);
        return 0;
}
ext4上的

输出:

st_blocks: 8st_blocks: 8st_blocks: 8

xfs上的

输出:

st_blocks: 128st_blocks: 128st_blocks: 8

然后我研究了xfs,发现了一个在运行mkfs.xfs时更改区段大小的选项。

例子:mkfs。XFS -r extsize=4096/dev/sda1

但是在XFS上我仍然得到相同的输出。谁能提供更多关于如何更改st_blocks的见解?

我找到了答案,把答案贴在这里,以便其他遇到问题的人可以参考。

mount -t XFS -o allocsize=4096设备挂载点

allocsize选项用于调整缓冲区大小

您所看到的是xfs推测性预分配,这是一种启发式方法,用于避免文件增长时出现碎片。要了解更多信息,请参阅此FAQ条目。

你是正确的,"-o allocsize=XXX"选项禁用启发式。您尝试使用"-r extsize=XXX"失败了,因为该选项仅适用于实时子卷,您几乎肯定不会使用该子卷。

相关内容

  • 没有找到相关文章