我写了一个简单的程序并在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的更多信息。提前谢谢。
答案 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;失败,因为该选项仅适用于您几乎肯定不会使用的实时子卷。