在生産或工作環境中,你可能會遇到這樣的情況:在多人多任務的環境下,有多人共用一個磁盤空間,而有部分人可能向這個共同的空間上放很多或很大的檔案,而導緻磁盤空間極速減少。這樣必然導緻其他人的空間會迅速變小。為了讓大家有個平等的使用磁盤空間的權限,我們就需要用到磁盤配額。我來限制使用者對空間的使用情況。在linux系統下,用quota來實作此功能。
除了上面的情況外,一般還用在下面的一些場景中
在一些提供web服務的空間中,每個人的網頁空間的容量都是受限制的。
在郵件服務中,每個人的郵件空間也是受限制。
在公司的檔案共享服務中,每個人使用的硬碟空間也是需要限制。
而針對linux的主機,如果是多個使用者的話,也是需要考慮到使用者和使用者組的限制。
注意事項:
1、磁盤配額加載于核心中
2、隻适用于etx2/ext3/ext4檔案系統,對目錄是不起作用的哦,這一點要特别注意,雖然挂載點是一個目錄,但他實際上是檔案系統裝置。
3、隻針對于戶或使用者組,但root除外
4、針對使用者組的限額,是指某個使用者組中的所有成員一起使用的限制而不是每個人所使用的限制
在開始操作前,我們來看看和quota配置相關的内容
inode:限制使用者可以建立的檔案數量
block:限制使用者磁盤的容量,以kb為機關
soft:軟限制。就是在超過這個值後,會提醒使用者,但使用者的權限還沒有被限制。
hard:硬限制。這是最高的限制,使用者或組絕對不會超過這個限制值。如果超過了,就限制死了使用者的使用權限了。
grace time:寬限時間。這個就是當達到soft限制時,還沒有到達hard限制的時候,用來提醒使用者的。如果在警告的天數之内,使用者都不進行任何磁盤管理操作,那麼soft限制值會即刻取代hard限值來作為quota的限制,就算你沒有達到hard限制,也用不了了。
下面開始我們的示範操作
1
2
3
4
[root@yufei ~]# df
filesystem 1k-blocks used available use% mounted on
/dev/sda1 15118728 7242960 7107768 51% /
tmpfs 255784 0 255784 0% /dev/shm
我的rhel6系統,因為是一個虛拟機,是以沒有太多設定,隻有一個根分區,沒得選擇,我們就對根分區來進行磁盤配額。還有要提醒一點,你的系統中要有至少兩個使用者,因為磁盤配額對root使用者不起作用。
因為重新挂載隻針對目前有效果,如果想下次開機也起作用,就需要把配額的參數寫入fstab檔案中。
5
6
7
[root@yufei ~]# mount
/dev/sda1 on / type ext4 (rw)
省略無用資訊
我們看到/分區下沒有配額參數,是以我們需要重新挂載。
[root@yufei ~]# mount -o usrquota,remount /
/dev/sda1 on / type ext4 (rw,usrquota)
現在有了,啟用了對使用者的配額限制。
8
9
10
[root@yufei ~]# ls / |grep quota
[root@yufei ~]# quotacheck -cvum /dev/sda1
quotacheck: your kernel probably supports journaled quota but you are not using it. consider switching to journaled quota to avoid running quotacheck after an unclean shutdown.
quotacheck: scanning /dev/sda1 [/] done
quotacheck: cannot stat old user quota file: no such file or directory
quotacheck: old group file not found. usage will not be substracted.
quotacheck: checked 12514 directories and 98071 files
quotacheck: old file not found.
aquota.user
看到aquota.user這個使用者的配置檔案後,那說明我們建立成功了
這裡介紹一個幾個參數的作用
-c:建立磁盤配額資料庫檔案
-v:檢視建立的過程
-u:建立使用者的磁盤配額資料庫檔案
-g:建立使用者組的磁盤配額資料庫檔案
-a:建立所有磁盤的配額資料庫檔案,使用此參數的時候,後面就不用接裝置了
-m:把以前的磁盤配額資訊清除,在對/分區建立的時候,必需用此參數
[root@yufei ~]# quotaon /dev/sda1
[root@yufei ~]# edquota yufei
disk quotas for user yufei (uid 500):
filesystem blocks soft hard inodes soft hard
/dev/sda1 1060 0 0 159 0 0
這主檔案中的内容後面的限制作用是什麼,我們在上面已經說了,這裡就不啰嗦了,這裡面已經有的blocks和inodes是指這個使用者現在在已經存在的相關檔案與大小,以k為機關哦!
上面顯示的内容大概意思就是
使用者yufei(uid 500)
在/dev/sda1上所占用的空間是1060k,沒有任何的限制,檔案數為159,也沒有任何的限制。
其實上面的編輯方式是調用vi的,是以你可以自由編輯!
我們把限制全部加上。
/dev/sda1 1060 5120 10240 159 162 165
然後儲存退出
[root@yufei ~]# quota yufei
filesystem blocks quota limit grace files quota limit grace
/dev/sda1 1060 5120 10240 159 162 165
從查詢的結果來看,yufei使用者有5m的空間,但最多不超過10m。檔案數量為162個,但最多不超過165個。
這一步在實際工作沒有啦,我們隻是為了示範,才做的這一步。當然,如果你想在實際工作中測試的話,也是可以的。
11
12
13
14
15
16
17
18
19
20
[root@yufei ~]# su - yufei
[yufei@yufei ~]$ mkdir test
[yufei@yufei ~]$ cd test/
[yufei@yufei test]$ dd if=/dev/zero of=file1 bs=1m count=2
2+0 records in
2+0 records out
2097152 bytes (2.1 mb) copied, 0.008217 s, 255 mb/s
[yufei@yufei test]$ dd if=/dev/zero of=file2 bs=1m count=2
2097152 bytes (2.1 mb) copied, 0.00576349 s, 364 mb/s
[yufei@yufei test]$ dd if=/dev/zero of=file3 bs=1m count=2
2097152 bytes (2.1 mb) copied, 0.00753033 s, 278 mb/s
[yufei@yufei test]$ ls -l
total 6144
-rw-rw-r--. 1 yufei yufei 2097152 may 29 21:03 file1
-rw-rw-r--. 1 yufei yufei 2097152 may 29 21:03 file2
-rw-rw-r--. 1 yufei yufei 2097152 may 29 21:03 file3
建立了3個2m的檔案,外加一個test目錄,這時候我們再來看看使用者的配額情況
[yufei@yufei test]$ quota
/dev/sda1 7208* 5120 10240 6days 163* 162 165 6days
這時候我們看到的資訊就和前面的不一樣了,超過軟限制的,就帶上了*号了。而且寬限時間為6天。在目前的情況下,我最多還能建立2個檔案,最多還能有2m多的空間。
下面我們繼續來增加檔案。
[yufei@yufei test]$ touch touchfile1
[yufei@yufei test]$ touch touchfile2
[yufei@yufei test]$ touch touchfile3
touch: cannot touch `touchfile3': disk quota exceeded
看到沒有,當我們再建立第三個檔案的時候,提示,超過磁盤配額了。
[yufei@yufei test]$ ls touchfile*
touchfile1 touchfile2
第三個檔案沒有建立成功啊!!
因為空間沒有還是有的,我可以繼續向裡面增加資料。但檔案是增加不了。我們接下來測試資料的空間限制。
[yufei@yufei test]$ rm -fr touchfile*
[yufei@yufei test]$ dd if=/dev/zero of=file4 bs=1m count=2
2097152 bytes (2.1 mb) copied, 0.00672323 s, 312 mb/s
這時間的空間還有不到1m,我們再來建立個2m的檔案,看看會出現什麼樣的情況。
[yufei@yufei test]$ dd if=/dev/zero of=file5 bs=1m count=2
dd: writing `file5': disk quota exceeded
1+0 records in
0+0 records out
1007616 bytes (1.0 mb) copied, 0.0059845 s, 168 mb/s
注意最上面的一行,提示超出磁盤配額。
total 9176
-rw-rw-r--. 1 yufei yufei 2097152 may 29 21:20 file4
-rw-rw-r--. 1 yufei yufei 1007616 may 29 21:22 file5
我們也發現,第5個檔案也是建立了,但大小隻有1m,如果說,這是一個2m資料檔案,隻拷貝了1m的話,也是不能用的。
這時候所有的限制都到達了最高了,隻有使用者進行清理後,才能正常使用。
再來檢視一下我們的限額情況
/dev/sda1 10240* 5120 10240 6days 165* 162 165 6days
[yufei@yufei test]$ rm -f file5
[yufei@yufei test]$ rm -f file4
[yufei@yufei test]$ rm -f file3
删除三個檔案,我們再來檢視限額情況
/dev/sda1 5160* 5120 10240 6days 162 162 165
這時候隻有磁盤的空間還在超限中,而檔案數量處于正常,這時候檔案數量的寬限天數又為空了。而且檔案數量後面的*号也沒有了。
ok,我們的測試也就完工了。當然關于使用者組的限額設定與使用者的設定方法一樣,隻是edquota user 變成edquota group而已。但針對使用者組的限額是整個使用者組,而不是裡面的單個成員啊。下面再給大家介紹點quota的相關知識。
1、不用edquota編輯檔案,直接用指令來配置
格式如下
setquota user blocks限制 inode限制 檔案系統
setquota username 4096 5120 40 50 /home
示範如下
/dev/sda1 5160* 5120 10240 6days 162 162 165
[root@yufei ~]# exit
[root@yufei ~]# setquota yufei 10240 20280 170 200 /dev/sda1
/dev/sda1 5160 10240 20280 162 170 200
2、複制磁盤配額配置檔案
格式
edquota -p user1 user2 user3
把user1的資訊複制給多個使用者
[root@yufei ~]# useradd user2
[root@yufei ~]# quota user2
disk quotas for user user2 (uid 501): none
[root@yufei ~]# edquota -p yufei user2
disk quotas for user user2 (uid 501):
/dev/sda1 32 10240 20280 9 170 200
3、設定寬限時間
edquota -t 後面不加參數,這個是設定全局
edquota -t user/uid 針對某個使用者
[root@yufei ~]# 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/sda1 7days 7days
從這個檔案中可以看到。預設的寬限天數是7天啊!
這裡面的時間隻能用 days, hours, minutes, or seconds這四種。
4、檢視磁盤配額的報表情況
21
22
23
24
repquota -a查系統中所有使用者的配額情況報表
[root@yufei ~]# repquota -a
*** report for user quotas on device /dev/sda1
block grace time: 7days; inode grace time: 7days
block limits file limits
user used soft hard grace used soft hard grace
----------------------------------------------------------------------
root +- 6608676 661659 661680 6days 98931 0 0
daemon -- 8 0 0 3 0 0
rpc -- 12 0 0 4 0 0
abrt -- 68 0 0 17 0 0
haldaemon -- 8 0 0 2 0 0
nslcd -- 4 0 0 1 0 0
postfix -- 76 0 0 42 0 0
avahi -- 8 0 0 3 0 0
ntp -- 8 0 0 2 0 0
rpcuser -- 16 0 0 5 0 0
pulse -- 4 0 0 1 0 0
gdm -- 256 0 0 35 0 0
yufei -- 5160 10240 20280 162 170 200
smmsp -- 24 0 0 6 0 0
apache -- 8 0 0 2 0 0
user2 -- 32 10240 20280 9 170 200
#7155 -- 194108 0 0 8328 0 0
我們沒有對root做任何的限制,系統雖然預設給了root的限制,但從上面的結果來看,對root使用者根本不起作用啊。因為這個使用者是神^_^
5、如果是設定組的限額的話,可以為組設定一個管理者
vim /etc/quotagrpadmins
這個裡面寫的很詳細,一看就明白
6、關掉磁盤配額
quotaoff -a
7、警告信
warnquota這個指令,可以對超過限額的使用者發出警告信,而郵件的内容是在/etc/warnquota.conf中進行設定。而且還需要你的系統安裝了sendmail,并運作。這個指令需要手動執行,執行後,會給超額使用者發一封郵件的同時,還會給root發一封。如果不想手動執行,可以加入計劃任務,讓其自動執行。
from: root
reply-to: [email protected]
subject: note: you are exceeding your allocated disk space limits
仔細對照一下/etc/warnquota.conf與你的mali,你就知道如何設定了。