|
Linux 磁碟配額( Quota ) |
來源:鳥哥私房菜 |
|
· 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 5000 5000 5 5000 5000
[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: Timeunits may be: days, hours, minutes, or seconds Filesystem Block graceperiod Inode grace period
/dev/hda3 0minutes 0minutes 上面的 0minutes 可以改成60minutes 即可!也就是 60 分鐘之內必須要趕快整理硬碟的意思!
說明:
這個指令就是在編輯每一個『個人』或者是『群組』的 quota 數值!通常我們以 edquota -u username 或者是 edquota -g groupname來編輯個人與群組的 quota 設定值
。不過,或許您會覺得一個一個分配似乎很慢的樣子!那么您也可以直接 copy一個人的設定值給其他人,就如同上面第二個例子,利用已經建立好的 test 來建立 test2 這個
人的 quota限額!這個指令可是很重要的呦!另外,上面有幾個重要的資訊,我們來談一談吧:
1.filesystem:這個是那個 partition 的意思!以上面來說,就是 /dev/hda3 !
2.blocks:這個是目前使用者 test ( uid 501 )在 /dev/hda3 這個 filesystem(參考上面一個資訊),所耗掉的磁碟容量,也就是目前的使用掉的空間啦!單位是 Kbytes 喔!
這個資訊是 quota程式自己計算出來的,所以請不要修改他!
3.soft 與 hard :這個是目前的 test 在這個 filesystem之內的 quota 限制值!至于 soft 與 hard 的意思就如同 14-1 節最后面提的那個意思啦!當 soft 與 hard 數值
為0 的時候,表示『沒有限制』的意思!而數值的單位仍是 Kbytes 喔!
4.inodes :是目前使用掉 inode 的狀態,也是 quota 自己計算出來而得到的,所以不要去變更他。一般而言, inode 不容易控制,所以您可以不必去限制 inode 呢!
· quotaon
語法:
[root @test /root ]# quotaon [-a] [-uvg directory]
參數說明: -a :全部的 quota設定都啟動(會自動去尋找 /etc/mtab 的設定) -u :使用者的 quota 啟動 -g :群組的 quota 設定啟動 -s:顯示訊息
范例: [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 的限制啦!
動手作 quota:
quota 可以作用的功能有很多,包括了:
o 限制某一群組所能使用的最大磁碟配額(使用 群組限制):你可以將你的主機上的使用者分門別類,有點像是目前很流行的付費與免付費會員制的情況,你比較喜好的
那一群的使用配額就可以給高一些!呵呵!^_^... o 限制某一使用者的最大磁碟配額(使用 使用者限制):在限制了群組之后,您也可以再繼續針對個人來進行限制,
使得同一群組之下還可以有更公平的分配!
o 以 Link的方式,來使郵件可以作為限制的配額(更改 /var/spool/mail這個路徑):如果是分為付費與免付費會員的『郵件主機系統』,是否需要重新再規劃一個硬碟
呢?也不需要啦!直接使用 Link 的方式指向 /home(或者其他已經做好的 quota 磁碟)就可以啦!
底下先列出幾個主要的步驟來說明:
4.開啟磁碟的 quota 功能:編輯 /etc/fstab ,使得準備要開放的 quota 磁碟可以支援 quota ;
5.預掃瞄磁碟的使用情況:使用 quotacheck 來掃瞄一下我們要使用的磁碟;
6.建立使用者的 quota :使用 edquota 來編輯每個使用者或群組的可使用空間;
7.啟動 quota :使用 quotaon 吧!
整個步驟大致上就只有這幾步,我們來瞧一瞧如何使用吧??!底下我們以一個簡單的范例來進行 quota 的說明!整個范例的說明如下:
8.我們假設 test 這部主機里頭有 test 與 test2 這兩個使用者,且他們兩個都掛在 test 這個群組下;
9.每個使用者總共有 50MB 的磁碟空間(不考慮 inode )限制!并且 soft limit 為 45 MB;
10.而寬限時間設定為 1 天,也就是說,這四個人可以突破 40MB 的限制,但是在一天之內必須要將多余的檔案砍掉,否則將無法使用剩下的空間(也就是說,這個帳號
大概就不能使用了?);
11.test 這個群組考慮最大限額,所以設定為 90 MB 好了!
整個執行步驟可以照下面來執行看看:
1.建立 test2 這個使用者:
由于我們之前只有 test 這個使用者掛在 test 群組之中,所以必需要先設定一下 test2 這個使用者!因為他的群組必需是 test這個,而我們去查了一下 /etc/group 發現 test
的 uid 為 501 ,因此,我們可以這樣來設定 test2 呢!
[root @test root]# useradd –m –g 501 test2
[root @test root]# passwdtest2
Changing password for user test2.
New UNIX password: **********
Retype newUNIX password: passwd: **********
all authentication tokens updated suclearcase/" target="_blank" >ccessfully.
2.
3.開啟磁碟的 quota 功能:
由于 quota 需要在 ext 的 Linux 延伸格式檔案才可以啟動,所以你就必須要將準備開啟 quota 的磁碟啟動參數,寫進入quota 的磁碟設定才行 ( /etc/fstab )!以我的例子
而言,我想要在 /home 底下進行 quota 的限制test,test2 這兩個人!正巧 /home 是一個獨立的磁區,這可以使用 df 來查詢:此外,必需要特別留意的是,最好不要以根目
錄亦即是 / 進行quota 啦!否則容易有些問題呢!另外,不要針對 root 做 quota 喔!
[root @test root]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda1 19049201088136 720020 61% /
/dev/hdb1 976344 71504 854444 8% /backup
/dev/hdb2101540 4252 92048 5% /home
4.
嗯!我的 home 是獨立的 partition,并且他的裝置名為 /dev/hdb2 ,好了!那么我就必須要啟動 /home 這個 /dev/hdb2 的 quota檔案格式,好了!那么由于檔案格式的設定
是寫在 /etc/fstab 里頭,所以我們以 vi 來編輯他吧!只要在 /etc/fstab里頭增加了 usrquota, grpquota 就可以啦!『注:請特別留意,這兩個項目請『務必』不要寫錯了!請
再寫入 /etc/fstab之前好好的再次檢查,因為寫錯之后,很有可能造成系統無法開機(雖然機率不高,但是有可能!?)』
[root @testroot]# vi /etc/fstab
# device MountPoint filesystem parameters dumpfsck
/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 1none
/dev/pts devpts mode=0620 0 0
none /proc proc defaults 0 0
上面的黃色字體改成底下的樣子!
/dev/hdb2 /home ext3 defaults,usrquota,grpquota 1 1
5.
多了 usrquota,grpquota 注意,由 defaults,usrquota,grpquota 之間都沒有空格!
這樣就算加入了 quota 的磁碟格式了!不過,由于真正的 quota 在讀取的時候是讀取 /etc/mtab 這個檔案的,偏偏這一個檔案需要重新開機之后才能夠以 /etc/fstab 的新資料進
行改寫!所以這個時候你可以選擇:
6.(1)重新開機==>reboot;也可以選擇
(2)重新 remount filesystem 來驅動設定值!
7.
我是不太喜歡重新開機的人啦!所以我就這么做:
[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/ptsdevpts rw,mode=0620 0 0
/dev/hdb1 /backup ext3 rw 0 0
/dev/hdb2 /homeext3 rw,usrquota,grpquota 0 0
或者以下列的方式重新 mount 所有的磁碟:
[root @test /root]# mount -a -o remount <==這個指令可以重新將 /etc/fstab 的咚咚 mount 下來!
8.
嘿嘿嘿嘿!這樣我們就已經成功的將 quota 的功能寫入 partition 當中!另外,我們這里是以 ext3 這個磁碟格式來測試 quota 的呦!
9.掃瞄磁碟的使用者使用狀況,并產生重要的 aquota.group 與 aquota.user:
接著下來就是要來掃瞄一下我們所需要的磁碟到底有沒有多余的空間可以讓我們來設定 quota呢?并且將掃瞄的結果輸出到這個磁碟的最頂層去(也就是 /home 底下)這個
時候就需要 quotacheck 這個指令的幫忙了!使用quotacheck 就可以輕易的將所需要的資料給他輸出了!現在就 OK 啦!并且在 /home 底下會產生 aquota.group 與
aquota.user 這兩個檔案!
[root@test /]# quotacheck -avug
quotacheck:Scanning /dev/hdb2 [/home] done
quotacheck: Checked 10 directories and22 files
/home total 44 -rw------- 1 root root 7168Oct 28 14:05 aquota.group -rw------- 1 root root 7168 Oct 28 14:05aquota.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 test4096 Oct 28 13:37 test2/
10.
使用 quotacheck就可以輕易的將所需要的資料給他輸出了!現在就 OK 啦!并且在 /home 底下會產生 aquota.group 與 aquota.user這兩個檔案!注:但是很奇怪的是,
在某些 Linux 版本中,我不能夠以 aquota.user(group) 來啟動我的 quota,真的是很奇怪呢!所以我就另外做了一個 link 檔案來欺騙 quota :
[root @test /root ]# cd/home
[root @test /root ]# ls -l aquota* -rw------- 1 root root 7168May 6 22:16 aquota.group -rw------- 1 root root 7168 May 6 22:16aquota.user
[root @test /root ]# ln -s aquota.group quota.group [root@test /root ]# ln -s aquota.user quota.user
11.
12.啟動 quota 的限額!
再來就是要啟動 quota 啦!啟動的方式也是很簡單的!就是使用 quotaon -av 即可:
[root@test /]#quotaon -av
/dev/hdb2 [/home]: group quotas turned on /dev/hdb2[/home]: user quotas turned on
13.
注意:要看到上面有個 turned on 的出現,才是真的成功了!
14.編輯使用者的可使用空間:
由于我們有兩個使用者要設定,先來設定 test 好了,使用 edquota 就對了
[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
將上面的原本設定改為底下的模樣: Disk quotas for user test (uid 501): Filesystem blockssoft hard inodes soft hard /dev/hdb2 32 40000 50000 8 0 0
15.
要特別留意的是,上面的黑體數值代表的是 KB 呦!轉成 MB 是需要乘上 1024 倍,這里簡單的計算一下就好了!這樣就算編輯完畢了!接下來我們就需要將這個設定同時
復制給 test2 這個家伙!
[root@test /]# edquota -p test test2
16.
接下來要來設定寬限時間,還是使用 edquota !
[root@test /]# edquota -t
Grace period before enforcing soft limitsfor users: Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period /dev/hdb2 1days 1days
17.
將時間改為 1 天(原本是 7days 改成 1days ),好了!查詢一下是否真的有設定進去呢?使用 quota -v 來查詢
[root@test /]# quota –vu test test2
Disk quotas for user test (uid501): 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/hdb228 40000 50000 7 0 0
18.
特別注意到,由于我們的使用者尚未超過 40 MB,所以 grace ( 寬限時間 )就不會出現啦!這樣很夠清楚了吧?!
19.編輯群組使用空間:
其實也差不多,還是使用 edquota:
[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
修改成底下這樣:
Disk quotas for group test (gid 501):
Filesystem blocks softhard inodes soft hard /dev/hdb2 60 80000 90000 15 0 0
[root@test /]#quota -vg test
Disk quotas for group test (gid 501):
Filesystem blocksquota limit grace files quota limit grace /dev/hdb2 60 80000 90000 15 00
20.
21.設定開機時啟動:
開機的時候自動啟動的設定在哪里還記得嗎?沒錯!就是在 /etc/rc.d/rc.local 底下:所以你可以使用 vi 在這個檔案的最后面加上一行:
[root @test /root ]# vi /etc/rc.d/rc.local /sbin/quotaon -aug
22.
如果要關閉 qutoa 就是用 quotaoff 吧!沒錯!這樣就將 quota 設定完畢了!很簡單吧??!
使用郵件主機進行 quota 的實例:
好了,我們前面賬號管理的部分曾經提到 e-mail這個東西嘛!好了,如果我們要設定一個對外開啟的郵件主機的時候,那幺最好對于郵件空間有點限制比較好,免得如同上面提
到的一些問題一樣,造成使用者的使用權不一!所以說,使用 quota 確實是一個好建議!這個時候該怎幺辦呢?什幺怎幺辦?嗯!是這樣的,由于 quota 『只能針對一個partition
進行整體的磁碟配額,無法針對某個目錄進行磁碟配額!』針對這個觀念,我們不難發現,『(1)將郵件存在個人的家目錄與(2)將郵件統一放在 /home 下的一個共用目錄』是一
樣的!為什幺呢?這是因為 quota針對的是一個磁碟呀!呵呵!所以,您必須先確定『您的 /home 是一個獨立的 partition 』才行!當然,您也可以使用其他的獨立的partition
來進行底下的步驟!但是在這里,我們預設以 /home 這一個目錄來假定這一個目錄是一個獨立的 partition !
如此則在 /home 底下,由于每個人的磁碟配額已經設定好了!所以當然!該信件就可以得到完整的 quota 限額的限制了!所以呢,就需要進行下面的步驟:
1.以 上面設定 的方式設定好使用者 quota 的所有工作(即是在 /home 這個 partition );
2.將 /var/spool/mail 這個郵件預設的資料夾備份到其他的目錄去;
3.建立 /home/mail,這是因為假設我們的郵件放置在這個目錄中;
4.修改 /home/mail 的屬性,使成為 擁有者 root ,群組 mail ,及屬性為 775 才行!
5.將 /home/mail 給他 Link 到 /var/spool/mail 去即可!
6.以后每個人的郵件將都會放置 /home/mail 這個目錄中!
1. 建立并修改 /home/mail 這個目錄:
[root @test /root ]# mkdir /home/mail
[root@test /root ]# chown root:mail /home/mail
[root @test /root ]# chmod775 /home/mail
2. 備份并移動原本的 mail 到 /home/mail 底下去:
[root @test /root ]#cp -r /var/spool/mail /var/spool/mail.back
[root @test /root ]# mv/var/spool/mail/* /home/mail
[root @test /root ]# rmdir /var/spool/mail
3. 建立連結:
[root @test /root ]# ln -s /home/mail /var/spool/mail
只要這樣的一個小步驟,嘿嘿!您家主機的郵件就有一定的限額!當然!您也可以依據不同的使用者與群組來設定 quota 然后同樣的以上面的方式來進行 link 的動作!嘿嘿嘿!
就有不同的限額針對不同的使用者提出!很方便吧!
原文轉自:http://www.anti-gravitydesign.com