用管理員身份登錄系統,編輯系統配置文件/etc/fstab中相應分區(以/home分區為例)的設置選項,若開啟用戶配額添加選項「usrquota」,用戶組配額添加選項「grpquota」,中間以逗號隔開。
LABEL=/home /home ext3 defaults,usrquota 1 2
用戶組配額用以限定一組用戶共計可以使用的空間數,一般應用較少,本例只啟動用戶配額。
分區配額功能生效需要重新啟動系統,或者簡單一點,重新掛載此分區,讓其新加參數生效:
# mount -o remount /home
2. 生成配額信息文件
檢測分區中當前用戶空間使用情況,並生成保存配額信息的資料庫文件:
# quotacheck -F vfsv0 -uv /home (生成符合系統要求的 aquota.usr)
# quotacheck -g /home (生成符合系統要求的
aquota.group)
選項「-F
vfsv0」指定磁碟配額功能實現的軟體版本,當前流行的Linux版本基本都為Quota 2.0 ,可以使用命令「man
quotacheck」查看到此信息,不必像絕大多數的文章和書籍資料中手工「touch」創建。
選項「-u」指定生成用戶配額信息文件「aquota.user」(Quota
1.0為quota.user),如果設置了用戶組配額則添加選項「-g」生成配額信息文件「aquota.group」,選項「-v」表示執行時顯示詳
細信息。執行結果中自動報告了分區/home的空間使用情況,並自動生成了配額信息文件「aquota.user」,其許可權為600
。
若較老的Linux系統(Quota 1.0)要升級到Quota 2.0
,可以使用命令「convertquota」將老格式文件「quota.user」和「quota.group」轉換為新格式「aquota.user」和「aquota.group」。
3. 設置用戶和組配額
使用edquota命令為每個用戶設置磁碟配額,如下例為用戶Sam設置配額:
# edquota Sam
系統會調用Vim/Vi生成一臨時文件,編輯方法與vi完全相同,以ZZ或:wq命令退出。在此文件中可對用戶Sam配額信息進行編輯,默認文件內容如下:
Disk quotas for user Sam (uid 500):
Filesystem blocks soft hard inodes soft hard
/dev/hda3 5 0 0 5 0 0
其中「Filesystem」欄位表明使用磁碟配額的分區對應的設備名稱,「blocks」和「inodes」分別表明了用戶當前已經使用的磁碟空間(以
KB為單位)和建立的文件數(此限制一般較少應用),「soft」和「hard」即為前文提及的軟限制和硬限制(大多數應用不設置軟限制)。
編輯此文件,把軟、硬限制設置到合適的數值,保存退出,可以看到「aquota.user」文件的大小改變,說明用戶的配額已經儲存。設置組配額可以使用命令「edquota
-g 組名」。
設置大量用戶的磁碟配額,若分配給用戶的配額相同,可以使用命令edquota的「-p」選項在用戶之間複製配額設置,可用下面的命令給這些用戶賦予與protuser相同的限額:
# edquota [-u] -p protuser user1 user2
user3
# edquota -g -p protgroup group1 group2 group3
例如將用戶Sam的配額信息複製給Helen和Jack:
# edquota -p Sam Helen Jack
這樣可將配額模板用戶設置複製給任意多用戶,或可利用此命令編寫shell腳本批量複製。此外,也可以使用命令「setquota」來設置磁碟配額,如:
# setquota Mary 0 20480 0 0
/home
這樣可以限定用戶Mary可以在/home分區使用空間20MB ,具體用法在此不在贅述。
在第三步中設置用戶Sam配額為10MB ,如下:
Disk quotas for user Sam (uid 500):
Filesystem blocks soft hard inodes soft hard
/dev/hda3 5 0 10240 5 0 0
切換到用戶Sam
,做磁碟爆滿測試:
# dd if=/dev/zero of=quotatest bs=1024k
count=10240000
hda3: write failed, user block limit
reached.
dd: writing `quotatest': Disk quota exceeded
1+0 records in
0+0 records out
1036288 bytes (1.0 MB) copied, 0.0174559 seconds, 59.4
MB/s
用戶Sam達到限定的磁碟空間,出現了上面的提示信息,他將不能再創建文件,有效的控制了用戶磁碟空間的使用。
4. 啟動磁碟配額服務
使用命令quotaon用來激活配額系統並允許配額檢查:
# quotaon /home
若關閉配額服務則使用命令「quotaoff」。
分區的磁碟配額功能設置后,每次開機會自動載入並啟動服務,務須另行在啟動腳本中設置。
5. 其他功能設置:設定soft quota和hard quota之間的時間
# edquota -t
出現一個 vi 窗口:
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/hda7 7days 7days
修改成自己所需要的,並保存退出就設置這個時間啦。在這之後可能需要重新啟動,以使磁碟限額生效。
6. 檢查磁碟空間限制的一致性
系統會自動每次重新啟動時,在檢查硬碟後進行( /etc/rc.sysinit
),無須親自進行。假若分區已經以「讀寫」方式掛上時要小心,例如:
# quotacheck /home
quotacheck: Quota for users is enabled on
mountpoint /home so quotacheck might damage the file.
Please turn quotas off or use -f to force
checking.
這時,
由於某種需要,或者在某種情況,「不得不」運行這個命令 :
# quotacheck -mf [-u] /dev/hda7
# quotacheck -mf -g /dev/hda7
參數 -m[M]
意思是:強迫在「讀、寫」模式下檢查硬碟的 quota
(有一定的「正在寫」的數據丟失可能,應確保沒有進程在寫這個分區。建議在單用戶模式下進行。
例如:(在平時檢查)
# quotacheck /var/spool/ -f
quotacheck: Cannot remount filesystem mounted
on /var/spool read-only so counted values might not be right.
Please stop all programs writing to filesystem or use -m flag to
force checking.
# quotacheck /var/spool/ -m
quotacheck: Quota for users is enabled on
mountpoint /var/spool so quotacheck might damage the file.
Please turn quotas off or use -f to force checking.
7. 取消磁碟空間和i節點數目的限制
# quotaoff /home (取消磁碟空間限制。)
# quotaon /home (現在啟動磁碟空間限制。)
# quotaon /home (如果已經啟動磁碟空間限制,會出現以下錯誤:)
quotaon: using /home/aquota.group on
/dev/hda7: Device or resource busy
quotaon: using /home/aquota.user on /dev/hda7: Device or resource
busy
8. 查看磁碟配額
用戶查看自己當前的配額信息,可使用命令「quota」:
# quota
Disk quotas for user Sam (uid 500):
Filesystem blocks quota limit grace files quota limit grace
/dev/hda3 1022 0 1024 6 0 0
其中「quota」欄位為軟限制,「limit」欄位為硬限制,「grace」欄位為軟限制達到后寬限期(前文「edquota
-t」設定的時間)。
若管理員查看各個用戶的磁碟配額使用情況,可以使用命令「repquota」:
# repquota /home
*** Report for user quotas on device
/dev/hda3
Block grace time: 7days; Inode grace time: 7days
Block
limits File limits
User used soft hard grace used soft hard grace
-----------------------------------------------------------------
root -- 10545 0 0 4 0 0
sam -- 1024 0 1024 8 0 0
helen -- 5 0 10240 5 0 0
…………
從結果中可以方便的查看到用戶的配額使用情況。如果想獲得其他更多信息還可以執行命令「quotastats」,詳見幫助。
inode與block使用說明
磁碟配額限制空間使用的方法有兩種,即分別對inode和block進行限制。磁碟配額可以限定用戶在分區中使用的空間大小(blocks),也可以限定
用戶可以在分區中最多創建的文件數(inodes),需要注意的是,只要用戶所創建的文件超過他可以使用的inode數額,即使這些文件是空的,他再次創
建文件的行為也將被限制。
此處說明一下inode的概念。在Linux中創建一個文件,系統就為該文件分配一個惟一的inode
,文件的inode用於訪問文件的屬性。也就是說,Linux系統中每個文件都要對應一個inode,通俗點說Linux內核不認識字母,所以用戶要有UID、用戶組要有GID、進程要有PID……,文件要有inode
,一旦inode丟失文件將無法被訪問。
使用命令「ls -i」可以查看到文件的inode號。
# ls -i
163523 inittab 163524
services 163525 a b
Linux系統中的硬鏈接文件與原文件大小一樣,且可同步更新,因為硬鏈接是一個指向文件的指針,它與原文件的inode相同。
如果系統中有名稱特殊的文件,如「a
b」,使用「rm」命令無法對其操作(因「rm」會判斷為要刪除兩個文件「a」和「b」),此時可以利用inode的原理,假設「a
b」的inode為163535,查看詳細信息執行:
# find . -inum 163535 -exec ls -l {}
\;
-rw-r--r-- 1 root root 0 Nov 27 15:21 ./a
b
刪除此文件執行:
# find . -inum 163535 -exec rm {}
\;
選項「-inum」即為查找文件的inode ,選項「-exec」為find命令的連接符。
另外,在部署磁碟配額前,要考慮哪些分區需要設置。一般而言,保存用戶宿主目錄的分區(一般為/home)一定要設置磁碟配額,公共存儲用戶數據的分區要設置磁碟配額(如公司的網路備份應用伺服器)。
磁碟爆滿測試
一個沒有設置磁碟配額的Linux系統中,使用某一普通用戶登錄,執行命令:
# dd if=/dev/zero of=quotatest bs=1024k
count=10240000
命令將生成一個固定大小的文件。其中「if」表示輸入,偽設備/dev/zero不斷生成字元串「0」,初始化文件;「of」表示輸出,此例為在用戶當前
目錄下生成文件「quotatest」;「bs」為「block
size」指定數據塊大小,單位設定為「1024k」即1MB;「count」為總計生成的文件(「quotatest」)大小,若「bs」為1MB,則
「10240000」為10000GB。
大多數伺服器磁碟空間沒有這麼大,上面的命令沒執行完空間就耗光了。筆者用一台一般配置的筆記本電腦測試,寫入速度約為60MB/s,一分鐘就可以寫
3GB,如果您的伺服器是100GB的,半個小時后磁碟空間就會達到100%,此時用戶無法創建文件、管理員無法添加用戶、系統無法寫入日誌……甚至系統
重啟后將無法正常啟動,因為磁碟空間爆滿,啟動過程中臨時文件無法生成。
如果您真的做了上述的測試,系統無法正常啟動,可以使用Linux安裝光碟引導,在安裝界面輸入「linux
rescue」進入修復模式后刪掉文件「quotatest」,即可恢復。
由此可見,若不設置磁碟配額,即使不是黑客,任一普通用戶都可以隨時摧毀我們的系統。
[火星人 ] linux 下磁碟配額設置已經有782次圍觀