سهمیه بندی فضای هارد دیسک در لینوکس

مدیر سیستم با قابلیت Disk Quota میتواند استفاده از فضای هارد دیسک را با توجه به سیاست گذاری مدیران سازمان برای کاربران و یا گروههای کاربران اعمال نماید ، در این مقاله تلاش بر این است سلسله مراتب پیاده سازی Quota به شکل ساده و عملی ارایه گردد .در ابتدا می بایست پارتیشن های مورد نظر جهت پیاده سازی Quota را مشخص کنیم ، در ضمن همانطور که پیشتر بیان شد این قابلیت می تواند برای کاربران خاص و یا برای گروه ها تنظیم شود . طی چند مرحله که به تفصیل شرح داده خواهد شد Disk Quota را پیاده سازی می کنیم :قدم اول :در ابتدا بررسی کنیم که آیا نسخه کرنل نصب شده روی سیستم قابلیت پشتیبانی از Disk Quota را دارد ؟برای این منظور دستور زیر را اجرا می کنیم :قدم دوم :در این مرحله برای فعال کردن Disk Quota برای کاربران کلمه usrquota و برای فعال کردن Diskquota برای گروهها کلمه grpquota را به فیلد چهارم فایل etc/fstab/ اضافه می کنیم . که ما در اینجا این کار را فقط برای یوزرها انجام می دهیم . البته میتوان روی هر پارتیشن ، هم برای کاربران و هم برای گروهها quota را اعمال نمود .در اینجا لازم است نگاهی کوتاه به فایل fstab داشته باشیم :فایل (fstab (File System Table محل اطلاعات ثابت سیستم فایل است ، اتصال پارتیشن ها به دایرکتوری های مورد نظر در این فایل مشخص می شود . این فایل در زمان بوت شدن سیستم توسط پراسس init از فایل etc/rc.d/rc.sysinit/ خوانده می شود. این فایل شامل ۶ فیلد است که در ادامه توضیح داده خواهند شد :فیلد اول :این فیلد ، پارتیشن هایی را که قصد Mount کردن آنرا دارید تعیین می کند . این پارتیشن یا دایرکتوری ها ، یا بصورت محلی هستند و یا بصورت راه دور ( از یک سیستم دیگر ) که این حالت برای پیاده سازی NFS و mount کردن یک سیستم فایل ، درون شبکه استفاده می شود . در هنگام استفاده از این حالت باید آدرس IP و یا نام سروی که سیستم فایل را اشتراکی کرده است را بیاورید. مانند مثال زیر :<server name>.<domain name>:/tmp/sharefilesفیلد دوم :این فیلد مشخص می کند پارتیشنی را که درفیلد اول مشخص کردید به کدام دایرکتوری باید متصل شود.فیلد سوم :این فیلد نوع سیستم فایل را نشان می دهد. انواع ext2,ext3,ext4 برای توزیع های لینوکسی ، نوع vfat برای ویندوزی ها ، نوع ufs برای سیستم عامل های BSD و auto برای Floppy و CD/DVD ها و swap برای حافظه swap بکار می رود . البته استفاده از فرمت vfat به منزله این نیست که می توانیم از ویندوز های xp به بعد که از NTFS استفاده می کنند را به سیستم mount کنیم بلکه برای این منظور باید از ابزار های این کار و از Samba استفاده کنیم.فیلد چهارم :این فیلد شامل Options های هنگام Mount شدن است . چند گزینه مهم در زیر گفته شده است . توجه شود که گزینه ها بدون فاصله و با کاما (,) از هم جدا می شوند .نکته : به منظور ایجاد Quota می بایست این فیلد را از فایل fstab ویرایش کنیم .گزینه پیش فرض defaults است که شامل موارد زیر می باشد :rw , suid , dev , exec , auto , nouser , asyncمورد rw/ro :گزینه ro یعنی Read-Only و فقط کاربران حق دیدن فایل ها و محتوا را دارند و نمی توانند دایرکتوری یا فایل جدید ایجاد یا در یک دایرکتوری NFS چیزی کپی کنند . اما rw یعنی Read-Write که هم اجازه خواندن و هم اجازه نوشتن را می دهد که به این معنی است که کاربران می توانند فایل و دایرکتوری ایجاد کنند. همانطور که گفته شد حالت پیش فرض rw است.مورد exec/noexec :گزینه exec باعث می شود تا بتوان فایل های باینری را اجرا کرد noexec برعکس exec از اجرای فایل های باینری جلوگیری می کند. این گزینه زمانی بکار می آید که نمی خواهید فایل های باینری که در پارتیشن دارید در mount point اجرا شوند. پیش فرض exec است.مورد auto/noauto :در اینجا auto به این معنی است که سیستم فایل یا پارتیشن باید هنگام بوت شدن بصورت خودکار mount شوند در غیر اینصورت شما باید اینکار را با کاربر root و بعد وارد شدن به سیستم و بصورت دستی با دستور mount انجام دهید . این حالت پیش فرض است و اگر نمی خواهید پارتیشن بصورت خوکار mount شود باید از گزینه noauto استفاده کنید.مورد user/nouser :در اینجا user اجازه می دهد که کاربران معمولی هم بتوانند mount کنند. ولی اگر نمی خواهید کاربران معمولی این کار را انجام دهند از nouser استفاده کنید . گزینه nouser پیش فرض است.مورد sync/async :این دو گزینه به ورودی و خروجی اشاره می کنند و اشاره به همگام سازی I/O دارد. بطور مثال با فلاپی ها بکار می رود و مفهوم آن این است که وقتی شما یک فایل را با دستور cp روی فلاپی کپی می کنید ، تغییرات بصورت همزمان ، با اجرای دستور cp روی فلاپی بصورت فیزیکی نوشته می شوند . در نقطه مقابل آن گزینه async که مخفف asynchronously است . وقتی async را استفاده می کنید تغییرات مدتی پس از اجرای دستور cp روی فلاپی بصورت فیزیکی نوشته می شوند. البته این حالت بد نیست و برخی مواقع مفید هم هست ولی شاید باعث بروز مشکلاتی هم بشود. اگر شما بدون unmounting کردن فلاپی آنرا بیرون بکشید چون کپی ها مدتی پس از اجرا شدن دستور روی فلاپی نوشته می شوند ممکن است هنوز کپی نشده باشند. پس بطور خلاصه برای استفاده از async می توان این طور گفت که پس از اجرا شدن دستور ابتدا آنرا unmount کنید . async بصورت پیش فرض است.فیلد های پنجم و ششم :فیلد پنجم تعیین کننده اجرای dump ( یک سرویس پشتیبان گیری ) و گرفتن پشتیبان از سیستم فایل است در این فیلد عدد ۰ یعنی عدم dump و عدد ۱ یعنی اجرای dump .فیلد ششم در ارتباط با برنامه fsck در زمان بوت شدن سیستم است . عدد ۰ یعنی سیستم فایل توسط fsck بررسی نشود ، عدد ۱ اولویت اول و عدد ۲ اولویت بعدی را نشان می دهد.همانطور که در شکل مشخص شده است ، روی پارتیشن (دایرکتوری) home/ قصد داریم quota را برای کاربران اعمال کنیم .قدم سوم :در این مرحله می بایست پارتیشنی را که روی آن Quota را فعال کرده ایم ، remount کنیم . این کار توسط سوئیچ o- و آرگومان remount در دستور mount انجام می شود.پس از اینکه Quota روی سیستم فایل ها (پارتیشین ها) فعال و آن سیستم فایل را remount شد ، پارتیشنآماده کار کردن با Disk Quota می باشد.قدم چهارم:در این مرحله باید روی پارتیشن مورد نظر یک دیتابیس ایجاد شود که توسط آن سیستم اقدام به اعمال محدودیت ها نماید . این کار توسط فرمان quotacheck انجام می شود.این دستور سیستم فایل را بررسی می کند و یک جدول از میزان مصرفی از دیسک را ایجاد می کند . یک فایل توسط این دستور در زیر هر پارتیشینی که quota را روی آن فعال کردیم (در مثال ما home/ ) به نام aquota.user ایجاد می شود ( توجه شود که در مثال ما quota فقط برای یوزر ها فعال شده است ) برای ایجاد این فایل از سوئیچ c- و برای بررسی User Quota از سوئیچ u- و برای بررسی Group Quota از سوئیچ g- استفاده می شود . اگر هیچکدام از سوئیچ ها مشخص نشده باشند ، تنها User Quota ایجاد می شود ، فرمت دستور به صورت زیر است :بعد از اجرای دستور فوق اگر به پارتیشن home/ نگاه کنید مشخص می شود فایل aquota.user به آن اضافه شده است .تا اینجای مشخص کردیم هدفمان اعمال quota برای کاربران در پارتیشن home/ است .قدم پنجم :در این قسمت باید میزان محدودیت را برای کاربران و یا گروهها مشخص کنیم که ما در این مثال برای کاربر b.barazandeh محدودیت ها را ایجاد می کنیم ، این کار با دستور edquota انجام می شود .سوییچ u- برای کاربران و سوییچ g- برای گروهها و سوییچ p- برای چندین کاربر یا گروه کاربرد دارند .edquota -u <user_name>یاedquota -up <user_name 1> <user_name 2> … <user_name n>که در مثال ما به شکل زیر است :به محض اجرای دستور فوق فایلی به شکل زیر با ویرایشگر پیش فرض سیستم جهت ویرایش باز می شود :شرح قسمت های مختلف این فایل را در ادامه می بینیم :نکته : عددی که زیر blocks نوشته شده تعداد بلاکهایی ( مقدار حجمی ) است که تا این لحظه کاربر استفاده کرده است.نکته : عددی که زیر inodes نوشته شده است تعداد فایلهای ایجاد شده توسط کاربر را تا این لحظه نشان می دهد ، لازم به تذکر است هر چیزی در سیستم عامل لینوکس ( فایل ، دایرکتوری ، device و ... ) فایل محسوب می شوند.پس همانطور که مشاهده شد می توانیم محدودیت را برای کاربرانمان به دو صورت انجام دهیم ، فرض کنید در مثال مورد نظرمان قصد داریم تعداد فایلهایی که کاربر b.barazandeh می تواند ایجاد کند را محدود می کنیم ، به شکل زیر :مورد Soft limit : حداکثر میزان استفاده از دیسک را برای کاربر ( که البته میتواند از این مقدار عبور کند ! ) مشخص می کند .مورد Hard limit : میزان مطلق استفاده از دیسک را برای کاربر ( که نمیتواند از این مقدار عبور کند ) مشخص می کند .در اینجا لازم است مفهوم مهمی را بنام grace period شرح دهیم :در واقع grace period مدت زمانی است که اگر کاربر از محدودیت ایجاد شده در soft limit عبور کند به وی مهلت داده می شود تا مقدار اضافی فضایی که اشغال کرده است را آزاد کند ، در غیر این صورت بعد از اتمام مهلت تعیین شده اکانت کاربر lock می شود.با دستور زیر می توان مقدار grace period را مشخص کرد ( پیش فرض سیستم ۷ روز است )فایلی با ویرایشگر پیش فرض سیستم جهت ویرایش grace period باز می شود :در مثال خودمان برای کاربر محدودیت ۲ روز را در نظر می گیریم ( البته سیستم آنرا به ثانیه تبدیل میکند )با دستور زیر می توانیم از سیستم quota گزارش بگیریم :قدم ششم :در نهایت می بایست سیستم quota را برای پارتیشن مورد نظر روشن کنیم :با سوییچ p- از فرمان quotaon میتوان وضعیت روشن یا خاموش بودن سیستم quota را مشاهده کرد :کار در این مرحله به پایان میرسد در انتها با کاربر b.barazandeh لاگین کرده تا صحت عملکرد quota را بررسی کنیم.یک فایل می سازیم :از quota گزارش می گیریم :همانطور که مشخص است عدد used یکی افزایش پیدا کردتعدادی دیگر فایل اضافه میکنیم تا از soft limit عبورکنیم :مجددا از quota گزارش می گیریم :مشاهده می شود که grace period از این لحظه وارد عمل می شود .البته اگر در این فاصله تعداد فایل ها به عدد hard limit هم برسد به محض ایجاد یک فایل جدید کاربر با پیغام خطا مواجه می شود ، در نهایت اگر کاربر در مهلت تعیین شده اقدام به آزاد سازی فضای اضافی مصرفی نکند اکانت وی توسط سیستم قفل می شود.امیدوارم از خوندن این مقاله لذت برده باشید - لینوکس همیشه برای من دنیای جذابیه و پر از دانستنی