Pergunta

O limite colocado na cota de disco no Linux é contado em blocos. No entanto, não encontrei uma maneira confiável de determinar o tamanho do bloco. Tutoriais que encontrei, consulte o tamanho do bloco como 512 bytes e, às vezes, como 1024 bytes.

Fiquei confuso lendo um Publique no Linuxforum.org Para o que um tamanho de bloco realmente significa. Então eu tentei encontrar esse significado no contexto da cota.

Encontrei um "Determine o tamanho do bloco no sistema de arquivos de disco rígido para cota de disco" dica sobre nixcraft, isso sugeriu o comando:

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

ou

blockdev --getbsz /dev/sdXN

Mas no meu sistema esses comandos retornaram 4096 e, quando verifiquei o tamanho real do bloco de cotas no mesmo sistema, recebi um tamanho de bloco de 1024 bytes.

Existe uma maneira rivável de determinar o tamanho do bloco de cota em um dispositivo, com falta de criação de um arquivo de tamanho conhecido e verificando seu uso de cotas?

Foi útil?

Solução

O sistema de arquivos bloqueia e o bloco de cota é potencialmente diferente. O tamanho da cota é dado pelo BLOCK_SIZE macro definido em <sys/mount.h> (/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
...

O sistema de arquivos bloqueia para um determinado sistema de arquivos é retornado pelo statvfs ligar:

#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;
}

o <sys/quota.h> O cabeçalho inclui uma macro de conveniência para converter blocos de sistema de arquivos em blocos de cotas de disco:

/*
 * 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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top