quota 就字面上的意思來看,呵呵!就是有多少『限額』的意思啦!如果是用在零用錢上面,就是『有多少零用錢一個月』的意思之類的。如果是在容量空間上面呢?以 Linux 來說,呵呵!就是有多少容量限制的意思。
在 Linux 系統中,由於是多人多工的環境,所以會有多人共同使用一個硬碟空間的情況發生,如果其中有少數幾個使用者大量的佔掉了硬碟空間的話,那勢必壓縮其他使用者的使用權力!因此管理員應該適當的開放硬碟的權限給使用者,以妥善的分配系統資源!避免有人抗議呀!比較常使用的幾個情況是:在 Linux 當中,使用來作為硬碟空間管理的就是所謂的 quota 這個咚咚啦!使用這個模組要有幾個步驟,底下就分別說說吧!另外要特別注意的是,使用 quota 時有幾個基本的限制需要談一談:
- (1) 例如每個人的網頁空間的容量限制!
- (2) 每個人的郵件空間限制。
- quota 實際在運作的時候,是針對『整個 partition』進行限制的,例如:如果你的 /dev/hda5 是掛載在 /home 底下,那麼在 /home 底下的所有目錄都會受到限制!
- Linux 系統核心必須有支援 quota 這個模組才行:如果您是使用 Mandrake 的預設核心,嘿嘿!那恭喜你了,你的系統已經預設有開放 quota 這個模組囉!如果您是自行編譯核心的,那麼請特別留意您是否已經『真的』開啟了 quota 這個模組?否則底下的功夫將全部都視為『白工』。至於核心編譯的過程我們會在未來進行說明呦!
quota 這支程式的限制內容主要分為底下幾個部分:
- 目前新版的 Linux distributions 如: Mandrake 9.0 與 Red Hat 8.0 等使用的是 Kernel 2.4.xx 的核心版本,這個核心版本支援新的 quota 模組,使用的預設檔案( aquota.user, aquota.group )將不同於舊版本的 quota.user, quota.group !(多了一個 a 呦!)而由舊版本的 quota 可以藉由 convertquota 這個程式來轉換呢!
- soft :這是最低限制容量的意思,使用者在寬限期間之內,他的容量可以超過 soft ,但必需要寬限時間之內將磁碟容量降低到 soft 的容量限制之下!
- hard :這是『絕對不能超過』的容量!跟 soft 相比的意思為何呢?通常 hard limit 會比 soft limit 為高,例如網路磁碟空間為 30 MB ,那麼 hard limit 就設定為 30MB ,但是為了讓使用者有一定的警戒心,所以當使用空間超過 25 MB 時,例如使用者使用了 27 MB 的空間時,那麼系統就會警告使用者,讓使用者可以在『寬限時間內』將他的檔案量降低至 25 MB ( 亦即是 soft limit )之內!也就是說, soft 到 hard 之間的容量其實就是寬限的容量啦!可以達到針對使用者的『警示』作用!
- 寬限時間:那麼寬限時間就可以很清楚的知道含意是什麼了!也就是當您的使用者使用的空間超過了 soft limit ,卻還沒有到達 hard limit 時,那麼在這個『寬限時間』之內,就必需要請使用者將使用的磁碟容量降低到 soft limit 之下!而當使用者將磁碟容量使用情況超過 soft limit 時,『寬限時間』就會自動被啟動,而在使用者將容量降低到 soft limit 之下,那麼寬限時間就會自動的取消囉!
在開始進行 quota 的實作之前,我們得來瞭解一下 quota 要使用的指令囉!基本上分為兩種,一種是查詢功能(quota, quotacheck, quotastats, warnquota, repquota),另一種則是編輯 quota 的內容( edquota, setquota )。底下我們來談一談這些基本的指令吧!
quota
語法:說明:
[root @test /root ]# quota [-guvs] [user,group]
參數說明:
-g :顯示 group 群組
-u :顯示 user
-v :顯示 quota 的值
-s :選擇 inod 或 硬碟空間來顯示
範例:
[root @test /root ]# quota -guvs <==顯示目前執行者(就是 root )的 quota 值
[root @test /root ]# quota -uvs test <==顯示 test 這個使用者的 quota 值
這個指令僅是使用來『顯示(display)』目前某個群組或者某個使用者的 quota 限值!您可以使用來觀察一下呦!
quotacheck
語法:說明:
[root @test /root ]# quotacheck [-auvg] /yourpath
參數說明:
-a :掃瞄所有在 /etc/mtab 裡頭已經 mount 的具有 quota 支援的磁碟
-u :掃瞄使用者的檔案與目錄
-v :顯示掃瞄過程
-g :掃瞄群組使用的檔案與目錄
-m :強制進行 quotacheck
範例:
範例一、要針對 /home 這個 partition 進行 quota 的規劃:
[root@test root ]# quotacheck -uvg /home <==開始掃瞄 /home 這一個獨立磁區的目錄
quotacheck: Scanning /dev/hda3 [/home] done <==顯示 /home 磁區為 /dev/hda3 !
quotacheck: Checked 35 directories and 342 files <==掃瞄完畢,有 35 目錄與 342 檔案。
[root@test root ]# ls -l /home <==查看一下 /home 這個目錄底下,兩個檔案產生了!
-rw------- 1 root root 7168 May 6 18:37 aquota.group
-rw------- 1 root root 7168 May 6 18:37 aquota.user
關於 quotacheck 發生錯誤的解決方法:
# 有些時候,在新版的 Linux distribution 當中,進行 quotacheck 時,可能會出現
# quotacheck: Cannot get quotafile name for /dev/hda3
# quotacheck: Cannot get quotafile name for /dev/hda3
# 這可能是新版的 quota 在設計時的小問題,解決的方法有兩個:
[root@test root]# quotacheck -uvgm
# 加上 -m 的參數來強制進行,或者是:
[root@test root]# touch /home/aquota.user; touch /home/aquota.group
[root@test root]# quotacheck -uvg
# 既然 quotacheck 找不到 quotafile ,那麼我就手動將 quotafile 建立起來即可!
# 然後再重新進行 quotacheck 一次即可!
# 注意喔!因為我的 /dev/hda3 對應到 /home ,所以當然就是在 /home 底下建立起 qoutafile 了!
這這個指令主要的目的在掃瞄某一個磁碟的 quota 空間,他會針對該磁碟進行掃瞄,並且,由於該磁碟若持續運作時,可能掃瞄的過程中,檔案可能會增減,造成 quota 掃瞄的錯誤發生,因此,當使用 quotacheck 時,該磁碟將『自動被設定成為唯獨磁區(read-only);至於掃瞄完畢之後,掃瞄所得的磁碟空間結果會寫入該磁區最頂端(例如:在我的例子中,掃瞄 /home 這個 /dev/hda3 的磁區,如果是初次掃瞄,那麼掃瞄完畢之後會產生 aquota.user 與 aquota.group ,會放置在 /home/aquota.xxx 底下!而如果是建立 quota 後的掃瞄,那麼就會更新這兩個檔案!)另外, Linux 也特別強調 quota 在使用的時候,需要特別注意在 reboot 時,得先將 quota 關閉才好!
此外,由於新版的 Linux distribution 在 quota 的設計上似乎有點小問題,有時候無法完整的進行 quotacheck ,發生如同上表的情況,解決的方法就是主動手動的建立 quotafile 即可喔!
edquota
語法:說明:
[root @test /root ]# edquota [-u user] [-g group] [-t]
[root @test /root ]# edquota -p user_demo -u user
參數說明:
-u :編輯 user 的 quota
-g :編輯 group 的 quota
-t :編輯寬限時間(就是超過 quota 值後,還能使用硬碟的寬限期限)
-p :copy 範本(以建立好的使用者或群組)到另一個使用者(或群組)
範例:
[root @test /root ]# edquota -u test <==設定 test 這個使用者的 quota 數值,會直接進入 vi 畫面
Disk quotas for user test (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/hda3 8 0 0 5 0 0
修改一下成為:
Disk quotas for user test (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/hda3 8 50005000 5 50005000[root @test /root ]# edquota -p test -u test2 <==將 test 這個人的 quota 資料複製給 test2 這個人!
[root @test /root ]# edquota -t <==設定寬限時間,也就是超過 quota 值之後的修正時間啦!
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/hda3 0minutes 0minutes
上面的 0minutes 可以改成 60minutes 即可!也就是 60 分鐘之內必須要趕快整理硬碟的意思!
這個指令就是在編輯每一個『個人』或者是『群組』的 quota 數值!通常我們以 edquota -u username 或者是 edquota -g groupname 來編輯個人與群組的 quota 設定值。不過,或許您會覺得一個一個分配似乎很慢的樣子!那麼您也可以直接 copy 一個人的設定值給其他人,就如同上面第二個例子,利用已經建立好的 test 來建立 test2 這個人的 quota 限額!這個指令可是很重要的呦!另外,上面有幾個重要的資訊,我們來談一談吧:
- filesystem:這個是那個 partition 的意思!以上面來說,就是 /dev/hda3 囉!
- blocks:這個是目前使用者 test ( uid 501 )在 /dev/hda3 這個 filesystem (參考上面一個資訊),所耗掉的磁碟容量,也就是目前的使用掉的空間啦!單位是 Kbytes 喔!這個資訊是 quota 程式自己計算出來的,所以請不要修改他!
- soft 與 hard :這個是目前的 test 在這個 filesystem 之內的 quota 限制值!至於 soft 與 hard 的意思就如同 14-1 節最後面提的那個意思啦!當 soft 與 hard 數值為 0 的時候,表示『沒有限制』的意思!而數值的單位仍是 Kbytes 喔!
- inodes :是目前使用掉 inode 的狀態,也是 quota 自己計算出來而得到的,所以不要去變更他。一般而言, inode 不容易控制,所以您可以不必去限制 inode 呢!
quotaon
語法:說明:
[root @test /root ]# quotaon [-a] [-uvg directory]
參數說明:
-a :全部的 quota 設定都啟動(會自動去尋找 /etc/mtab 的設定)
-u :使用者的 quota 啟動
-g :群組的 quota 設定啟動
-v :顯示訊息
範例:
[root @test /root ]# quotaon -a <==全部的 quota 限制都啟動
[root @test /root ]# quotaon -uv /home <==只有啟動 /home 底下的使用者 quota 限額,group 不啟動!
這個指令是在啟動 quota 的!不過,由於這個指令是啟動 aquota.group 與 aquota.user 的,所以您就必須要先完成 qutoacheck 的工作了!然後簡單的下達 quotaon -a 即可啟動!
quotaoff
語法:說明:
[root @test /root ]# quotaoff -a
參數說明:
-a :全部的 quota 設定都關閉(會自動去尋找 /etc/mtab 的設定)
範例:
[root @test /root ]# quotaoff -a <==全部的 quota 限制都關閉了!
這個指令就是關閉了 quota 的限制啦!
[root @test
root]# useradd –m –g 501 test2
[root @test root]# passwd test2 Changing password for user test2. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. |
[root @test
root]# df
Filesystem 1K-blocks Used Available Use% Mounted on /dev/hda1 1904920 1088136 720020 61% / /dev/hdb1 976344 71504 854444 8% /backup /dev/hdb2 101540 4252 92048 5% /home |
[root @test
root]# vi /etc/fstab
# device MountPoint filesystem parameters dump fsck /dev/hda1 / ext3 defaults 1 1 /dev/hda2 swap swap defaults 0 0 /dev/hdb1 /backup ext3 defaults 1 1 /dev/hdb2 /home ext3 defaults 1 1 none /dev/pts devpts mode=0620 0 0 none /proc proc defaults 0 0 上面的黃色字體改成底下的樣子!
|
[root@test
/]# umount /dev/hdb2
[root@test /]# mount -a [root@test /]# more /etc/mtab /dev/hda1 / ext3 rw 0 0 none /proc proc rw 0 0 none /proc/bus/usb usbdevfs rw 0 0 none /dev devfs rw 0 0 none /dev/pts devpts rw,mode=0620 0 0 /dev/hdb1 /backup ext3 rw 0 0 /dev/hdb2 /home ext3 rw,usrquota,grpquota 0 0 或者以下列的方式重新
mount 所有的磁碟:
|
[root@test
/]# quotacheck -avug
quotacheck: Scanning /dev/hdb2 [/home] done quotacheck: Checked 10 directories and 22 files [root@test /]# ll /home total 44 -rw------- 1 root root 7168 Oct 28 14:05 aquota.group -rw------- 1 root root 7168 Oct 28 14:05 aquota.user drwx------ 2 root root 16384 Oct 22 16:54 lost+found/ drwxr-xr-x 3 test test 4096 Oct 28 01:45 test/ drwxr-xr-x 3 test2 test 4096 Oct 28 13:37 test2/ |
[root @test
/root ]# cd /home
[root @test /root ]# ls -l aquota* -rw------- 1 root root 7168 May 6 22:16 aquota.group -rw------- 1 root root 7168 May 6 22:16 aquota.user [root @test /root ]# ln -s aquota.group quota.group [root @test /root ]# ln -s aquota.user quota.user |
[root@test
/]# quotaon -av
/dev/hdb2 [/home]: group quotas turned on /dev/hdb2 [/home]: user quotas turned on |
[root @test
/]# edquota –u test
Disk quotas for user test (uid 501): Filesystem blocks soft hard inodes soft hard /dev/hdb2 32 0 0 8 0 0 將上面的原本設定改為底下的模樣:
|
[root@test /]# edquota -p test test2 |
[root@test
/]# 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/hdb2 1days 1days |
[root@test
/]# quota –vu test test2
Disk quotas for user test (uid 501): Filesystem blocks quota limit grace files quota limit grace /dev/hdb2 32 40000 50000 8 0 0 Disk quotas for user test2 (uid 502): Filesystem blocks quota limit grace files quota limit grace /dev/hdb2 28 40000 50000 7 0 0 |
[root@test
/]# edquota -g test
Disk quotas for group test (gid 501): Filesystem blocks soft hard inodes soft hard /dev/hdb2 60 0 0 15 0 0 修改成底下這樣:
[root@test /]#
quota
-vg test
|
[root @test
/root ]# vi /etc/rc.d/rc.local
/sbin/quotaon -aug |
1. 建立並修改
/home/mail 這個目錄:
[root @test /root ]# mkdir /home/mail [root @test /root ]# chown root:mail /home/mail [root @test /root ]# chmod 775 /home/mail 2. 備份並移動原本的
mail 到 /home/mail 底下去:
3. 建立連結:
|
只要這樣的一個小步驟,嘿嘿!您家主機的郵件就有一定的限額囉!當然囉!您也可以依據不同的使用者與群組來設定 quota 然後同樣的以上面的方式來進行 link 的動作!嘿嘿嘿!就有不同的限額針對不同的使用者提出囉!很方便吧!! ^_^