在多用戶系統中,如果沒有對用戶使用的磁盤空間做出限制,用戶無限制地存放數據和文件,可能會導致系統磁盤空間告警。如果存放的是無用數據,就會導致磁盤空間白白浪費。磁盤配額可以限制用戶或組在磁盤上存放文件的空間,這樣既可以讓用戶擁有一定的存儲空間,又可以避免用戶無限制地存放數據導致系統磁盤空間不足。
在Linux系統中,為磁盤配額提供支持的是quota軟件包,如果系統中沒有安裝這個軟件包,用戶可以自行安裝。
在設置磁盤配額之前,必須要獲文件系統的支持。為此需要系統中的自動掛載文件/etc/fstab,為相應的文件系統添加掛載參數:usrquota(啟用用戶限額)和grpquota(啟用用戶組限額)。
以磁盤分區/dev/sda3為例,講解如何建立磁盤配額。
(1)修改自動掛載文件/etc/fstab,啟用文件系統sda3的配額支持,將其修改為以下內容:
/dev/sda3 /home ext3 defaults,usrquota,grpquota 1 2
(2)修改完之後,需要重新掛載文件系統,以啟動磁盤配額支持:
# umount /home # mount /dev/sda3 /home
也可以使用以下命令重新掛載/etc/fstab中記錄的所有分區:
#使用mount的選項a重新掛載所有分區 # mount -a
實在不行就重新啟動系統即可。
(3)修改完成之後,可以使用mount命令驗證設置:
#使用mount命令查看掛載的分區及參數 # mount ... /dev/sda3 on /home type ext3 (rw,usrquota,grpquota)
如果在命令輸出中看到usrquota和grpquota,表明已經成功啟用磁盤配額支持。
啟用了文件系統的配額支持後,還不能立即使用配額,還必須檢查相應的文件系統,並建立磁盤配額文件。檢測文件系統並建立磁盤配額文件,需要使用命令quotacheck。
【命令格式】
quotacheck [option] filesystem
【常用選項】
-c:跳過原有配額文件,只執行新的掃描並保存到磁盤。 -v:顯示命令詳細信息。 -u:檢查用戶使用文件系統的情況。 -g:檢查用戶組使用文件系統的情況。
【用法示例】
(1)檢查磁盤分區/dev/sdd1,並將相關信息寫入到配額文件中:
# quotacheck -cug /home
(2)如果要驗證上述命令的執行結果,可以使用ls命令查看建立的配額配置文件:
# ls -l /home/aquota* -rw------- 1 root root 7168 Dec 11 14:32 /home/aquota.group -rw------- 1 root root 7168 Dec 11 14:32 /home/aquota.user
從上面的命令輸出可以看出,命令在文件系統的根目錄中建立了兩個文件:aquota.group和aquota.user。這兩個文件分別用於存放用戶和用戶組的磁盤配額信息,包括文件系統的使用情況及配置信息等。
在所有用戶都可以使用的文件系統上,並不需要為每個用戶都設置磁盤配額,通常只需要為那些經常存放大文件、嚴重占用磁盤空間的用戶設置即可。
查看文件系統的使用情況,可以使用repquota命令(使用該命令的前提是已經創建了磁盤配額文件): 復制代碼
# repquota /home *** Report for user quotas on device /dev/sda3 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 156232 0 0 166 0 0 zhu -- 40 0 0 5 0 0 user1 -- 32 0 0 4 0 0 li -- 52 0 0 7 0 0 ljx -- 32 0 0 4 0 0 wlh -- 32 0 0 4 0 0 mysql -- 32 0 0 4 0 0 user2 -- 32 0 0 4 0 0
查看上述命令的輸出並選擇要限制的用戶,之後就可以建立配額限制了。
完成前面的准備工作就可以開始設置磁盤配額了。
【命令格式】
edquota [option] [username] [groupname]
使用edquota命令建立磁盤配額時,需要指定創建配額的用戶和用戶組名。
【常用選項】
-u:指定限制的用戶名。 -g:指定要限制的用戶組名。 -p:復制用戶或用戶組的配額信息。 -t:修改過渡期,即用戶的磁盤配額超過軟限制的寬限時間。
(1)為用戶zhu建立配額:
# edquota -u zhu
此時,命令會啟動用戶配額配置界面,配置界面文本如下(其實這個界面就是vi編輯器,可以像使用vi那樣編輯這些設置):
Disk quotas for user zhu (uid 500): Filesystem blocks soft hard inodes soft hard /dev/sda3 40 0 0 5 0 0
各自段意義:
Filesystem:當前正在設置配額限制的文件系統。
blocks:當前用戶已經使用的磁盤分區空間,單位是KB。
soft:對用戶使用的磁盤空間或文件數的軟限制(磁盤空間單位是KB)。用戶使用的磁盤空間或文件數在過渡期內可以超過這個限制。
hard:對用戶使用的磁盤空間或文件數的硬限制。用戶使用的磁盤空間或文件數絕對不能超過此限制。
inodes:用戶在當前磁盤空間中占用的i節點數,由系統自動統計,用戶不必修改此項。
在磁盤配額界面中有兩組soft、hard字段,其中前一組soft、hard表示對磁盤空間大小的限制,後一組表示對文件數的限制。
由於文件數限制對一般的使用者而言意義不大,因此設置磁盤配額時,一般不在文件數上設置限制。
注意:修改磁盤配額時,無論是磁盤空間限制,還是文件數限制,硬限制的數值都應該比軟限制大。
在此示例中,假定需要設置用戶zhu的磁盤空間軟限制為1.5GB,硬限制為2GB。可以將配額修改為如下:
Disk quotas for user zhu (uid 500): Filesystem blocks soft hard inodes soft hard /dev/sda3 40 1500000 200000 5 0 0
保存退出後即可完成設置。
設置上述配額限制後,如果zhu在該文件系統上使用的空間超過1.5GB,系統就會警告用戶。當用戶數據達到2GB時,將不能存入任何信息。
(2)如果需要查看設置的磁盤配額,可以使用quota命令。例如查看用戶zhu的磁盤配額限制:
[root@localhost home]# quota -u zhu Disk quotas for user zhu (uid 500): Filesystem blocks quota limit grace files quota limit grace /dev/sda3 40 1500000 2000000 5 0 0
(3)如果要為多個用戶設置相同的磁盤配額,可以先設置其中一個用戶的磁盤配額,然後使用選項p將配額信息復制給其他用戶。
例如將用戶zhu的磁盤配額復制給用戶li:
[root@localhost home]# edquota -p zhu -u li [root@localhost home]# quota -u li Disk quotas for user li (uid 502): Filesystem blocks quota limit grace files quota limit grace /dev/sda3 52 1500000 2000000 7 0 0
(4)如果需要對某個用戶組設置磁盤配額,可以使用編輯配額命令edquota的選項g。例如要設置用戶組teacher的磁盤配額:
# edquota -g teacher
查看用戶組磁盤配額:
# quota -g teacher
(5)過渡期也稱為配額寬限時間,是指用戶在磁盤上存放數據的空間或文件數超過了軟限制,但沒有達到硬限制時,用戶還能使用的最長寬限時間。用戶應該在過渡時間內,將磁盤使用空間降低到軟限制以下,否則將無法正常使用磁盤。
使用命令edquota的選項t可以修改過渡期:
# 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/sda3 7days 7days
上面的示例已經將過渡期設置為7天,讀者可以自行修改磁盤空間限制(Block grace period)和文件數限制(Inode grace period)的過渡期時間。過渡期的單位可以是days、hours、minutes和seconds。
注意:不要對根分區使用配額限制,否則會導致一些意外的情況發生,例如無法登錄系統等。也不要對root用戶做配額限制,以免發生意外。
設置好用戶、用戶組配額和過渡期之後,還需要使用quotaon命令,在文件系統上手動開啟配額限制功能。
【命令格式】
quotaon [option] filesystem
【常用選項】
-a:開啟所有文件系統的磁盤配額功能。 -u:開啟用戶磁盤配額。 -g:開啟用戶組磁盤配額。 -v:如果開啟成功,就顯示提示信息。
【用法示例】
(1)開啟指定文件系統的磁盤配額功能:
[root@localhost home]# quotaon -vug /home /dev/sda3 [/home]: group quotas turned on /dev/sda3 [/home]: user quotas turned on
(2)也可以使用選項a開啟所有的文件系統的磁盤配額功能:
# quotaon –av
需要注意的是,有些系統可能會自動開啟配額,不需要管理員手動開啟。
用法同quotaon。
(1)查看磁盤使用情況:
[root@localhost home]# repquota /home *** Report for user quotas on device /dev/sda3 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 156232 0 0 166 0 0 zhu -- 40 1500000 2000000 5 0 0 user1 -- 32 0 0 4 0 0 li -- 52 1500000 2000000 7 0 0 ljx -- 32 0 0 4 0 0 wlh -- 32 0 0 4 0 0 mysql -- 32 0 0 4 0 0 user2 -- 32 0 0 4 0 0
用戶名後面的“--”,用於標識用戶當前是否已經超出了限制。如果超出了軟限制但沒有超出硬限制,則標識變為“+-”。
如果有多個文件系統設置了磁盤配額限制,要查看系統中所有磁盤的使用情況,可以使用repquota的選項a。
(2)校准磁盤使用情況:
磁盤配額使用一段時間後,系統記錄的磁盤使用情況可能會出現偏差,這時可以采用手動校准的方式保持准確性。
手動校准磁盤的使用情況,需要使用quotacheck命令:
# quotacheck -cug /dev/sda3