Question

La limite placée sur le quota de disque sous Linux est compté dans les blocs. Cependant, j'ai trouvé aucun moyen fiable de déterminer la taille du bloc. Tutoriels Je trouve référence à la taille du bloc de 512 octets, et parfois 1024 octets.

Je me suis embrouillé la lecture d'un après le LinuxForum.org quelle taille de bloc signifie vraiment. J'ai donc essayé de trouver ce sens dans le cadre 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 sur 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 réelle du bloc de quotas sur le même système, je me suis une taille de bloc de 1024 octets.

Y at-il un moyen scriptable pour déterminer la taille du bloc de quotas sur un dispositif, à court de créer un fichier de taille connue, et le vérifier est l'utilisation des quotas?

Était-ce utile?

La solution

Le système de fichiers et le blocksize blocksize des quotas sont potentiellement différentes. La taille de bloc de quota est donnée par la macro BLOCK_SIZE défini 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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top