سؤال

يتم حساب الحد الأقصى الموضوعة على حصص القرص في Linux في الكتل. ومع ذلك ، لم أجد أي طريقة موثوقة لتحديد حجم الكتلة. دروس وجدتها تشير إلى حجم الكتلة كـ 512 بايت ، وأحيانًا 1024 بايت.

لقد شعرت بالارتباك في قراءة أ post on linuxforum.org لماذا يعني حجم الكتلة حقا. لذلك حاولت أن أجد هذا المعنى في سياق الحصة.

لقد وجدت "تحديد حجم الكتلة على نظام ملفات القرص الصلب لحصة القرص" نصيحة على nixcraft, هذا اقترح الأمر:

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

أو

blockdev --getbsz /dev/sdXN

ولكن على نظامي ، عادت تلك الأوامر 4096 ، وعندما راجعت حجم كتلة الحصص الحقيقية على نفس النظام ، حصلت على حجم كتلة 1024 بايت.

هل هناك طريقة قابلة للسيناريو لتحديد حجم كتلة الحصص على الجهاز ، وبالقلق من إنشاء ملف معروف الحجم ، والتحقق من استخدام الحصص؟

هل كانت مفيدة؟

المحلول

من المحتمل أن تختلف نظام الملفات وكتل الحصص. يتم إعطاء كتل الحصص بواسطة BLOCK_SIZE الماكرو المحدد في <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
...

يتم إرجاع نظام ملفات الملفات لنظام ملفات معين بواسطة 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> يتضمن Header ماكرو مريح لتحويل كتل نظام الملفات إلى كتل حصص القرص:

/*
 * 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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top