2010-03-24 11 views
7

El límite colocado en la cuota de disco en Linux se cuenta en bloques. Sin embargo, no encontré una forma confiable de determinar el tamaño del bloque. Los tutoriales que encontré se refieren al tamaño del bloque como 512 bytes, y a veces como 1024 bytes.Detectar tamaño de bloque para cuota en Linux

Me confundí al leer un post on LinuxForum.org por lo que realmente significa un tamaño de bloque. Así que traté de encontrar ese significado en el contexto de la cuota.

encontré una "Determinar el tamaño del bloque de sistema de archivos en el disco duro para la cuota de disco" tip on NixCraft, que sugería el comando:

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

o

blockdev --getbsz /dev/sdXN 

Pero en mi sistema los comandos devuelven 4096 , y cuando revisé el tamaño del bloque de cuota real en el mismo sistema, obtuve un tamaño de bloque de 1024 bytes.

¿Existe una forma de secuencia de comandos para determinar el tamaño del bloque de cuota en un dispositivo, salvo crear un archivo de tamaño conocido y verificar el uso de cuota?

Respuesta

7

El tamaño de bloques del sistema de archivos y el tamaño de bloques de cuota son potencialmente diferentes. El tamaño de bloque de cuotas está dada por la BLOCK_SIZE macro se define en <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 
... 

el tamaño de bloque del sistema de ficheros para un sistema de archivos dada es devuelto por el statvfs llamada:

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

la cabecera <sys/quota.h> incluye una macro conveniencia de convertir bloques del sistema de ficheros de disco bloques de cuotas:

/* 
* 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) 
+0

Así que decir que la cuota -block-size es una constante del sistema, y ​​es una característica de la versión actual de glibc (/usr/include/sys/mount.h) y/o kernel (/usr/include/linux/fs.h)? ¿Hay alguna manera de obtener este valor a través de '/ proc' o'/sys', o simplemente debería saber glibc/kernel instalado? –

+0

Es una parte del núcleo ABI del espacio de usuario, por lo que no se puede cambiar. – caf

+1

"El tamaño de bloques del sistema de archivos y el tamaño de bloques de cuota son potencialmente diferentes. El tamaño de bloques de cuota viene dado por la macro BLOCK_SIZE definida en " -> Extremadamente útil, ¡gracias! ¿De dónde sacaste esto? Me gustaría ver la referencia original ... –

Cuestiones relacionadas