轉自:中國IT實驗室
Quota使用的方面很廣,不過,一般的用途有以下這些:
限制某一群組所能使用的最大磁碟配額(使用群組限制):你可以將你的系統上的使用者分門別類,有點像是目前很流行的付費與免付費會員制的情況,你比較喜好的那一群的使用配額就可以給高一些!呵呵!^_^ 限制某一使用者的最大磁碟配額(使用使用者限制):在限制了群組之後,您也可以再繼續針對個人來進行限制,使得同一群組之下還可以有更公平的分配!以Link的方式,來使郵件可以作為限制的配額(更改/var/spool/mail這個路徑):如果是分為付費與免付費會員的『郵件主機系統』,是否需要重新再規劃一個硬碟呢?也不需要啦!直接使用Link的方式指向/home(或者其它已經做好的quota磁碟)就可以啦!這通常是用在原本規劃不好,但是卻又不想要更動原有主機架構的情況中啊!
那麼quota從開始準備filesystem的支援到整個設定結束的主要的步驟大概是:1. 設定partition的filesystem支援quota參數:由於quota必須要讓partition上面的filesystem支援才行,一般來說,支援度最好的是ext2/ext3,啟動filesystem支援quota最簡單就是編輯/etc/fstab,使得準備要開放的quota磁碟可以支援quota;2. 建立quota記錄檔案:剛剛前面講過,整個quota進行磁碟限制值記錄的檔案是aquota.user/aquota.group,要建立這兩個檔案就必須要先利用quotacheck掃描才行喔!所以,接下來的步驟就是:使用quotacheck來掃描一下我們要使用的磁碟;3. 編輯quota限制值資料:再來就是使用edquota來編輯每個使用者或群組的可使用空間;4. 重新掃描與啟動quota:設定好quota之後,建議可以再進行一次quotacheck,然後再以quotaon來啟動吧!
整個quota設定的步驟就只是這樣而已,簡單吧!我們下面就直接來用一個範例介紹一下整個流程,好讓您更清楚的瞭解到整個步驟!範例是這樣的:1. Linux主機裡面主要針對quser1及quser2這兩個使用者來進行磁碟配額,且這兩個使用者都是掛在qgroup群組裡面的。2. 每個使用者總共有50MB的磁碟空間(不考慮inode)限制!並且soft limit為45MB;3. 而寬限時間設定為1天,也就是說,這兩個人可以突破45MB的限制,但是在一天之內必須要將多餘的檔案刪除,否則將無法使用剩下的空間(也就是說,這個帳號大概就不能進行建立檔案的工作了);4. gquota這個群組考慮最大限額,所以設定為90MB好了!
多說無用,我們就實際來進行!1. 準備好測試的環境,使用者與群組的建立:這兩個帳號應該是不存在我們的系統的,所以,趕緊將他設定上去吧![root@linux ~]# groupadd qgroup[root@linux ~]# useradd -m -g qgroup quser1[root@linux ~]# useradd -m -g qgroup quser2[root@linux ~]# passwd quser1[root@linux ~]# passwd quser22. 建立好filesystem的quota支援:由於quota較完整的支援是需要在ext2/ext3的Linux檔案系統下才可以啟動,所以建議你就必須要將準備開啟quota的磁碟啟動參數,寫入 quota的磁碟設定才行(/etc/fstab)!以例子而言,想要在/disk2下進行quota的限制quser1,quser2這兩個使用者!這是 因為這個/disk2是一個獨立的扇區,這可以使用df來查詢。此外,必需特別留意的是,最好不要以根目錄亦即是/進行quota!否則容易有些問題!另 外,不要針對root做quota!反正做了也沒用![root@linux ~]# dfFilesystem 1K-blocks Used Available Use% Mounted on/dev/hda1 5952252 3193292 2451720 57% //dev/hdb1 28267608 77904 26730604 1% /disk2/dev/hda5 9492644 227252 8775412 3% /disk1嗯!/disk2是獨立的partition,並且他的裝置名稱為/dev/hdb1,好了!那麼我就必須要啟動/disk2這個/dev/hdb1的 quota檔案格式,好了!那麼由於檔案格式的設定是寫在/etc/fstab裡頭,所以我們以vi來編輯他吧!只要在/etc/fstab裡頭增加了 usrquota、grpquota就可以啦!(註:請特別留意,這兩個項目請『務必』不要寫錯了!請在寫入/etc/fstab之前好好的再次檢查,因 為寫錯之後,很有可能造成系統無法開機,雖然寫錯的機率不高,但是很有可能!)[root@linux ~]# vi /etc/fstabLABEL=/ / ext3 defaults 1 1LABEL=/disk1 /disk1 ext3 defaults 1 2LABEL=/disk2 /disk2 ext3 defaults,usrquota,grpquota 1 2/dev/hda3 swap swap defaults 0 0注意到我們所需要設定的那個/disk2的那一行,在第四欄位多了usrquota,grpquota注意,在『defaults,usrquota,grpquota』之間都沒有空格!這樣就算加入了quota的磁碟格式了!不過,由於真正的quota在讀取的時候是讀取/etc/mtab 這個檔案的,偏偏這一個檔案需要重新開機之後才能夠以/etc/fstab的新資料進行改寫!所以這個時候你可以選擇:重新開機(reboot);重新remount filesystem來啟動設定!對不太喜歡重新開機的人,可以這樣做:[root@linux ~]# umount /dev/hdb1[root@linux ~]# mount -a[root@linux ~]# grep '/disk2' /etc/mtab/dev/hdb1 /disk2 ext3 rw,usrquota,grpquota 0 0事實上,也可以利用mount的remount功能![root@linux ~]# mount -o remount /disk2這樣我們就已經成功的將filesystem的quota功能加入了!另外,在這裡是以ext3這個磁碟格式來測試quota的!3. 掃描磁碟的使用者使用狀況,併產生重要的aquota.group與aquota.user:接下來就是要來掃描一下我們所需要的磁碟到底有沒有多餘的空間可以讓我們來設定quota呢?並且將掃描的結果輸出到這個磁碟的最頂層去(也就是 /disk2下)這個時候就需要quotacheck這個命令的幫忙了!使用quotacheck就可以輕易的輸出了將所需要的資料!並在/disk2下 會產生aquota.group與aquota.user這兩個檔案![root@linux ~]# quotacheck -avugquotacheck: Scanning /dev/hdb1 [/disk2] donequotacheck: Checked 3 directories and 4 files[root@linux ~]# ll /disk2-rw------- 1 root root 6144 Sep 6 11:44 aquota.group-rw------- 1 root root 6144 Sep 6 11:44 aquota.user使用quotacheck就可以輕易的將所需要的資料給他輸出了!但是很奇怪的是,在某些Linux 版本中,不能夠以aquota.user(group)來啟動quota,這有可能是因為舊版quota的關係,所以就另外做了一個link檔案來欺騙quota:[root@linux ~]# cd /disk2[root@linux ~]# ln -s aquota.user quota.user[root@linux ~]# ln -s aquota.group quota.group除非您的Linux distributions是比較舊的版本,否則不會有這個問題,所以,這個動作你不一定要進行!4. 啟動quota的限額:再來就是要啟動quota啦!啟動的方式也是很簡單的!就是使用quotaon -av即可:[root@linux ~]# quotaon -avug/dev/hdb1 [/disk2]: group quotas turned on/dev/hdb1 [/disk2]: user quotas turned on注意:要看到上面有個turned on的出現,才是真的成功了!5. 編輯使用者的可使用空間:由於我們有兩個使用者要設定,先來設定quser1好了,使用edquota就對了:[root@linux ~]# edquota -u quser1Disk quotas for user quser1 (uid 502):Filesystem blocks soft hard inodes soft hard/dev/hdb1 0 45000 50000 0 0 0再次強調的是,因為我的/disk2裡面並沒有任何資料存在,所以,在上面這個表格當中,blocks與inodes才會都是0,如果您是使用/home 來進行quota設定的,那麼blocks/inodes肯定不會是0,這裡要特別留意的。好了,上面特殊字型的部分就是我們的設定了,分別是45000 及50000,那個單位是KBytes啦,轉成MBytes應該是要除以1024才對,不過,簡單算一下就好了,不用太介意!^_^。然後將quser1 的設定直接複製給quser2吧![root@linux ~]# edquota -p quser1 quser2接下來要來設定寬限時間,還是使用edquota![root@linux ~]# edquota -tGrace period before enforcing soft limits for users:Time units may be: days, hours, minutes, or secondsFilesystem Block grace period Inode grace period/dev/hdb1 1days 7days將時間改為1天(原本是7days改成1days),好了!查詢一下是否真的有設定進去呢?使用quota -v來查詢:[root@linux ~]# quota -vu quser1 quser2Disk quotas for user quser1 (uid 502):Filesystem blocks quota limit grace files quota limit grace/dev/hdb1 0 45000 50000 0 0 0Disk quotas for user quser2 (uid 503):Filesystem blocks quota limit grace files quota limit grace/dev/hdb1 0 45000 50000 0 0 0特別注意到,由於我們的使用者尚未超過45MB,所以grace(寬限時間)就不會出現啦!這樣很夠清楚了吧?!6. 編輯群組可使用的空間:[root@linux ~]# edquota -g qgroupDisk quotas for group qgroup (gid 502):Filesystem blocks soft hard inodes soft hard/dev/hdb1 0 80000 90000 0 0 0[root@linux ~]# quota -vg qgroupDisk quotas for group qgroup (gid 502):Filesystem blocks quota limit grace files quota limit grace/dev/hdb1 0 80000 90000 0 0 0這樣就設定好了group的quota!同樣的,因為整個群組的總使用量還沒有到達80000KBytes,當然那個grace就不會有任何資訊顯示了! 但這個地方倒是有很多朋友問到一個小問題,那就是『為什麼我兩個使用者quser1、quser2的設定值在soft與hard分別是45/50MB,但為 何你的group總量(hard)設定僅有90MB呢?』,也就是說,當某個使用者用了50MB的量,那另一個不就最多可以使用到40MB而已?原因何在 啊?這麼說好了,如果是小型的系統,由於使用者並不是很多,我們可以針對每個人來進行quota的設定值,所以,當然針對users來進行設定即可,不需要額外的設定group的quota設定啦。但如果換個角度來思考,假設您所處的公司人員比較多且分工較細,因此,我們可能無法真正瞭解每個使用者的需求,此時,針對每個使用者來設定可能就比較麻煩一 點。那麼我們反過來說,可以針對每個部門(group)來進行quota的設定,因為部門的需求直接跟部門的負責人詢問就好了,比較容易,而該部門的使用者 quota設定當然可以高一點,因為,可能某些使用者有較為獨特的需求啊!反正只要符合group的限制即可,該部門如果超過整個group quota限制值,呵呵!讓他們自己去處理即可!^_^7. 設定開機時啟動quota:這個部分就不需要擔心了,因為Fedora Core 4與Red Hat系列的開機script(/etc/rc.d/rc.sysinit)已經將quota的偵測寫入在裡頭,因此,在預設的情況下,quota是會主 動的被啟動的。不過,如果你想要手動的強制quota在開機啟動一遍,那麼可以使用vi去編輯/etc/rc.d/rc.local,在裡面加入一行(直 接加在最後一行即可):[root@linux ~]# vi /etc/rc.d/rc.local/sbin/quotaon -avug如果要關閉quota就是用quotaoff吧!沒錯!這樣就將quota設定完畢了!很簡單吧!!(如果是SuSE Server 9的話,可能就要去修改/etc/init.d/boot.local這個檔案了!)8. 利用repquota顯示更完整的quota結果報告:事實上,除了quota可以用來觀察使用者與群組使用的quota限制值之外,其實,我們還可以使用更詳細的quota報告指令,就是repquota這個命令呢!他的基本用法是這樣的:[root@linux ~]# repquota -a [-vug]參數:-a:直接到/etc/mtab搜尋具有quota標誌的filesystem,並報告quota的結果;-v:輸出所有的quota結果,而非僅下達指令者自己的quota限值;-u:顯示出使用者的quota限值(這是預設值);-g:顯示出個別群組的quota限值。範例:範例一:查閱系統內所有的具有quota的filesystem的限值狀態:[root@linux ~]# repquota -av*** Report for user quotas on device /dev/hdb1Block grace time: 24:00; Inode grace time: 7daysBlock limits File limitsUser used soft hard grace used soft hard grace----------------------------------------------------------------------root -- 77888 0 0 4 0 0quser1 -- 0 45000 50000 0 0 0quser2 -- 0 45000 50000 0 0 0Statistics: <==這是所謂的系統相關資訊,用-v才會顯示Total blocks: 7Data blocks: 1Entries: 3Used average: 3.000000範例二:僅列出user與group的quota限值:[root@linux ~]# repquota -aug*** Report for user quotas on device /dev/hdb1Block grace time: 24:00; Inode grace time: 7daysBlock limits File limitsUser used soft hard grace used soft hard grace----------------------------------------------------------------------root -- 77888 0 0 4 0 0*** Report for group quotas on device /dev/hdb1Block grace time: 7days; Inode grace time: 7daysBlock limits File limitsGroup used soft hard grace used soft hard grace----------------------------------------------------------------------root -- 77888 0 0 4 0 0
根據這些資訊,您就可以知道目前的限制情況了!^_^
完!