پرش به محتویات

۶.۴ سهمیه بندی فضای دیسک یا quota

در سیستم های چند کاربره یکی از دغدغه‌های مدیر سیستم، مدیریت کاربران در استفاده از فضای ذخیره سازی دیسک است. در استفاده از فضای دیسک دو مشکل ممکن است بوجود آید. اولین مشکل، آنکه کاربر داده‌هایی با حجم بالا بر روی پوشه خانگی خود انتقال می دهد. چون این فضا بین کاربران مشترک است، باعث پر شدن فضای مشترک و محدود شدن بقیه کاربران می گردد. و یا دوم می تواند با انتقال تعداد زیادی فایل باعث پر شدن و رسیدن به سقف تعداد inodeها شود.

ابزار quota به مدیر سیستم این اجازه را می‌دهد تا کاربر و یا گروهی از کاربران را محدود کند. این محدودیت می‌تواند در هر دو موضوع block مصرفی و inode مصرفی اعمال گردد.


مقادیر قابل تعریف در تنظیمات quota به صورت زیر است:

Per user (soft limit): در صورتی که کاربر از این مقدار بیشتر مصرف کند، بلافاصله متوقف نمی‌گردد. بلکه بلافاصله پس از رد کردن این مقدار یک زمان‌سنج به مقدار grace period به کاربر اجازه می دهد تا از فضای استفاده خود را به زیر مقدار محدودیت برساند. در صورتی که کاربر پس از صفر شدن زمان‌سنج همچنان پیش از این مقدار از دیسک استفاده کرده باشد، سیستم کاربر را متوقف می‌کند، و تازمانی که به زیر این محدودیت نرسد اجازه ساخت، انتقال و یا ویرایش فایل نخواهد داشت.

Per user (hard limit): زمانی که مقدار مصرف کاربر از این مقدار فراتر رود، بلافاصله از ادامه فعالیت باز خواهد ایستاد و تا زمانی که مقدار مصرفی را به زیر این مقدار نیاورد اجازه ساخت، انتقال و واضافه کردن دادن نخواهد داشت.

Per group (soft,hard limit): مانند موارد بالا است. تنها تفاوت آن است که این محدودیت بر روی مجموع مصرف اعضای این گروه اعمال می‌گردد. در این حالت می تواند یک کاربر کلیه فضای واگذار شده به یک گروه را مصرف کند.

Grace Period: این زمان همان زمان اولیه زمان‌سنجی را مشخص می‌کند که پس از رد کردن میزان soft limit فعال می گردد.


پیش نیازها

برای راه‌اندازی quota برروی سیستم مجموعه از پیش نیاز ها وجود دارد. در زیر به همه آنها اشاره خواهیم کرد

فعال بودن در هسته لینوکس: هسته لینوکس پیاده شده بر روی سیستم شما باید از quota پشتیبانی کند. برای بررسی این موضوع می‌توانید فایل config هسته سیستم خود را جستجو کنید

# grep QFMT /boot/config-2.6.32-5-686 
CONFIG_QFMT_V1=m
CONFIG_QFMT_V2=m

# grep QUOTA_TREE /boot/config-2.6.32-5-686 
CONFIG_QUOTA_TREE=m

در حال حاضر دو نسخه از quota در هسته لینوکس وجوددارد. در برخی توزیع ها مانند Debian هر دو نسخه وجود دارد و توزیع‌هایی مانند CentOS تنها از نسخه ۲ پشتیبانی می‌نمایند. در این کتاب به پیاده سازی نسخه ۲ خواهیم پرداخت.

نصب: بسته quota باید بر روی سیستم شما نصب باشد.

Debian
# apt-get install quota

CentOS
# yum install quota

پشتیبانی فایل سیستم: علاوه بر موارد بالا فایل سیستم شما نیز باید از quota پشتیبانی کند. برای مثال فایل سیستم های ویندوزی مانند ntfs و fat از quota در داخل لینوکس پشتیبانی نمی‌کنند.

فعال کردن quota به ازای هر فایل سیستم: به ازای هر فایل سیستم باید quota فعال گردد. این کار دارای چندین مرحله است:

۱- mount optionsها: برای فعال کردن quota در هر فایل سیستم می‌توانید از دو گزینه usrquota و grpquota استفاده کنید. usrquota برای فعال کردن quota در سطح کاربر و grpquota برای فعال کردن quota در سطح گروه است. برای مثال برای فعال کردن quota بر روی home در صورتی که /home بر روی پارتیشن جدایی mount شده باشد به صورت زیر عمل باید کرد.

# vi /etc/fstab
/dev/sda2   /home   ext4   defaults,usrquota,grpquota   0    0

پس از آن باید فایل سیستم remount شود.

# mount -o remount /home

۲- ساخت بانک اولیه: پس از اصلاح فایل fstab باید یک بانک اطلاعات اولیه از مصرف کاربران ساخته شود. این بانک پس از فعال سازی کامل quota به صورت خودکار به روز می شود و از همین طریق مصرف کاربران زیر نظر گرفته می‌شود. این کار توسط دستور quotacheck انجام می‌گردد:

# quotacheck [-avugm] [filesystem]

برای مثال برای ساخت فایل بانک اولیه برای تمامی فایل سیستم ها می توانید به صورت زیر از دستور quotacheck استفاده کنید.

# quotacheck -avugm

گزینه های استفاده شده به شرح زیر هستند

گزینه توضیحات
-a بر روی همه فایل سیستم ها بررسی می کند
-v در حالت verbose و یا پر حرف اجرا میگردد. خروجی بیشتر از دستور قابل دیدن است
-u بانک اطلاعات مربوط به کاربران با نام aquota.user را می سازد. این فایل در محل mount فایل سیستم ساخته می شود
-g بانک اطلاعات مربوط به کاربران با نام aquota.group را می سازد. این فایل در محل mount فایل سیستم ساخته می شود

۳- فعال کردن نهایی: پس از ساخت بانک اطلاعاتی مصرف کاربران، قدم بعد فعال کردن quota است. پس از این فعال سازی سیستم به صورت لحظه‌ای مصرف کاربران را زیر نظر می گیرد و آنها را کنترل می‌کند.

# quotaon -avug

مدیریت quota

اعمال محدودیت برای یک کاربر

برای تنظیم محدودیت برای کاربر می توانید از دستور edquota استفاده کنید.

# edquota [-T] [-u username]
# edquota -u behrad
Disk quotas for user behrad (uid 1000):
Filesystem   blocks   soft     hard   inodes   soft     hard
 /dev/sda5   3248     0        0      148      0        0

در مثال بالا در زیر ستون blocks تعداد block مصرف شده توسط کاربر را نشان می دهد. در زیر ستون inodes تعداد فایلی که کاربر مالک آن است را نمایش می‌دهد. کافی است مقادیر ستون‌های soft و hard مشخص شوند تا محدودیت کاربر مشخص گردد.

تغییر مقدار Grace period

برای تغییر این مقدار نیز می توانید از دستور edquota با گزینه t- استفاده می کنیم. می‌ةوانید مقادیر را به صورت ضریبی از seconds, minutes, hours, days استفاده کنید.

# edquota -t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
 Filesystem     Block grace period     Inode grace period
 /dev/sda5       7days                  7days