คอนฟิกลีนุกซ์ Disk Quota ตอนที่ 2

หลังจากที่เปิดการใช้งาน disk quota กับ /home แล้ว ในตอนที่ 2 นี้จะอธิบายการกำหนดปริมาณการใช้งานดิสก์ของผู้ใช้งานแต่ละคน (user quota)

วิธีตรวจสอบค่า disk quota

เราสามารถตรวจสอบค่า quota ที่ถูกกำหนดไว้ ได้สองวิธีคือ

1. เป็น root แล้วใช้คำสั่ง repquota วิธีนี้จะแสดงรายงานของผู้ใช้งานทั้งหมด ทั้งการกำหนดค่า quota พร้อมทั้งขนาดของดิสก์ที่ผู้ใช้งานแต่ละรายใช้ไป

ตัวอย่างการใช้ repquota

[root@server ~]# 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

2. ผู้ใช้ธรรมดาร (normal user) สามารถใช้คำสั่ง quota เพื่อตรวจสอบค่าการใช้งานดิสก์ของตัวเองได้

ตัวอย่างการใช้คำสั่ง quota

[user1@server ~]$ quota
Disk quotas for user user1 (uid 500): none

การกำหนด disk quota ของผู้ใช้งาน (user quota)

คอนฟิกเริ่มต้นหลังจากรันคำสั่ง quotacheck และ quotaon จะมีการตรวจสอบขนาดดิสก์ที่ถูกใช้ไป ของผู้ใช้งานแต่ละคน แต่ยังไม่มีการกำหนดค่าสูงสุดที่ใช้ได้ สังเกตค่าตัวเลขจะเป็น 0 ซึ่งเป็นค่าที่แสดงว่าไม่มีการจำกัดปริมาณการใช้งาน

ใช้คำสั่ง edquota ด้วย root เพื่อกำหนด disk quota ของผู้ใช้แต่ละคน โดยคำสั่งนี้จะเปิดโปรแกรม vi เพื่อให้เราแก้ไขค่าต่างๆ ของการใช้งานดิสก์ของผู้ใช้งานได้

ตัวอย่างการกำหนด disk quota ของ user1

[root@server ~]# edquota -u user1
Disk quotas for user user1 (uid 500):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda6                        44          0          0          8        0        0

ความหมายของค่าต่างๆ มีดังนี้

เราสามารถจำกัดปริมาณการใช้งาน disk quota ได้สองแบบ คือ

1. กำหนดเป็นขนาดพื้นที่ดิสก์ที่ใช้งานได้ มีหน่วยเป็น blocks คำนวณคร่าวๆ 1 block คือ 1 kilo bytes
2. กำหนดเป็นจำนวนไฟล์ที่สร้างขึ้นได้ มีหน่วยเป็น inodes หนึ่งไฟล์ใช้ 1 inode

โดยทั่วไปนิยมกำหนดเป็นแบบแรกมากกว่า คือกำหนดขนาดพื้นที่ดิสก์ที่สามารถใช้งานได้

ส่วนค่าที่กำหนดมีสองระดับคือ

1. soft เป็นปริมาณที่อนุญาตให้ใช้เกินค่านี้ได้ แต่จะอยู่ในระยะเวลาที่กำหนด (grace)
2. hard เป็นค่าสูงสุดที่ใช้ได้ ผู้ใช้งานไม่สามารถสร้างไฟล์เพิ่มเติมมากกว่านี้ได้อีกแล้ว

ตัวอย่างการกำหนดให้ user1 สามารถใช้พื้นที่ดิสก์ได้แบบ soft เท่ากับ 100 MB และแบบ hard ได้เท่ากับ 200 MB

[root@server ~]# edquota -u user1
Disk quotas for user user1 (uid 500):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda6                        44     100000     200000          8        0        0
[root@server ~]# repquota -a
*** 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  100000  200000              8     0     0
user2     --      24       0       0              6     0     0

ทดลองสร้างไฟล์ด้วย user

ล็อกอินเป็น user1 เพื่อตรวจสอบแล้วทดลองสร้างไฟล์ขึ้นมา

[user1@server ~]$ quota
Disk quotas for user user1 (uid 500):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6      44  100000  200000               8       0       0

หมายเหตุ ผลลัพธ์ที่แสดงจากคำสั่ง quota จะเปลี่ยนคำว่า soft เป็นคำว่า quota และเปลี่ยน hard เป็นคำว่า limit

ใช้คำสั่ง dd เพื่อสร้างไฟล์ 50 MB

[user1@server ~]$ dd if=/dev/zero of=file-50M.bin bs=1000000 count=50
50+0 records in
50+0 records out
50000000 bytes (50 MB) copied, 0.726378 s, 68.8 MB/s
[user1@server ~]$ ls -l
total 48884
-rw-r--r-- 1 user1 users 50000000 2009-03-28 16:19 file-50M.bin
[user1@server ~]$ quota
Disk quotas for user user1 (uid 500):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6   48928  100000  200000               9       0       0

ทดลองสร้างอีกไฟล์ที่มีขนาด 60 MB

[user1@server ~]$ dd if=/dev/zero of=file-60M.bin bs=1000000 count=60
60+0 records in
60+0 records out
60000000 bytes (60 MB) copied, 0.860898 s, 69.7 MB/s
[user1@server ~]$ ls -l
total 107544
-rw-r--r-- 1 user1 users 50000000 2009-03-28 16:19 file-50M.bin
-rw-r--r-- 1 user1 users 60000000 2009-03-28 16:20 file-60M.bin
[user1@server ~]$ quota
Disk quotas for user user1 (uid 500):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6  107588* 100000  200000   7days      10       0       0

หลังจากที่สร้างไฟล์ที่สอง เท่ากับว่าผู้ใช้คนนี้ user1 มีการใช้งานดิสก์ไปแล้ว 110 MB ซึ่งมากกว่าค่า soft (quota) ที่กำหนดไว้ ใช้คำสั่ง quota ตรวจสอบ จะเห็นว่ามีเครื่องหมายดอกจัน (*) อยู่หลัง จำนวน blocks ที่ถูกใช้ไป พร้อมทั้งมีค่า 7days ในช่อง grace ขึ้นมา เพื่อแสดงว่า ผู้ใช้งานคนนี้ยังสามารถใช้พื้นที่ดิสก์ได้ต่อไปอีก 7 วัน แต่หลังจากนี้จะไม่อนุญาตให้สร้างได้อีกแล้ว

ทดลองสร้างไฟล์เพิ่มเติม 70 MB จะเห็นว่ายังสามารถใช้ดิสก์เพิ่มเติมได้อยู่ ขนาดรวมตอนนี้ 180MB ตราบเท่าที่ยังไม่เกิน 7days หรือไม่เกิน hard (limit)

[user1@server ~]$ dd if=/dev/zero of=file-70M.bin bs=1000000 count=70
70+0 records in
70+0 records out
70000000 bytes (70 MB) copied, 0.203143 s, 345 MB/s
[user1@server ~]$ ls -l
total 175976
-rw-r--r-- 1 user1 users 50000000 2009-03-28 16:19 file-50M.bin
-rw-r--r-- 1 user1 users 60000000 2009-03-28 16:20 file-60M.bin
-rw-r--r-- 1 user1 users 70000000 2009-03-28 16:25 file-70M.bin
[user1@server ~]$ quota
Disk quotas for user user1 (uid 500):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6  176020* 100000  200000   6days      11       0       0

ทดลองสร้างไฟล์เพิ่มอีก 80 MB

[user1@server ~]$ dd if=/dev/zero of=file-80M.bin bs=1000000 count=80
dd: writing `file-80M.bin': Disk quota exceeded
25+0 records in
24+0 records out
24526848 bytes (25 MB) copied, 0.174226 s, 141 MB/s
[user1@server ~]$ ls -l
total 199956
-rw-r--r-- 1 user1 users 50000000 2009-03-28 16:19 file-50M.bin
-rw-r--r-- 1 user1 users 60000000 2009-03-28 16:20 file-60M.bin
-rw-r--r-- 1 user1 users 70000000 2009-03-28 16:25 file-70M.bin
-rw-r--r-- 1 user1 users 24526848 2009-03-28 16:30 file-80M.bin

มีข้อความ error “Disk quota exceeded” เกิดขึ้น จะเห็นว่าไฟล์ที่สร้างขึ้นใหม่ ไม่สำเร็จ โดย quota จะอนุญาตให้สร้างไฟล์ได้ถึงขนาดพื้นที่ดิสก์รวมไม่เกินค่า hard (limit) เท่านั้น

[user1@server ~]$ quota
Disk quotas for user user1 (uid 500):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6  200000* 100000  200000   6days      12       0       0

ถึงตอนนี้ user1 จะไม่สามารถสร้างไฟล์ได้อีกแล้ว เพราะใช้เกินค่า hard limit แล้ว ผู้ใช้คนนี้ต้องลบไฟล์ที่มีอยู่ออกไปก่อน หรือไม่ก็ต้องขอพื้นที่ disk เพิ่มเติม

[user1@server ~]$ rm -f file-80M.bin
[user1@server ~]$ rm -f file-70M.bin
[user1@server ~]$ ls -l
total 107544
-rw-r--r-- 1 user1 users 50000000 2009-03-28 16:19 file-50M.bin
-rw-r--r-- 1 user1 users 60000000 2009-03-28 16:20 file-60M.bin
[user1@server ~]$ quota
Disk quotas for user user1 (uid 500):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6  107588* 100000  200000   6days      10       0       0
[user1@server ~]$ dd if=/dev/zero of=file-80M.bin bs=1000000 count=80
80+0 records in
80+0 records out
80000000 bytes (80 MB) copied, 0.900514 s, 88.8 MB/s
[user1@server ~]$ ls -l
total 185756
-rw-r--r-- 1 user1 users 50000000 2009-03-28 16:19 file-50M.bin
-rw-r--r-- 1 user1 users 60000000 2009-03-28 16:20 file-60M.bin
-rw-r--r-- 1 user1 users 80000000 2009-03-28 16:34 file-80M.bin
[user1@server ~]$ quota
Disk quotas for user user1 (uid 500):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6  185800* 100000  200000   6days      11       0       0

เมื่อใช้ดิสก์เกินค่า soft (quota) เลยระยะเวลา grace

เมื่อใช้พื้นที่ดิสก์เกินค่า soft (quota) ไปแล้ว ผู้ใช้งานยังสามารถสร้างไฟล์ได้เพิ่มเติมอีก ตราบที่ยังไม่เกินค่าเวลา grace ดีฟอลต์คือ 7 วัน แต่ถ้าเกินระยะเวลานี้แล้ว ผู้ใช้งานจะไม่สามารถสร้างไฟล์เพิ่มเติมได้อีกแล้ว

[user1@server ~]$ date
Sat Mar 28 16:38:12 ICT 2009
[user1@server ~]$ quota
Disk quotas for user user1 (uid 500):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6  185800* 100000  200000   6days      11       0       0

สมมติว่าระยะเวลาผ่านไปเกิน 7 วันแล้ว เมื่อใช้คำสั่ง quota ดู จะเห็นว่าช่อง grace เป็นเป็นค่า none

[user1@server ~]$ date
Sat Apr  4 17:00:04 ICT 2009
[user1@server ~]$ quota
Disk quotas for user user1 (uid 500):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6  185800* 100000  200000    none      11       0       0

ผู้ใช้คนนี้จะไม่สามารถสร้างไฟล์ได้เพิ่มอีกแล้ว จะมี error ฟ้องว่า “Disk quota exceeded” ตลอด ซึ่งเป็นเพราะว่า ผู้ใช้คนนี้ใช้เกินค่า soft เกินระยะเวลา grace แล้วนั่นเอง

[user1@server ~]$ dd if=/dev/zero of=file-1M.bin bs=1000000 count=1
dd: writing `file-1M.bin': Disk quota exceeded
1+0 records in
0+0 records out
0 bytes (0 B) copied, 0.00622609 s, 0.0 kB/s
[user1@server ~]$ ls -l
total 185756
-rw-r--r-- 1 user1 users        0 2009-04-04 17:01 file-1M.bin
-rw-r--r-- 1 user1 users 50000000 2009-03-28 16:19 file-50M.bin
-rw-r--r-- 1 user1 users 60000000 2009-03-28 16:20 file-60M.bin
-rw-r--r-- 1 user1 users 80000000 2009-03-28 16:34 file-80M.bin
[user1@server ~]$ quota
Disk quotas for user user1 (uid 500):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6  185800* 100000  200000    none      12       0       0

วิธีการแก้ไข ผู้ใช้คนนี้ต้องลบไฟล์ที่ไม่ใช้งานออกไป จนกว่าขนาดพื้นที่ดิสก์ที่ใช้ จะต่ำกว่าค่า soft ที่ถูกกำหนดไว้

[user1@server ~]$ rm -f file-1M.bin
[user1@server ~]$ rm -f file-50M.bin
[user1@server ~]$ quota
Disk quotas for user user1 (uid 500):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6  136916* 100000  200000    none      10       0       0
[user1@server ~]$ rm -f file-60M.bin
[user1@server ~]$ quota
Disk quotas for user user1 (uid 500):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sda6   78256  100000  200000               9       0       0
[user1@server ~]$ dd if=/dev/zero of=file-1M.bin bs=1000000 count=1
1+0 records in
1+0 records out
1000000 bytes (1.0 MB) copied, 0.0120102 s, 83.3 MB/s

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.