Обнаружьте размер блока для квоты в Linux

Граница, установленная для выделенного дискового пространства в Linux, считается в блоках. Однако я не нашел надежного способа определить размер блока. Учебные руководства, которые я нашел, называют размер блока 512 байтами, и иногда 1 024 байтами.

Я получил запутанное читать сообщение на LinuxForum.org для того, что действительно означает размер блока. Таким образом, я пытался найти что, имея в виду в контексте квоты.

Я нашел, "Определяют размер блока в файловой системе жесткого диска для выделенного дискового пространства" подсказка относительно NixCraft, который предложил команду:

dumpe2fs /dev/sdXN | grep -i 'Block size'

или

blockdev --getbsz /dev/sdXN

Но в моей системе те команды возвратились 4096, и когда я проверил реальный размер блока квоты в той же системе, я получил размер блока 1 024 байтов.

Существует ли scriptable способ определить размер блока квоты на устройстве, за исключением создания известного измеренного файла и проверки, что это - использование квоты?

7
задан Mohsen Nosratinia 8 May 2015 в 14:18
поделиться

1 ответ

Размер блока файловой системы и размер блока квоты потенциально различаются. Размер блока квоты задается макросом BLOCK_SIZE , определенным в (/usr/include/sys/mount.h):

#ifndef _SYS_MOUNT_H
#define _SYS_MOUNT_H    1

#include <features.h>
#include <sys/ioctl.h>

#define BLOCK_SIZE      1024
#define BLOCK_SIZE_BITS 10
...

Размер блока файловой системы для заданная файловая система возвращается вызовом statvfs :

#include <stdio.h>
#include <sys/statvfs.h>

int main(int argc, char *argv[])
{
    char *fn;
    struct statvfs vfs;

    if (argc > 1)
        fn = argv[1];
    else
        fn = argv[0];

    if (statvfs(fn, &vfs))
    {
        perror("statvfs");
        return 1;
    }

    printf("(%s) bsize: %lu\n", fn, vfs.f_bsize);

    return 0;
}

Заголовок включает вспомогательный макрос для преобразования блоков файловой системы в блоки дисковых квот:

/*
 * Convert count of filesystem blocks to diskquota blocks, meant
 * for filesystems where i_blksize != BLOCK_SIZE
 */
#define fs_to_dq_blocks(num, blksize) (((num) * (blksize)) / BLOCK_SIZE)
7
ответ дан 7 December 2019 в 07:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: