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

时间:2011-11-03 09:45:58

标签: filesystems ext4 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: %s\n", strerror(errno));
                return -1;
        }

        write (fd, "hello", sizeof ("hello"));

        fstat (fd, &buf);
        printf ("st_blocks: %lu\n", buf.st_blocks);

        stat (file_name, &buf);
        printf ("st_blocks: %lu\n", buf.st_blocks);

        close (fd);

        stat (file_name, &buf);
        printf ("st_blocks: %lu\n", buf.st_blocks);

        return 0;
}
ext4输出

st_blocks:8 st_blocks:8 st_blocks:8

xfs输出

st_blocks:128 st_blocks:128 st_blocks:8

然后我研究了xfs并找到了在运行mkfs.xfs时更改范围大小的选项。

示例:mkfs.xfs -r extsize = 4096 / dev / sda1

但我仍然可以在XFS上获得相同的输出。任何人都可以提供有关如何更改st_blocks的更多信息。提前谢谢。

2 个答案:

答案 0 :(得分:1)

我找到了答案,在这里发布答案,以便面临问题的其他人可以参考。

  

mount -t xfs -o allocsize = 4096 device mount-point

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

答案 1 :(得分:0)

您所看到的是xfs推测预分配,这是一种启发式方法,用于避免文件在增长时出现碎片。 有关详细信息,请参阅this FAQ entry

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