8

Linux 中对磁盘配额的限制以块为单位。但是,我发现没有可靠的方法来确定块大小。我发现的教程将块大小称为 512 字节,有时也称为 1024 字节。

我在阅读LinuxForum.org 上的一篇文章时对块大小的真正含义感到困惑。所以我试图在配额的背景下找到这个含义。

我在 NixCraft上找到了“为磁盘配额确定硬盘文件系统上的块大小”提示,提示了以下命令:

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

或者

blockdev --getbsz /dev/sdXN

但在我的系统上,这些命令返回 4096,当我检查同一系统上的实际配额块大小时,我得到的块大小为 1024 字节。

是否有一种可编写脚本的方法来确定设备上的配额块大小,而不是创建已知大小的文件并检查它的配额使用情况?

4

1 回答 1

7

文件系统块大小和配额块大小可能不同。配额块大小由(/usr/include/sys/mount.h)BLOCK_SIZE中定义的宏给出:<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
...

给定文件系统的文件系统块大小由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;
}

<sys/quota.h>头包含一个方便的宏,用于将文件系统块转换为磁盘配额块:

/*
 * 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)
于 2010-03-24T08:49:16.767 回答