讓使用者能夠使用的磁碟容量受限制!
本文資料主要針對 Fedora Core 4 的系統進行說明, Fedora Core 1 主要是由 Red Hat Linux 9 改版而來, 這個 Red Hat Linux 9 並不是當前大家聽到的 RHEL 喔!那是在 RHEL 出現之前的產品,基本上是在 2003 年以前的作品了!Fedora Core 4 則是在 2005 年 6 月份釋出,使用的核心是 2.6.11 版,當時是很紅的一個作品!只是生命週期太短,所以用這個 Fedora 系列來介紹 Server, 當時的決定確實有點莫名其妙了...
建議您前往本站查詢最新版本的 Linux distribution 文章來閱讀,比較不會浪費時間。那為何還需要編輯 Fedora Core 4 的資料呢? 鳥哥只想要做個自己曾經撰寫過的文件內容保存而已囉! ^_^!最新文章請前往鳥站首頁查閱囉!
磁碟配額 ( Quota ) 一直就是個很有用的東西!怎麼說呢?舉個例子來說明, 如果您曾經申請過網路的 mail 服務時,那麼肯定就會明白什麼是 20MB 的郵件空間、 30MB 的免費網頁空間,好了,這個 20MB, 30MB 是怎樣定義出來的呢?哈哈!沒錯,就是 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 範例二:秀出 dmtsai 這個使用者的磁碟配額 [root@linux ~]# quota -vs -u dmtsai # 注意一下這兩個範例,如果您的系統上面尚未有任何的 quota 支援的 filesystem 時, # 使用這兩個範例時,『不會有任何資訊列出來』啦!不要以為發生錯誤囉!這個指令僅是使用來『顯示(display)』目前某個群組或者某個使用者的 quota 限值!您可以使用來觀察一下呦!
[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 關閉才好!
[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 限額!這個指令可是很重要的呦! 另外,範例一當中出現的那七個欄位代表的意義我們得要談一談啊:
[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 即可啟動!
[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 的限制啦!
[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 quser2
[root@linux ~]# df
Filesystem 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/fstab LABEL=/ / ext3 defaults 1 1 LABEL=/disk1 /disk1 ext3 defaults 1 2 LABEL=/disk2 /disk2 ext3 defaults,usrquota,grpquota 1 2 /dev/hda3 swap swap defaults 0 0注意到我們所需要設定的那個 /disk2 的那一行,在第四欄位多了 usrquota,grpquota 注意,在『 defaults,usrquota,grpquota 』之間都沒有空格!
[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 的呦!
[root@linux ~]# quotacheck -avug quotacheck: Scanning /dev/hdb1 [/disk2] done quotacheck: 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 是比較舊的版本,否則不會有這個問題, # 所以,這個動作你不必進行的!
[root@linux ~]# quotaon -avug
/dev/hdb1 [/disk2]: group quotas turned on
/dev/hdb1 [/disk2]: user quotas turned on
注意:要看到上面有個 turned on 的出現,才是真的成功了![root@linux ~]# edquota -u quser1 Disk 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 -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 1days 7days將時間改為 1 天(原本是 7days 改成 1days ),好了!查詢一下是否真的有設定進去呢?使用 quota -v 來查詢:
[root@linux ~]# quota -vu quser1 quser2
Disk quotas for user quser1 (uid 502):
Filesystem blocks quota limit grace files quota limit grace
/dev/hdb1 0 45000 50000 0 0 0
Disk quotas for user quser2 (uid 503):
Filesystem blocks quota limit grace files quota limit grace
/dev/hdb1 0 45000 50000 0 0 0
特別注意到,由於我們的使用者尚未超過 45 MB,所以 grace ( 寬限時間 )
就不會出現啦!這樣很夠清楚了吧?![root@linux ~]# edquota -g qgroup Disk 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 qgroup Disk 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 囉!同樣的,因為整個群組的總使用量還沒有到達 80000 KBytes, 當然那個 grace 就不會有任何資訊顯示了!但這個地方倒是有很多朋友來信問到一個小問題, 那就是『為什麼我兩個使用者 quser1, quser2 的設定值在 soft 與 hard 分別是 45/50MB ,但為何你的 group 總量 (hard) 設定僅有 90MB 呢?』,也就是說, 當我的某個使用者用了 50MB 的量,那另一個不就最多可以使用到 40MB 而已?原因何在啊?
[root@linux ~]# vi /etc/rc.d/rc.local /sbin/quotaon -avug如果要關閉 quota 就是用 quotaoff 吧!沒錯!這樣就將 quota 設定完畢了!很簡單吧!! ( 如果是 SuSE Server 9 的話,可能就要去修改 /etc/init.d/boot.local 這個檔案囉! )
[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/hdb1 Block grace time: 24:00; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 77888 0 0 4 0 0 quser1 -- 0 45000 50000 0 0 0 quser2 -- 0 45000 50000 0 0 0 Statistics: <==這是所謂的系統相關資訊,用 -v 才會顯示 Total blocks: 7 Data blocks: 1 Entries: 3 Used average: 3.000000 範例二:僅列出 user 與 group 的 quota 限值: [root@linux ~]# repquota -aug *** Report for user quotas on device /dev/hdb1 Block grace time: 24:00; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 77888 0 0 4 0 0 *** Report for group quotas on device /dev/hdb1 Block grace time: 7days; Inode grace time: 7days Block limits File limits Group used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 77888 0 0 4 0 0根據這些資訊,您就可以知道目前的限制情況囉! ^_^