Linux磁碟配額Quota配置詳解

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

什麼是quota
『quota』就字面上的意思來看,呵呵!就是有多少『限額』的意思啦!如果是用在零用錢上面,就是類似『有多少零用錢一個月』的意思之類的.如果是在容量空間上面呢?以Linux來說,呵呵!就是有多少容量限制的意思.

在Linux系統中,是多人多任務的環境,會有多人共同使用一個硬碟空間的情況發生,如果其中有少數幾個使用者大量的佔掉了硬碟空間的話,那勢必壓縮其它使用者的使用權力!因此管理員應該適當的開放硬碟的許可權給使用者,以妥善的分配系統資源!避免有人抗議呀!舉例來說,我們使用者的預設家目錄都是在/home底下,如果/home是個獨立的partition,他大概有10G好了,而/home底下共有30個人,也就是說,每個使用者平均應該會有333MB的空間才對.偏偏有個使用者在他的家目錄底下塞了好多隻影片,佔掉了8GB的空間,想想看,是否造成其它正常使用者的不便呢?這個時候就得要靠『quota』的幫忙了!

Quota的一般用途
quota比較常使用的幾個情況是:
針對Web伺服器,例如:每個人的網頁空間的容量限制!
針對Mail伺服器,例如:每個人的郵件空間限制.
針對File伺服器,例如:每個人最大的可用網路硬碟空間.
在Linux當中,使用來作為硬碟空間管理的就是所謂的quota這個東東啦!
Quota的使用限制
使用這個模塊要有幾個步驟,底下就分別說說吧!另外要特別注意的是,使用quota時有幾個基本的限制需要談一談:
僅針對整個partition:
quota實際在運作的時候,是針對『整個partition』進行限制的,例如:如果你的/dev/hda5是掛載在/home底下,那麼在/home底下的所有目錄都會受到限制!
核心支持quota:


Linux系統核心有支持quota這個模塊才行:如果您是使用FC4的預設核心,嘿嘿!那恭喜你了,你的系統已經預設有開放quota這個模塊啰!如果您是自行編譯核心的,那麼請特別留意您是否已經『真的』開啟了quota這個模塊?至於核心編譯的過程我們會在未來進行說明!
Quota的記錄文件:
目前新版的Linux distributions如:Fedora Core 4與SuSE Server9等使用的是Kernel2.6.xx的核心版本,這個核心版本支持新的quota模塊,使用的預設檔案(aquota.user,aquota.group)將不同於舊版本的quota.user,quota.group!(多了一個a!)而由舊版本的quota可以藉由convertquota這個程序來轉換呢!
只對一般身份使用者有效:
這就有趣了!並不是所有在Linux上面的賬號都可以設定quota呢,例如root就不能設定quota,整個系統所有的數據幾乎都是他的!^_^
quota這支程序對硬碟配額的限制項目:
quota這個程序針對整個partition的限制項目主要分為底下幾個部分:
soft:
這是最低限制容量的意思,使用者在寬限期間之內,他的容量可以超過soft,但必需要寬限時間之內將磁碟容量降低到soft的容量限制之下!
hard:
這是『絕對不能超過』的容量!跟soft相比的意思為何呢?通常hardlimit會比softlimit為高,例如網路磁碟空間為30MB,那麼hardlimit就設定為30MB,但是為了讓使用者有一定的警戒心,當使用空間超過25MB時,例如使用者使用了27MB的空間時,那麼系統就會警告使用者,讓使用者可以在『寬限時間內』將他的檔案量降低至25MB(亦即是softlimit)之內!也就是說,soft到hard之間的容量其實就是寬限的容量啦!可以達到針對使用者的『警示』作用!
寬限時間:
那麼寬限時間就可以很清楚的知道含意是什麼了!也就是當您的使用者使用的空間超過了softlimit,卻還沒有到達hardlimit時,那麼在這個『寬限時間』之內,就必需要請使用者將使用的磁碟容量降低到softlimit之下!而當使用者將磁碟容量使用情況超過softlimit時,『寬限時間』就會自動被啟動,而在使用者將容量降低到softlimit之下,那麼寬限時間就會自動的取消!



基本的quota命令介紹
在開始進行quota的實踐之前,我們得來了解一下quota要使用的指令!基本上分為兩種,一種是查詢功能(quota、quotacheck、quotastats、warnquota、repquota),另一種則是編輯quota的內容(edquota、setquota).下面我們來談一談這些基本的指令吧!

/etc/mtab
怪了!不是說好要說明quota相關指令的嗎?幹嘛提這個檔案系統(Filesystem)實際掛載的記錄文件?呵呵!要注意了~當我們使用quota的時候,基本上,系統會去搜尋:『系統上具有quota參數的partition』啰,當我們要使用quota的功能時,我們的Filesystem已經支持quota才行.一般來說,我們是以編輯/etc/fstab后,再重新掛載Filesystem的方法來讓系統的Filesystem支持quota的!這個概念可是很重要的喔!^_^

quota
[root@linux~]# quota [-uvsl] [username]
[root@linux~]# quota [-gvsl] [groupname]
參數:
-u :後面可以接username,表示顯示出該使用者的quota限制值.若不接username,表示顯示出執行者的quota限制值.
-g :後面可接groupname,表示顯示出該群組的quota限制值.
-v :顯示每個filesystem的quota值;
-s :可選擇以inode或磁碟容量的限制值來顯示;
-l :僅顯示出目前本機上面的filesystem的quota值.

範例:
範例一:秀出目前root自己的quota限制值:
[root@linux~]# quota -guvs
quotacheck
[root@linux ~]# quotacheck [-avug] [/mount_point]
參數:
-a :掃瞄所有在/etc/mtab內,含有quota支持的filesystem,加上此參數后,/mount_point可不必寫,掃描所有的filesystem了嘛!
-u :針對使用者掃描文件與目錄的使用情況,會建立aquota.user
-g :針對群組掃描文件與目錄的使用情況,會建立aquota.group
-v :顯示掃描過程的信息;


-M :『強制』進行quotacheck的掃描.

範例:

範例一:將所有的在/etc/mtab內,含有quota支持的partition進行掃描
[root@linux ~]# quotacheck -avug
quotacheck: Can't find filesystem to check or filesystem not mounted with quota option.
不要緊張,這是正常的現象~您尚未啟用quota的參數!
關於quota參數的下達方法,我們會在稍後說明.如果正常的進行掃描,會像下面這樣:
[root@linux ~]# quotacheck -avug
quotacheck: Scanning /dev/hdb1 [/disk2] done
quotacheck: Checked 3 directories and 4 files
[root@linux ~]# ll /disk2
total 32
-rw------- 1 root root 6144 Sep 5 14:56 aquota.group
-rw------- 1 root root 6144 Sep 5 14:56 aquota.user
drwx------ 2 root root 16384 Jun 25 16:22 lost found
第一次操作quotacheck可能會有一些錯誤訊息發生,那應該是正常的!
如果使用ls -l去查閱一下有quota支持的那個mount point,若有出現aquota.group及aquota.user,那應該就是已經建立好了quota記錄文件了!

範例二:強制掃描已掛載的filesystem
[root@linux ~]# quotacheck -avug -m
有些時候,在某些Linux distributions上面,進行quotacheck時,可能會出現如下的錯誤訊息:
quotacheck: Cannot get quotafile name for /dev/hda3
quotacheck: Cannot get quotafile name for /dev/hda3
果真如此的話,那麼你可以如同上面一般,加上-m的參數來『強制』掃描.
也可以手動先建立記錄文件,然後再掃描,如下所示:
[root@linux ~]# touch /disk2/aquota.user; touch /disk2/aquota.group
[root@linux ~]# quotacheck -avug
要注意的是,我這裡是以/disk2作為一個測試的mount point,您的掛載點不一定會和範例一樣!
這個命令主要的目的在掃描某一個磁碟的quota空間,他會針對該partitions進行掃描,並且,該磁碟若持續運作時,可能掃描的過程中,文件可能會增減,造成quota掃描的錯誤發生,因此,當使用quotacheck時,該磁碟將『自動被設定成為只讀扇區(read-only)』;至於掃描完畢之後,掃瞄所得的磁碟空間結果會寫入該扇區最頂端.(例如:在例子中,掃描/disk2這個/dev/hdb1的扇區,如果是初次掃描,那麼掃描完畢之後會產生aquota.user與aquota.group,會放置在/disk2/aquota.user與/disk2/aquota.group底下!而如果是建立quota后的掃描,那麼就會更新這兩個文件!)另外,Linux也特彆強調quota在使用的時候,需要特別注意在reboot時,得先將quota關閉才好!



此外,新版的Linux distribution在quota的設計上似乎有點小問題,有時候無法完整的進行quotacheck,發生如同上表的情況,解決的方法就是主動手動的建立quotafile即可!例如上面的範例二所顯示的.

edquota
[root@linux ~]# edquota [-u username] [-g groupname]
[root@linux ~]# edquota -t <==修改寬限時間
[root@linux ~]# edquota -p username_demo -u username
參數:
-u :後面接賬號名稱.可以進入quota的編輯畫面(vi)去設定username的限制值;
-g :後面接群組名稱.可以進入 quota 的編輯畫面(vi)去設定groupname的限制值;
-t :可以修改寬限時間(就是超過quota的soft limit值后,還能使用硬碟的寬限期限)
-p :複製範本.那個username_demo為已經存在並且已設定好quota的使用者,
意義為『將username_demo這個人的quota限制值複製給username』!

範例:

範例一:設定dmtsai這個用戶的quota限制值
[root@linux ~]# edquota -u dmtsai
Disk quotas for user dmtsai (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/hdb1 0 0 0 0 0 0
進入編輯畫面后,以vi的相關行為進行編輯喔!
我們可以看到被編輯的用戶是dmtsai,
而下面共有七個欄位,每個欄位的意義我們將在底下的說明繼續介紹.而假設我們對於dmtsai的限制是30MB的話,那麼:
Disk quotas for user dmtsai (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/hdb1 0 25000 30000 0 0 0
然後就可以儲存后離開!

範例二:將dmtsai的quota限制值(30MB)複製給vbird1這個用戶
[root@linux ~]# edquota -p dmtsai -u vbird1

範例三:修訂寬限時間
[root@linux ~]# 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/hdb1 7days 7days
預設的恕限時間是7天!你當然可以修訂時間!
這個命令就是在編輯每一個『個人』或者是『群組』的quota數值!通常我們以edquota –u username或者是edquota -g groupname來編輯個人與群組的quota設定值.不過,或許您會覺得一個一個分配似乎很慢的樣子!那麼您也可以直接copy一個人的設定值給其它人,就如同上面第二個例子,利用已經建立好的dmtsai來建立vbird1這個人的quota限額!這個指令可是很重要的呦!另外,範例一當中出現的那七個欄位代表的意義我們得要談一談啊:

filesystem:
代表這個quota是針對哪一個partition的意思.以範例一的情況來說,指的是/dev/hdb1啰!也就是/disk2那個目錄底下的quota限制值啦!
blocks:
這個是目前使用者dmtsai(uid501)在/dev/hdb1這個filesystem(參考上面一個信息),所消耗的磁碟容量,也就是目前的使用掉的空間啦!單位是Kbytes喔!這個信息是quota程序自己計算出來的,請不要修改他!
soft與hard:
這個是目前的dmtsai使用者在這個filesystem之內的quota限制值!至於soft與hard的意思就如同前一節面提的那個意思啦!soft代表的是一個『警告』限值,hard則是一個『不可超過的限值』,soft與hard中間的差值則為寬限的數值.而當soft與hard數值為0的時候,表示『沒有限制』的意思!而數值的單位仍是Kbytes喔!
inodes:
是目前使用掉inode的狀態,也是quota自己計算出來而得到的,不要去變更他.一般而言,inode不容易控制,您可以不必去限制inode呢!

quotaon
[root@linux ~]# quotaon [-avug]
[root@linux ~]# quotaon [-vug] [/mount_point]
參數:
-u :針對用戶啟動quota(aquota.user)


-g :針對群組啟動 quota(aquota.group)
-v :顯示啟動過程的相關訊息;
-a :根據/etc/mtab內的filesystem設定啟動有關的quota,若不加-a的話,
則後面就需要加上特定的那個filesystem!
範例:

範例一:啟動所有的具有quota的filesystem
[root@linux ~]# quotaon -auvg
/dev/hdb1 [/disk2]: group quotas turned on
/dev/hdb1 [/disk2]: user quotas turned on

範例二:僅啟動/disk2裡面的user quota設定值:
[root@linux ~]# quotaon -uv /disk2
這個命令是在啟動quota的!不過,這個指令是啟動aquota.group與aquota.user的,您就要先完成quotacheck的工作了!然後簡單的下達quotaon -a即可啟動!

quotaoff
[root@linux ~]# quotaoff [-a]
[root@linux ~]# quotaoff [-ug] [/mount_point]
參數:
-a :全部的filesystem的quota都關閉(根據/etc/mtab)
-u :僅針對後面接的那個/mount_point關閉user quota
-g :僅針對後面接的那個/mount_point關閉group quota

範例:

範例一:
[root@linux ~]# quotaoff -a
這個命令就是關閉了quota的限制啦!

本文出自 「快樂學習快樂生活」 博客,請務必保留此出處http://chinaunix.blog.51cto.com/2181127/416655





[火星人 ] Linux磁碟配額Quota配置詳解已經有364次圍觀

http://coctec.com/docs/linux/show-post-47912.html