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 に答える