#filesystems #ext4 #xfs
#файловые системы #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: %sn", strerror(errno));
return -1;
}
write (fd, "hello", sizeof ("hello"));
fstat (fd, amp;buf);
printf ("st_blocks: %lun", buf.st_blocks);
stat (file_name, amp;buf);
printf ("st_blocks: %lun", buf.st_blocks);
close (fd);
stat (file_name, amp;buf);
printf ("st_blocks: %lun", 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 . Заранее спасибо.
Ответ №1:
Я нашел ответ, разместив ответ здесь, чтобы другие, столкнувшиеся с проблемой, могли сослаться на него.
mount -t xfs -o allocsize=4096 точка монтирования устройства
Параметр allocsize используется для настройки размера буфера.
Ответ №2:
То, что вы видите, — это спекулятивное предварительное выделение xfs, которое является эвристикой, которая используется для предотвращения фрагментации файлов по мере их роста. Для получения дополнительной информации см. Эту запись часто задаваемых вопросов.
Вы правы, что опция «-o allocsize = XXX» отключает эту эвристику. Ваша попытка использовать «-r extsize= XXX» не удалась, потому что эта опция предназначена только для вложенного объема в реальном времени, который вы почти наверняка не используете.