2010-03-24 6 views
7

में कोटा के लिए ब्लॉक आकार का पता लगाएं लिनक्स में डिस्क कोटा पर दी गई सीमा को ब्लॉक में गिना जाता है। हालांकि, मुझे ब्लॉक आकार निर्धारित करने के लिए कोई विश्वसनीय तरीका नहीं मिला। मैंने पाया ट्यूटोरियल ब्लॉक आकार को 512 बाइट्स के रूप में संदर्भित करता है, और कभी-कभी 1024 बाइट्स के रूप में।लिनक्स

मुझे ब्लॉक आकार का वास्तव में क्या मतलब है के लिए post on LinuxForum.org पढ़ने में भ्रमित हो गया। इसलिए मैंने कोटा के संदर्भ में इसका अर्थ खोजने की कोशिश की।

मैंने पाया एक tip on NixCraft, "डिस्क कोटा के लिए हार्ड डिस्क फाइल सिस्टम पर ब्लॉक आकार का निर्धारण" उस आदेश का सुझाव दिया:

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

या

blockdev --getbsz /dev/sdXN 

लेकिन मेरे सिस्टम पर उन आदेशों लौटे 4096 , और जब मैंने उसी सिस्टम पर वास्तविक कोटा ब्लॉक आकार की जांच की, तो मुझे 1024 बाइट्स का ब्लॉक आकार मिला।

क्या डिवाइस पर कोटा ब्लॉक आकार निर्धारित करने के लिए एक स्क्रिप्ट करने योग्य तरीका है, ज्ञात आकार वाली फ़ाइल बनाने से कम, और इसके कोटा उपयोग की जांच करना?

उत्तर

7

फाइल सिस्टम ब्लॉकिज़ और कोटा ब्लॉजिज संभावित रूप से अलग हैं।

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

#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 कॉल द्वारा दिया जाता है: कोटा ब्लॉकसाइज BLOCK_SIZE मैक्रो <sys/mount.h> (/usr/include/sys/mount.h) में परिभाषित द्वारा दिया जाता है

<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) 
+0

तो तुम कहना है कि कोटा -ब्लॉक-साइज एक सिस्टम स्थिर है, और वर्तमान glibc (/usr/include/sys/mount.h) और/या कर्नेल (/usr/include/linux/fs.h) संस्करण की एक विशेषता है? क्या इस मान को '/ proc' या'/sys' के माध्यम से प्राप्त करने का कोई तरीका है, या क्या मुझे बस आपके स्थापित ग्लिब/कर्नेल को जानना चाहिए? –

+0

यह कर्नेल एबीआई का उपयोग उपयोगकर्ताओं के लिए है - इसलिए इसे बदला नहीं जा सकता है। – caf

+1

"फाइल सिस्टम ब्लॉकिज़ और कोटा ब्लॉजिज संभावित रूप से अलग हैं। कोटा ब्लॉजिज में परिभाषित BLOCK_SIZE मैक्रो द्वारा दिया गया है" -> बेहद उपयोगी, धन्यवाद! आपको यह कहां से मिला? मैं मूल संदर्भ देखना चाहता हूं ... –