آموزش معرفی و بررسی

نحوه تنظیم سهمیه های سیستم فایل در اوبونتو 20.04

معرفی

سهمیه ها برای محدود کردن مقدار فضای دیسکی که یک کاربر یا گروه می تواند در یک سیستم فایل استفاده کند استفاده می شود. بدون چنین محدودیت‌هایی، کاربر می‌تواند دیسک دستگاه را پر کند و برای سایر کاربران و خدمات مشکل ایجاد کند.

در این آموزش شما ابزارهای خط فرمان را برای ایجاد و بررسی سهمیه های دیسک نصب می کنید، سپس یک سهمیه برای یک کاربر نمونه تعیین می کنید.

پیش نیازها

این آموزش فرض می‌کند که شما وارد سرور اوبونتو 20.04 شده‌اید، با یک کاربر غیر ریشه و دارای sudo فعال، همانطور که در راه‌اندازی سرور اولیه با اوبونتو 20.04 توضیح داده شده است. تکنیک‌های این آموزش معمولاً باید روی توزیع‌های لینوکس به غیر از اوبونتو کار کنند، اما ممکن است نیاز به تطبیق داشته باشند.

مرحله 1 – نصب Quota Tools

برای تنظیم و بررسی سهمیه ها، ابتدا باید ابزارهای خط فرمان سهمیه را با استفاده از apt نصب کنید. ابتدا لیست بسته را به روز کنید، سپس بسته را نصب کنید:

sudo apt update
sudo apt install quota

با اجرای دستور quota و درخواست اطلاعات نسخه آن، می توانید تأیید کنید که ابزارها نصب شده اند:

quota –version

Output
Quota utilities version 4.05.
. . .

اگر خروجی شما شماره نسخه کمی متفاوت را نشان دهد خوب است.

بعد مطمئن شوید که ماژول های هسته مناسب برای نظارت بر سهمیه ها را دارید.

مرحله 2 – ماژول Quota Kernel را نصب کنید

اگر روی یک سرور مجازی مبتنی بر ابر هستید، نصب پیش‌فرض لینوکس اوبونتو ممکن است ماژول‌های هسته مورد نیاز برای پشتیبانی از مدیریت سهمیه را نداشته باشد. برای بررسی، از find برای جستجوی ماژول های quota_v1 و quota_v2 در فهرست /lib/modules/… استفاده می کنید:

find /lib/modules/ -type f -name ‘*quota_v*.ko*’

Output
/lib/modules/5.4.0-99-generic/kernel/fs/quota/quota_v2.ko
/lib/modules/5.4.0-99-generic/kernel/fs/quota/quota_v1.ko

نسخه هسته خود را – که در مسیرهای فایل بالا مشخص شده است – یادداشت کنید زیرا در مرحله بعد به آن نیاز خواهید داشت. احتمالاً متفاوت خواهد بود، اما تا زمانی که دو ماژول در لیست هستند، همه چیز آماده است و می توانید بقیه این مرحله را رد کنید.

اگر هیچ خروجی از دستور بالا دریافت نکردید، بسته linux-image-extra-virtual را نصب کنید:

sudo apt install linux-image-extra-virtual

مرحله 3 – گزینه های نصب فایل سیستم را به روز کنید

برای فعال کردن سهمیه ها در یک فایل سیستم خاص، باید آن را با چند گزینه مرتبط با سهمیه مشخص شده نصب کنید. می توانید این کار را با به روز رسانی ورودی سیستم فایل در فایل پیکربندی /etc/fstab انجام دهید. آن فایل nano یا ویرایشگر متن دلخواه خود را باز کنید:

sudo nano /etc/fstab

محتویات این فایل مشابه موارد زیر خواهد بود:

/etc/fstab
LABEL=cloudimg-rootfs   /        ext4   defaults        0 0
LABEL=UEFI      /boot/efi       vfat    defaults        0 0

این فایل fstab از یک سرور مجازی است. یک رایانه رومیزی یا لپ تاپ احتمالاً fstab کمی متفاوت خواهد داشت، اما در بیشتر موارد شما یک فایل سیستم / یا root خواهید داشت که تمام فضای دیسک شما را نشان می دهد.

خط برجسته نام دستگاه نصب شده، محل نصب آن، نوع سیستم فایل و گزینه های نصب مورد استفاده را نشان می دهد. صفر اول نشان می دهد که هیچ نسخه پشتیبان تهیه نمی شود و صفر دوم نشان می دهد که هیچ بررسی خطا در هنگام بوت انجام نمی شود.

با جایگزین کردن گزینه پیش فرض با گزینه های هایلایت شده زیر، خطی را که به سیستم فایل ریشه اشاره می کند، به روز کنید:

/etc/fstab
LABEL=cloudimg-rootfs   /        ext4   usrquota,grpquota        0 0
. . .

این تغییر به ما این امکان را می دهد که سهمیه های کاربر (usrquota) و گروهی (grpquota) را در سیستم فایل فعال کنیم. اگر فقط به یکی یا دیگری نیاز دارید، ممکن است گزینه استفاده نشده را کنار بگذارید. اگر در خط fstab شما از قبل به جای پیش‌فرض گزینه‌های فهرست شده بود، باید گزینه‌های جدید را به انتهای هر چیزی که از قبل وجود دارد اضافه کنید، مطمئن شوید که همه گزینه‌ها را با کاما و بدون فاصله از هم جدا کنید.

برای اعمال گزینه های جدید، فایل سیستم را مجدداً نصب کنید:

sudo mount -o remount /

در اینجا از پرچم -o برای عبور از گزینه remount استفاده می شود.

Output
mount: /etc/fstab: parse error

می توانید با مشاهده فایل /proc/mounts بررسی کنید که از گزینه های جدید برای نصب فایل سیستم استفاده شده است. در اینجا، از grep استفاده کنید تا فقط ورودی سیستم فایل ریشه در آن فایل را نشان دهید:

cat /proc/mounts | grep ‘ / ‘

Output
/dev/vda1 / ext4 rw,relatime,quota,usrquota,grpquota 0 0

به دو گزینه مشخص شده توجه کنید. اکنون که ابزارهای خود را نصب کرده اید و گزینه های سیستم فایل خود را به روز کرده اید، می توانید سیستم سهمیه را روشن کنید.

مرحله 4 – فعال کردن سهمیه ها

قبل از اینکه در نهایت سیستم سهمیه را روشن کنید، باید یک بار دستور quotacheck را به صورت دستی اجرا کنید:

sudo quotacheck -ugm /

این دستور فایل های /aquota.user و /aquota.group را ایجاد می کند. این فایل‌ها حاوی اطلاعاتی درباره محدودیت‌ها و استفاده از سیستم فایل هستند و قبل از روشن کردن نظارت بر سهمیه باید وجود داشته باشند. پارامترهای quotacheck مورد استفاده عبارتند از:

u: مشخص می کند که یک فایل سهمیه مبتنی بر کاربر باید ایجاد شود
g: نشان می دهد که یک فایل سهمیه مبتنی بر گروه باید ایجاد شود
m: نصب مجدد فایل سیستم را به عنوان فقط خواندنی در حین انجام محاسبه اولیه سهمیه ها غیرفعال می کند. نصب مجدد فایل سیستم به‌عنوان فقط خواندنی، در صورتی که کاربر به طور فعال فایل‌ها را در طول فرآیند ذخیره کند، نتایج دقیق‌تری به دست می‌دهد، اما در این راه‌اندازی اولیه ضروری نیست.
اگر نیازی به فعال کردن سهمیه‌های مبتنی بر کاربر یا گروه ندارید، می‌توانید گزینه quotacheck مربوطه را کنار بگذارید.

می توانید با فهرست کردن دایرکتوری ریشه تأیید کنید که فایل های مناسب ایجاد شده اند:

ls /

Output
aquota.group  bin   dev  home        initrd.img.old  lib64       media  opt   root  sbin  srv  tmp  var      vmlinuz.old
aquota.user   boot  etc  initrd.img  lib             lost+found  mnt    proc  run   snap  sys  usr  vmlinuz

اگر گزینه های u یا g را در دستور quotacheck وارد نکرده باشید، فایل مربوطه از بین خواهد رفت.

بعد، باید ماژول های سهمیه را به هسته لینوکس اضافه کنید. از طرف دیگر، می توانید برای انجام همان کار، سرور خود را مجددا راه اندازی کنید. در غیر این صورت، آنها را به صورت دستی اضافه کنید و نسخه هسته برجسته شده را با نسخه موجود در مرحله 2 جایگزین کنید:

sudo modprobe quota_v1 -S 5.4.0-99-generic
sudo modprobe quota_v2 -S 5.4.0-99-generic

اکنون برای روشن کردن سیستم سهمیه آماده هستید:

sudo quotaon -v /

quotaon Output
/dev/vda1 [/]: group quotas turned on
/dev/vda1 [/]: user quotas turned on

سرور شما اکنون در حال نظارت و اجرای سهمیه ها است، اما ما هنوز هیچ کدام را تنظیم نکرده ایم! در مرحله بعد یک سهمیه دیسک برای یک کاربر تعیین می کنید.

مرحله 5 – پیکربندی سهمیه ها برای یک کاربر

چند راه برای تعیین سهمیه برای کاربران یا گروه ها وجود دارد. در اینجا، نحوه تنظیم سهمیه ها با هر دو دستور edquota و setquota را بررسی خواهید کرد.

استفاده از edquota برای تعیین سهمیه کاربر

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

sudo edquota -u sammy

گزینه -u مشخص می کند که این سهمیه کاربری است که شما در حال ویرایش آن هستید. اگر می خواهید سهمیه یک گروه را به جای آن ویرایش کنید، از گزینه -g در جای خود استفاده کنید.

با این کار، فایلی در ویرایشگر متن پیش‌فرض شما باز می‌شود، مشابه اینکه crontab -e یک فایل موقت را برای ویرایش شما باز می‌کند. فایل شبیه به این خواهد بود:

Disk quotas for user sammy (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/vda1                        40          0          0         13        0        0

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

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

بیایید کاربر سامی شما را به‌روزرسانی کنیم تا سهمیه بلوکی با محدودیت نرم افزاری 100 مگابایتی و محدودیت سخت 110 مگابایتی داشته باشد:

Disk quotas for user sammy (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/vda1                        40       100M       110M         13        0        0

ذخیره کنید و فایل را ببندید. برای بررسی سهمیه جدید می توانید از دستور quota استفاده کنید:

sudo quota -vs sammy

Output
Disk quotas for user sammy (uid 1000):
     Filesystem   space   quota   limit   grace   files   quota   limit   grace
      /dev/vda1     40K    100M    110M              13       0       0

این فرمان وضعیت سهمیه فعلی شما را خروجی می دهد و نشان می دهد که سهمیه شما 100M است در حالی که حد شما 110M است. این به ترتیب با محدودیت های نرم و سخت مطابقت دارد.

استفاده از setquota برای تعیین سهمیه کاربر

برخلاف edquota، setquota اطلاعات سهمیه کاربر شما را در یک دستور، بدون مرحله ویرایش تعاملی، به‌روزرسانی می‌کند. شما نام کاربری و محدودیت‌های نرم و سخت را برای سهمیه‌های مبتنی بر بلوک و inode و در نهایت سیستم فایل برای اعمال سهمیه در موارد زیر مشخص خواهید کرد:

sudo setquota -u sammy 200M 220M 0 0 /

دستور بالا محدودیت های سهمیه مبتنی بر بلوک سامی را به 200 مگابایت و 220 مگابایت دوبرابر می کند. 0 0 برای محدودیت های نرم و سخت مبتنی بر inode نشان می دهد که آنها تنظیم نشده باقی می مانند. این مورد نیاز است حتی اگر هیچ سهمیه مبتنی بر inode تنظیم نکنید.

یک بار دیگر از دستور quota برای بررسی کار خود استفاده کنید:

sudo quota -vs sammy

Output
Disk quotas for user sammy (uid 1000):
     Filesystem   space   quota   limit   grace   files   quota   limit   grace
      /dev/vda1     40K    200M    220M              13       0       0

اکنون که مقداری سهمیه تعیین کرده اید، بیایید نحوه تولید یک گزارش سهمیه را دریابیم.

مرحله 6 – ایجاد گزارش های سهمیه

برای ایجاد گزارشی در مورد استفاده از سهمیه فعلی برای همه کاربران در یک فایل سیستم خاص، از دستور repquota استفاده کنید:

sudo repquota -s /

Output
*** Report for user quotas on device /dev/vda1
Block grace time: 7days; Inode grace time: 7days
                        Space limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --   1696M      0K      0K          75018     0     0
daemon    --     64K      0K      0K              4     0     0
man       --   1048K      0K      0K             81     0     0
nobody    --   7664K      0K      0K              3     0     0
syslog    --   2376K      0K      0K             12     0     0
sammy     --     40K    200M    220M             13     0     0

در این مثال شما در حال تولید یک گزارش برای فایل سیستم / root هستید. دستور -s به repquota می گوید که در صورت امکان از اعداد قابل خواندن توسط انسان استفاده کند. تعداد کمی از کاربران سیستم لیست شده اند که احتمالاً هیچ سهمیه ای به طور پیش فرض ندارند. سامی کاربر شما با مقادیر استفاده شده و محدودیت های نرم و سخت در پایین لیست شده است.

همچنین به Block grace time: 7days callout و ستون grace توجه کنید. اگر کاربر شما بیش از حد نرمال بود، ستون grace نشان می دهد که چقدر زمان برای بازگشت به زیر محدودیت باقی مانده است.

مرحله 7 – پیکربندی یک دوره مهلت برای بیش از حد

می توانید دوره زمانی را که کاربر مجاز است بالاتر از حد نرمال شناور باشد، پیکربندی کنید. برای این کار از دستور setquota استفاده کنید:

sudo setquota -t 864000 864000 /

دستور بالا هر دو زمان grace block و inode را روی 864000 ثانیه یا 10 روز تنظیم می کند. این تنظیم برای همه کاربران اعمال می‌شود و هر دو مقدار باید ارائه شوند حتی اگر از هر دو نوع سهمیه استفاده نمی‌کنید (block در مقابل inode).

توجه داشته باشید که مقادیر باید در ثانیه مشخص شوند.

دوباره repquota را اجرا کنید تا بررسی کنید که آیا تغییرات اعمال شده اند:

sudo repquota -s /

Output
Block grace time: 10days; Inode grace time: 10days
. . .

تغییرات باید بلافاصله در خروجی repquota منعکس شود.

نتیجه

در این آموزش شما ابزارهای خط فرمان سهمیه را نصب کردید، تأیید کردید که هسته لینوکس شما می‌تواند سهمیه‌های نظارت را انجام دهد، یک سهمیه مبتنی بر بلوک برای یک کاربر تنظیم کردید، و گزارشی در مورد استفاده از سهمیه سیستم فایل خود ایجاد کردید.

پیوست: پیام های خطای رایج مربوط به سهمیه

موارد زیر برخی از خطاهای رایجی است که ممکن است هنگام تنظیم و دستکاری سهمیه سیستم فایل مشاهده کنید.

quotaon Output
quotaon: cannot find //aquota.group on /dev/vda1 [/]
quotaon: cannot find //aquota.user on /dev/vda1 [/]

این خطایی است که ممکن است در صورت تلاش برای روشن کردن سهمیه ها (با استفاده از quotaon) قبل از اجرای فرمان quotacheck اولیه، مشاهده کنید. دستور quotacheck فایل های سهمیه یا سهمیه مورد نیاز برای روشن کردن سیستم سهمیه را ایجاد می کند. برای اطلاعات بیشتر به مرحله 4 مراجعه کنید.

quotaon Output
quotaon: using //aquota.group on /dev/vda1 [/]: No such process
quotaon: Quota format not supported in kernel.
quotaon: using //aquota.user on /dev/vda1 [/]: No such process
quotaon: Quota format not supported in kernel.

این خطای quotaon به ما می گوید که هسته شما از سهمیه ها پشتیبانی نمی کند، یا حداقل از نسخه صحیح پشتیبانی نمی کند (هر دو نسخه quota_v1 و quota_v2 وجود دارد). این بدان معناست که ماژول های هسته مورد نیاز شما نصب نشده اند یا به درستی بارگذاری نمی شوند. در سرور اوبونتو، محتمل‌ترین دلیل این امر استفاده از یک تصویر نصب شده بر روی یک سرور مجازی مبتنی بر ابر است.

اگر اینطور است، با نصب بسته لینوکس-تصویر-اکسترا-مجازی با apt قابل رفع است. برای جزئیات بیشتر به مرحله 2 مراجعه کنید.

اگر این خطا پس از نصب ادامه داشت، مرحله 4 را مرور کنید. مطمئن شوید که یا به درستی از دستورات modprobe استفاده کرده اید، یا اگر این گزینه برای شما مناسب است، سرور خود را راه اندازی مجدد کرده اید.

quota Output
quota: Cannot open quotafile //aquota.user: Permission denied
quota: Cannot open quotafile //aquota.user: Permission denied
quota: Cannot open quotafile //quota.user: No such file or directory

اگر quota را اجرا کنید و کاربر فعلی شما مجوز خواندن فایل های سهمیه سیستم فایل شما را نداشته باشد، این خطایی است که مشاهده خواهید کرد. شما (یا مدیر سیستم شما) باید مجوزهای فایل را به درستی تنظیم کنید یا هنگام اجرای دستوراتی که نیاز به دسترسی به فایل سهمیه دارند از sudo استفاده کنید.


https://vpsgol.net/product/vps-germany/

https://vpsgol.net/product/vps-usa/

https://vpsgol.net/product/vps-france/

https://vpsgol.net/product/vps-canada/

https://vpsgol.net/product/vps-poland/

https://vpsgol.net/product/vps-netherlands/

https://vpsgol.net/product/vps-england/