Che*_*evy 7 linux scripting quota diskusage
Linux中磁盘配额的限制以块为单位计算.但是,我发现没有可靠的方法来确定块大小.我发现的教程将块大小称为512字节,有时称为1024字节.
我很困惑在LinuxForum.org上阅读一篇关于块大小真正含义的帖子.所以我试图在配额的背景下找到这个含义.
我在NixCraft上找到了"确定磁盘配额的硬盘文件系统上的块大小" 提示,提示命令:
dumpe2fs /dev/sdXN | grep -i 'Block size'
Run Code Online (Sandbox Code Playgroud)
要么
blockdev --getbsz /dev/sdXN
Run Code Online (Sandbox Code Playgroud)
但是在我的系统上,这些命令返回4096,当我在同一系统上检查实际配额块大小时,我得到了1024字节的块大小.
是否有一种可编写脚本的方法来确定设备上的配额块大小,而不是创建已知大小的文件,并检查其配额使用情况?
文件系统块大小和配额块大小可能不同.配额块大小由(/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
...
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
所述<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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5216 次 |
| 最近记录: |