2010-03-24 4 views
7

La limite placée sur le quota de disque sous Linux est comptée en blocs. Cependant, je n'ai trouvé aucun moyen fiable pour déterminer la taille du bloc. Les tutoriels que j'ai trouvés se réfèrent à la taille du bloc comme 512 octets, et parfois comme 1024 octets.Détection de la taille de bloc pour le quota sous Linux

Je me suis trompé en lisant un post on LinuxForum.org pour ce que signifie vraiment une taille de bloc. J'ai donc essayé de trouver ce sens dans le contexte du quota.

J'ai trouvé un « Déterminer la taille du bloc sur le système de fichiers du disque dur pour le quota de disque » tip on NixCraft, qui a suggéré la commande:

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

ou

blockdev --getbsz /dev/sdXN 

Mais sur mon système ces commandes sont revenus 4096 et quand j'ai vérifié la taille de bloc de quota réel sur le même système, j'ai obtenu une taille de bloc de 1024 octets.

Existe-t-il une méthode scriptable pour déterminer la taille de bloc de quota sur un périphérique, à moins de créer un fichier de taille connue et de vérifier son utilisation de quota?

Répondre

7

La taille des blocs du système de fichiers et la taille des blocs sont potentiellement différentes. Le quota de blocksize est donnée par la BLOCK_SIZE macro définie dans <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 
... 

Le système de fichiers pour blocksize un système de fichiers donné est renvoyé par l'appel 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; 
} 

l'en-tête <sys/quota.h> comprend une macro pratique pour convertir des blocs de système de fichiers à des blocs de quotas de disque:

/* 
* 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

vous dites que le quota -block-size est une constante système, et est une fonctionnalité de la version actuelle de la glibc (/usr/include/sys/mount.h) et/ou du noyau (/usr/include/linux/fs.h)? Existe-t-il un moyen d'obtenir cette valeur via '/ proc' ou'/sys', ou devrais-je simplement connaître la glibc/kernel que vous avez installé? –

+0

C'est une partie de l'ABI du noyau à l'espace utilisateur - donc il ne peut pas être changé. – caf

+1

"La taille des blocs du système de fichiers et la taille des blocs sont potentiellement différentes.La taille des blocs est donnée par la macro BLOCK_SIZE définie dans " -> Extrêmement utile, merci! D'où avez-vous eu cela? J'aimerais voir la référence originale ... –

Questions connexes