2010-03-24 34 views
7

Giới hạn đặt trên hạn ngạch đĩa trong Linux được tính theo khối. Tuy nhiên, tôi không tìm thấy cách nào đáng tin cậy để xác định kích thước khối. Các hướng dẫn tôi tìm thấy tham chiếu đến kích thước khối là 512 byte và đôi khi là 1024 byte.Phát hiện kích thước khối cho hạn ngạch trong Linux

Tôi đã nhầm lẫn khi đọc một số post on LinuxForum.org cho kích thước khối thực sự có ý nghĩa gì. Vì vậy, tôi đã cố gắng tìm ra ý nghĩa đó trong bối cảnh hạn ngạch.

Tôi tìm thấy một "Xác định kích thước khối trên hệ thống tập tin đĩa cứng cho hạn ngạch đĩa" tip on NixCraft, rằng đề nghị lệnh:

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

hoặc

blockdev --getbsz /dev/sdXN 

Nhưng trên hệ thống của tôi những lệnh quay trở lại 4096 và khi tôi kiểm tra kích thước khối dung lượng thực trên cùng một hệ thống, tôi nhận được kích thước khối là 1024 byte.

Có cách nào để xác định kích thước khối dung lượng trên thiết bị, không thể tạo tệp có kích thước đã biết và kiểm tra mức sử dụng hạn ngạch của nó không?

Trả lời

7

Chặn hệ thống tệp và chặn hạn ngạch có khả năng khác nhau. Các kích cỡ khối hạn ngạch được đưa ra bởi BLOCK_SIZE vĩ mô quy định tại <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 
... 

các kích cỡ khối hệ thống tập tin cho một hệ thống tập tin nhất định được trả về bởi các statvfs gọi:

#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; 
} 

tiêu đề <sys/quota.h> bao gồm một vĩ mô thuận tiện để chuyển đổi các khối hệ thống tập tin vào đĩa khối quota:

/* 
* 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

Vì vậy, bạn nói rằng hạn ngạch -lock-size là một hằng số hệ thống, và là một tính năng của glibc hiện tại (/usr/include/sys/mount.h) và/hoặc phiên bản hạt nhân (/usr/include/linux/fs.h)? Có cách nào để có được giá trị này thông qua '/ proc' hoặc'/sys', hoặc tôi chỉ nên biết glibc/kernel được cài đặt bởi thy? –

+0

Đây là một phần của ABI hạt nhân cho không gian người dùng - vì vậy nó không thể thay đổi được. – caf

+1

"Chặn hệ thống tập tin và chặn hạn ngạch có khả năng khác nhau. Việc chặn hạn ngạch được đưa ra bởi macro BLOCK_SIZE được xác định trong " -> Cực kỳ hữu ích, cảm ơn! Bạn đã có cái này từ đâu? Tôi muốn xem tài liệu tham khảo gốc ... –

Các vấn đề liên quan