แม้ ว่าทุกวันนี้ขนาดของดิสก์จะมีขนาดมากขึ้นเรื่อยๆ และมีราคาที่ถูกลง แต่ปริมาณความต้องการของผู้ใช้งานกลับเพิ่มสูงขึ้น กระทั่งไม่ว่าจะเพิ่มดิสก์เท่าไร ก็ไม่เพียงพอ
โดยดีฟลอต์เซิร์ฟเวอร์ลีนุกซ์ที่ติดตั้ง จะไม่มีการจำกัดพื้นที่ดิสก์ของผู้ใช้งาน แต่ละคนสามารถใช้ได้จนกระทั่งขนาดของดิสก์ไม่เพียงพอ
บทความนี้ขอนำเสนอวิธีการคอนฟิก Disk Quota เพื่อจำกัดปริมาณการใช้งานดิสก์ โดยสามารถทำได้เป็นระดับรายผู้ใช้งาน (user quota) หรือจะแบ่งเป็นกลุ่ม (group quota) ได้
ระบบที่ทดสอบ
การคอนฟิก Disk Quota ต้องทำระดับ mount point โดยต้องเลือกว่าจะเปิดคุณสมบัติ (quotaon) กับ mount point ใด แนะนำให้ตอนติดตั้งลีนุกซ์ แยก partition ที่เป็น /home ต่างหาก ซึ่งเป็น mount point ที่เป็น home directory ของผู้ใช้งาน (user) แล้วเปิด quota เฉพาะ ส่วนนี้
ลีนุกซ์ส่วนใหญ่จะสนับสนุน disk quota ในระดับ kernel อยู่แล้ว แต่ไม่ได้เปิดการใช้งาน (quotaon) ไว้ ในบทความนี้เป็นการทดสอบคอนฟิกกับ /home บน Fedora 10
ตัวอย่างการแบ่ง partition ของเครื่องที่ทดสอบ
[root@server ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 1011960 201320 759232 21% /
/dev/sda1 202219 13513 178266 8% /boot
/dev/sda5 1011928 17680 942844 2% /tmp
/dev/sda6 1011928 18700 941824 2% /home
/dev/sda7 5044156 939604 3848320 20% /usr
/dev/sda8 1019864 37860 930196 4% /var
tmpfs 189632 0 189632 0% /dev/shm
ตัวอย่างไฟล์ /etc/fstab ของเครื่องที่ทดสอบ
[root@server ~]# cat /etc/fstab
/dev/sda1 /boot ext3 defaults 1 2
/dev/sda2 / ext3 defaults 1 1
/dev/sda5 /tmp ext3 defaults 1 2
/dev/sda6 /home ext3 defaults 1 2
/dev/sda7 /usr ext3 defaults 1 2
/dev/sda8 /var ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/sda3 swap swap defaults 0 0
เปิดคุณสมบัติ user quota
เริ่มต้น เราจะทดสอบ user quota ก่อน โดยต้องทำการ remount แล้วเพิ่มออปชั่น userquota
[root@server ~]# mount | grep home
/dev/sda6 on /home type ext3 (rw)
[root@server ~]# mount -o remount,usrquota /home
[root@server ~]# mount | grep home
/dev/sda6 on /home type ext3 (rw,usrquota)
สร้างไฟล์ aquota.user สำหรับเก็บ user quota
[root@server ~]# cd /home
[root@server home]# touch aquota.user
[root@server home]# chmod 600 aquota.user
[root@server home]# ls -l
total 28
-rw------- 1 root root 0 2009-03-28 13:58 aquota.user
drwx------ 2 root root 16384 2009-02-21 21:15 lost+found
drwx------ 3 user1 users 4096 2009-03-29 13:02 user1
drwx------ 3 user2 users 4096 2009-03-29 12:59 user2
รันคำสั่ง quotacheck เพื่อตรวจสอบปริมาณการใช้งานดิสก์ของแต่ละผู้ใช้
[root@server home]# quotacheck -vgum /home
quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown.
quotacheck: WARNING - Quotafile /home/aquota.user was probably truncated. Cannot save quota settings...
quotacheck: Scanning /dev/sda6 [/home] done
quotacheck: Old group file not found. Usage will not be substracted.
quotacheck: Checked 7 directories and 14 files
ถ้ารันคำสั่ง quotacheck ถูกต้อง จะมีการเขียนข้อมูลลงในไฟล์ aquota.user ใช้คำสั่ง ls ดู จะเห็นว่ามีขนาดเพิ่มขึ้น
[root@server home]# ls -l
total 36
-rw------- 1 root root 7168 2009-03-28 13:59 aquota.user
drwx------ 2 root root 16384 2009-02-21 21:15 lost+found
drwx------ 3 user1 users 4096 2009-03-29 13:02 user1
drwx------ 3 user2 users 4096 2009-03-29 12:59 user2
เปิดคุณสมบัติ quota ด้วยคำสั่ง quotaon
[root@server home]# quotaon -v /home
/dev/sda6 [/home]: user quotas turned on
ใช้คำสั่ง repquota เพื่อแสดงรายงานการใช้งานดิสก์ของแต่ละคน
[root@server home]# repquota /home
*** Report for user quotas on device /dev/sda6
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 17676 0 0 4 0 0
user1 -- 44 0 0 8 0 0
user2 -- 24 0 0 6 0 0
แก้ไขไฟล์ /etc/fstab
เมื่อทดสอบ quota สำเร็จแล้ว สุดท้ายต้องมีการเพิ่มออปชั่นลงไปในไฟล์ /etc/fstab เพื่อให้มีผลหลังจากที่มีการรีบู๊ตเครื่อง
ตัวอย่างการเพิ่มออปชั่น usrquota ที่ /home ในไฟล์ /etc/fstab
[root@server ~]# cat /etc/fstab
/dev/sda1 /boot ext3 defaults 1 2
/dev/sda2 / ext3 defaults 1 1
/dev/sda5 /tmp ext3 defaults 1 2
/dev/sda6 /home ext3 defaults,usrquota 1 2
/dev/sda7 /usr ext3 defaults 1 2
/dev/sda8 /var ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/sda3 swap swap defaults 0 0
ยกเลิกการใช้ user quota
หากต้องการยกเลิกการใช้งาน user quota สามารถทำได้ดังนี้
รันคำสั่ง quotaoff เพื่อปิดการตรวจสอบ quota (ถ้าต้องการปิดการใช้ user quota ชั่วคราว ให้รันคำสั่งนี้ก็เพียงพอแล้ว ไม่ต้องทำขั้นต่อไป)
[root@server ~]# quotaoff -v /home
/dev/sda6 [/home]: user quotas turned off
แก้ไขไฟล์ /etc/fstab โดยลบ usrquota ที่เพิ่มเข้าไปในบรรทัดของ mount point แล้วรันคำสั่ง mount เพื่อ remount ใหม่ แต่ไม่มีออปชั่น usrquota
[root@server ~]# mount | grep home
/dev/sda6 on /home type ext3 (rw,usrquota)
[root@server ~]# mount -o remount /home
[root@server ~]# mount | grep home
/dev/sda6 on /home type ext3 (rw)
ลบไฟล์ aquota.user
[root@server ~]# cd /home/
[root@server home]# ls -l
total 36
-rw------- 1 root root 7168 2009-03-28 14:07 aquota.user
drwx------ 2 root root 16384 2009-02-21 21:15 lost+found
drwx------ 3 user1 users 4096 2009-03-28 14:05 user1
drwx------ 3 user2 users 4096 2009-03-29 12:59 user2
[root@server home]# rm -f aquota.user
ในตอนต่อไปจะกล่าวถึงวิธีการกำหนดค่า quota ของแต่ละผู้ใช้งาน