2010-03-24 7 views
7

Il limite posto sulla quota disco in Linux viene conteggiato in blocchi. Tuttavia, non ho trovato un modo affidabile per determinare la dimensione del blocco. Le esercitazioni che ho trovato si riferiscono alle dimensioni del blocco come 512 byte e talvolta come 1024 byte.Rileva dimensioni blocco per quota in Linux

Mi sono confuso leggendo un post on LinuxForum.org per ciò che significa veramente una dimensione di blocco. Così ho cercato di trovare quel significato nel contesto della quota.

Ho trovato un "Determinare la dimensione del blocco sul file system del disco rigido per la quota del disco" tip on NixCraft, che ha suggerito il comando:

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

o

blockdev --getbsz /dev/sdXN 

Ma sul mio sistema i comandi restituiti 4096 e quando ho controllato la dimensione del blocco della quota reale sullo stesso sistema, ho ottenuto una dimensione di blocco di 1024 byte.

Esiste un metodo di scripting per determinare la dimensione del blocco delle quote su un dispositivo, a meno di creare un file di dimensioni note e controllarne l'utilizzo della quota?

risposta

7

Il filesystem si blocca e la quota bloccata è potenzialmente diversa. La dimensione del blocco contingente è dato dalla BLOCK_SIZE macro definita in <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 
... 

la dimensione del blocco filesystem per un dato file system viene restituito dal statvfs chiamata:

#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'intestazione <sys/quota.h> include una macro convenienza per convertire blocchi del filesystem a blocchi di quota del 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) 
+0

Quindi lei dice che la quota -block-size è una costante di sistema ed è una funzionalità della versione corrente di glibc (/usr/include/sys/mount.h) e/o del kernel (/usr/include/linux/fs.h)? C'è un modo per ottenere questo valore tramite '/ proc' o'/sys', o dovrei semplicemente conoscere glibc/kernel installati? –

+0

È una parte dell'ABI del kernel nello spazio utente, quindi non può essere modificata. – caf

+1

"Il filesystem si blocca e la quota bloccata è potenzialmente diversa.Il blocco delle quote è dato dalla macro BLOCK_SIZE definita in " -> Estremamente utile, grazie! Da dove l'hai preso? Mi piacerebbe vedere il riferimento originale ... –