磁盤配額從字面意思上看就是給一個磁盤配置多少額度,而quota就是有多少限額的意思,因此總的來講就是限制用戶對磁盤空間的使用量。
由於Linux是多用戶多任務的操做系統,許多人公用磁盤空間,舉個例子像/home目錄是存放普通用戶家目錄的地方,咱們假如home目錄一共有10G空間,而home下一共有三個用戶,那麼正常劃分的話每一個人應該是分得大概333M空間,可是其中有個用戶在家目錄下存放了不少音頻文件佔了8G的空間,這樣的話對其餘用戶就顯得不公平,而若是想要磁盤容量公平的分配,這個時候就要靠quota來實現了。node

2、quota的常見類型及注意事項

(1)注意事項
1.針對 www server,例如對我的的網頁空間的容量限額。
2.針對mail server,例如對我的的郵件空間進行限額。
3.針對file server,例如對我的最大的可用網絡硬盤空間限額。
在這裏咱們就主要講解下第三種對硬盤空間進行限額
(2)注意事項
1.核心必須支持quota:Linux核心必須有支持quota這個功能才行,在centos7版本中系統都預設支持quota功能,但若是你是自行編譯的核心,那你就要留意是否真的開啓了quota功能,不然後面作的可能都會白作。
2.只適用於ext2.ext3.ext4文件系統,對於目錄是不起做用的,雖然咱們的掛載點是一個目錄,但實際上它是個文件系統設備。
3.只針對普通用戶和組有效:由於在Linux系統中root身份的特殊因此這些設定對root是不起做用的由於整個系統都歸他管啊。
4.針對用戶組使用的限額是指某個組中的全部成員一塊兒使用的限額,而不是每一個人使用的限額。數據庫

關於quota的幾個配置
inode:限制用戶能夠創建的文件數量
block:限制用戶磁盤容量(默認以KB爲單位)
而不管是inode仍是block它們都有一個soft/hard,也就是軟限制和硬限制。
soft:這是最低容量的意思,在用戶寬限期內他的容量能夠超過這個值,但不能超過硬限制,也必須在規定的寬限期內將容量降到soft容量限制之下。
hard:這是最高的限制,是絕對不能超過的,一般hard值都會比soft值高,若是用戶超過了hard值那麼系統就會鎖定該用戶對該磁盤的使用權限。
grace time:這就是上面提到的寬限時間,這個寬限時間只有用戶對磁盤的使用量介於soft和hard之間時纔會出現,這是爲了提醒用戶,由於磁盤容量一旦達到hard,使用者的磁盤使用權限將會被鎖住,爲了擔憂使用者沒有注意到這個問題,所以設計了soft,而當你的磁盤使用量超過soft即將達到hard時,系統會給予警告,但也會給使用者一段時間讓使用者自行管理磁盤,通常預設的寬限時間爲7天,但若是你7天內都不對磁盤進行管理,那麼soft限制將會取代hard限制來做爲quota的限制。vim

3、quota限額的操做演示

1.quota的安裝包
quota在centos7裏是默認安裝的,但若是你對系統裏沒有可使用rpm安裝,安裝以下:
rpm -q quota
quota-4.01-14.el7.x86_64
2.首先咱們要建立一個普通用戶,由於quota對root是無效的。咱們就建立一個普通用戶myquota1做爲演示,而後咱們看要演示的磁盤是否開啓quota,這裏我對/dev/sda6分區進行操做,咱們先查看/dev/sda6是否開啓quotacentos

[root@localhost ~]# mount /dev/sda6 on /disk2 type ext4 (rw,relatime,seclabel,data=ordered)

咱們能夠看到quota沒有開啓,因此咱們須要從新掛載。爲了使下次開機也起做用,咱們把掛載寫到/etc/fstab文件中ruby

[root@localhost ~]# vim /etc/fstab /dev/sda6 /disk2 ext4 defaults,usrquota,grpquota 0 0 #因爲咱們增長了用戶和組的配額,因此這裏咱們要從新mount一次,使咱們的修改生效 [root@localhost ~]# mount -o remount /disk2 [root@localhost ~]# mount /dev/sda6 on /disk2 type ext4 (rw,relatime,seclabel,quota,usrquota,grpquota,data=ordered)

如今已經開啓了對用的磁盤配額
3.生成磁盤配額數據庫bash

[root@localhost disk2]# quotacheck -acgu [root@localhost disk2]# ls aquota.group aquota.user lost+found

這裏的參數意思分別是
-a 全部分區(已支持配額)
-c 建立
-u 用戶
-g 組
4.啓動磁盤配額網絡

[root@localhost disk2]# quotaon -a //啓動全部分區的磁盤配額
5.編輯磁盤配額文件ide

[root@localhost ~]# edquota myquota1 Disk quotas for user myquota1 (uid 1002): Filesystem blocks soft hard inodes soft hard /dev/sdb1 0 0 0 0 0 0 /dev/sda6 0 5120 10240 1 5 10

這裏咱們能夠看到/dev/sda6對用戶myquota1的空間軟限額爲5M,硬限額爲10M,建立文件數量軟限制爲5硬限制爲10測試

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/sdb1 7days 7days /dev/sda6 5days 6hours

edquota -t 將打開磁盤對限額日期的寬限修改時間
可使用天、小時、分、秒爲單位來設定寬限期。默認的都爲7天,在這裏,/dev/sda6磁盤空間限制的寬限期爲5天,而文件數量限制的寬限期只有6個小時。
6.測試ui

咱們切換到myquota1用戶先看查看自身限額狀況

[myquota1@localhost disk2]$ quota
Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 0 5120 10240 1 5 10 

而後咱們來測試效果

[myquota1@localhost disk2]$ touch file2
[myquota1@localhost disk2]$ dd if=/dev/zero of=file2 bs=1M count=2 [myquota1@localhost disk2]$ dd if=/dev/zero of=file3 bs=1M count=2 [myquota1@localhost disk2]$ dd if=/dev/zero of=file4 bs=1M count=2 sda6: warning, user block quota exceeded. 2+0 records in 2+0 records out 2097152 bytes (2.1 MB) copied, 0.00488266 s, 430 MB/s

咱們能夠看到咱們在建立file4時系統給出了警告,這時候咱們再來看一下配額狀況
[myquota1@localhost disk2]$ quota

Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 6144* 5120 10240 4days 4 5 10 #咱們能夠看到使用磁盤使用量已經達到了6144KB超過了軟限制,並且6144還帶上了*號,寬限時間爲4天,咱們在建立兩個文件,讓他文件數超過軟限制,看看是否是也是這個效果 [myquota1@localhost disk2]$ touch file{5,6} sda6: warning, user file quota exceeded. [myquota1@localhost disk2]$ quota Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 6144* 5120 10240 4days 6* 5 10 06:00 #咱們能夠看到在建立兩個文件後系統一樣給出了警告,inode使用數也帶上了*號,寬限時間出現了爲6個小時。 

在目前狀況下咱們最多還能建立4個文件,最多還有4M空間,下面咱們繼續測試,繼續加大使用空間。

[myquota1@localhost disk2]$ dd if=/dev/zero of=file7 bs=1M count=3 3+0 records in 3+0 records out 3145728 bytes (3.1 MB) copied, 0.00578637 s, 544 MB/s [myquota1@localhost disk2]$ dd if=/dev/zero of=file8 bs=1M count=3 sda6: write failed, user block limit reached. dd: error writing ‘file8’: Disk quota exceeded 2+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.00451473 s, 232 MB/s #在咱們建立第二個文件的時候系統又一次進行了報警,提示已超出磁盤配額。 [myquota1@localhost disk2]$ ll total 10272 -rw-------. 1 root root 7168 Mar 3 01:25 aquota.group -rw-------. 1 root root 7168 Mar 3 01:25 aquota.user -rw-rw-r--. 1 myquota1 myquota1 0 Mar 3 01:44 file1 -rw-rw-r--. 1 myquota1 myquota1 2097152 Mar 3 17:04 file2 -rw-rw-r--. 1 myquota1 myquota1 2097152 Mar 3 17:05 file3 -rw-rw-r--. 1 myquota1 myquota1 2097152 Mar 3 17:05 file4 -rw-rw-r--. 1 myquota1 myquota1 0 Mar 3 17:15 file5 -rw-rw-r--. 1 myquota1 myquota1 0 Mar 3 17:15 file6 -rw-rw-r--. 1 myquota1 myquota1 3145728 Mar 3 17:21 file7 -rw-rw-r--. 1 myquota1 myquota1 1048576 Mar 3 17:21 file8 drwx------. 2 root root 16384 Mar 3 00:57 lost+found 

咱們能夠看到雖然file8也建立成功了可是隻有1M的數據,在實際應用中若是這是個3M的數據文件而只拷貝了1M是沒法使用的,這個時候咱們的空間限額已經達到了最高由於咱們文件數量限額還沒達到因此咱們還能夠繼續建立空文件

[myquota1@localhost disk2]$ touch file9
[myquota1@localhost disk2]$ quota
Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 10240* 5120 10240 4days 9* 5 10 05:49

咱們能夠看到file9也建立成功了,而這時候文件可建立數量只剩一個了,咱們來試試看看能不能建立11個

[myquota1@localhost disk2]$ touch file10 [myquota1@localhost disk2]$ touch file11 sda6: write failed, user file limit reached. touch: cannot touch ‘file11’: Disk quota exceeded [myquota1@localhost disk2]$ ls aquota.group file1 file2 file4 file6 file8 lost+found aquota.user file10 file3 file5 file7 file9

咱們能夠看到file10建立成功了,而在建立file11時給出了警告,咱們查看一下發現file11並無建立成功
接下來咱們再測試下若是到寬限時間仍然不刪除會怎樣。
首先咱們刪除幾個文件讓他的文件數不超過硬限制,但仍超過軟限制。

[myquota1@localhost disk2]$ rm -f file{7,8,9,10} [myquota1@localhost disk2]$ quota Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 6144* 5120 10240 4days 6* 5 10 05:25 [myquota1@localhost disk2]$ touch test1 [myquota1@localhost disk2]$ ls aquota.group file1 file3 file5 lost+found aquota.user file2 file4 file6 test1

在刪除幾個文件後咱們就又能夠建立文件了,接下來咱們把時間修改下,讓它過了寬限時間看會變成怎樣。
咱們先切換到root身份對時間進行修改

[root@localhost ~]# date Sat Mar 3 18:45:25 CST 2018 [root@localhost ~]# date -s 2018-03-04 Sun Mar 4 00:00:00 CST 2018 [root@localhost ~]# clock -w [root@localhost ~]# su - myquota1 Last login: Sat Mar 3 18:37:37 CST 2018 on pts/0 [myquota1@localhost ~]$ cd /disk2 [myquota1@localhost disk2]$ ls aquota.group file1 file3 file5 lost+found aquota.user file2 file4 file6 test1 [myquota1@localhost disk2]$ quota Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 6144* 5120 10240 4days 7* 5 10 none [myquota1@localhost disk2]$ touch test2 sda6: write failed, user file quota exceeded too long. touch: cannot touch ‘test2’: Disk quota exceeded [myquota1@localhost disk2]$ ls aquota.group file1 file3 file5 lost+found aquota.user file2 file4 file6 test1

咱們能夠看到時間改完後寬限時間那裏變成了none,咱們這個時候已經建立了7個文件,它原本的軟限制爲5,硬限制爲10,而咱們如今建立文件卻沒法建立,這就是超過寬限日期後軟限制就會變成硬限制,這個時候用戶必須對磁盤進行清理。

[myquota1@localhost disk2]$ rm -rf file{1,2,3,4,5,6} [myquota1@localhost disk2]$ ls aquota.group aquota.user lost+found test1 [myquota1@localhost disk2]$ quota Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 0 5120 10240 1 5 10 

咱們對磁盤進行清理後發現那些*號沒有了,寬限時間也不見了。

同理對於用戶組的限額設定和對用戶設置的方法同樣,只是dequota user 變成了edquota group而已。但針對的是用戶整個組的限額,而不是單個成員。

4、quota的實用命令

測試完quota的效果,咱們再來講幾個quota的實用命令
1.不用edquota編輯文件,直接使用命令配置

[myquota1@localhost disk2]$ quota
Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 0 5120 10240 1 5 10 [myquota1@localhost disk2]$ exit logout [root@localhost ~]# setquota myquota1 20480 40960 50 100 /dev/sda6 [root@localhost ~]# quota myquota1 Disk quotas for user myquota1 (uid 1002): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 0 20480 40960 1 50 100 

setquota使用格式:
setquota user blocks限制 inode限制 文件系統
setquota myquota1 20480 40960 50 100 /dev/sda6
2.複製磁盤配額配置文件給多個用戶

[root@localhost ~]# edquota -p myquota1 myquota2 [root@localhost ~]# quota myquota2 Disk quotas for user myquota2 (uid 1003): none [root@localhost ~]# quota -v myquota2 Disk quotas for user myquota2 (uid 1003): Filesystem blocks quota limit grace files quota limit grace /dev/sda6 0 20480 40960 0 50 100 /dev/sdb1 0 0 0 0 0 0 

複製命令爲eqquota -p user1 user2 user3
把user1的磁盤限額設置複製給user2,user3.
在這裏要注意一點剛複製完後用quota user2是無法查看配額狀況的,咱們須要加上-v參數(顯示該用戶在全部掛入系統的儲存設備的空間限制),或者切換到該用戶到限額目錄下建立個文件也能使用quota看到信息了。
3.查看磁盤配額報表狀況

[root@localhost ~]# repquota -a

*** Report for user quotas on device /dev/sda6 Block grace time: 5days; Inode grace time: 06:00 Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 20 0 0 2 0 0 myquota1 -- 0 20480 40960 1 50 100 myquota2 -- 0 20480 40960 1 50 100 *** Report for user quotas on device /dev/sdb1 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 13 0 0 2 0 0 

4.關掉磁盤配額

[root@localhost ~]# quotaoff -a [root@localhost ~]# repquota -a *** Report for user quotas on device /dev/sda6 Block grace time: 5days; Inode grace time: 06:00 Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 20 0 0 2 0 0 myquota1 -- 0 20480 40960 1 50 100 myquota2 -- 0 20480 40960 1 50 100 *** Report for user quotas on device /dev/sdb1 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 13 0 0 2 0 0 

quotaoff -a 是關掉全部的磁盤配額
也能夠在quotaoff後跟指定分區關掉指定分區配額。