磁盤配額(quota)
磁盤配額從字面意思上看就是給一個磁盤配置多少額度,而quota就是有多少限額的意思,所以總的來說就是限制用戶對磁盤空間的使用量。
因為Linux是多用戶多任務的操作系統,許多人公用磁盤空間,舉個例子像/home目錄是存放普通用戶家目錄的地方,我們假如home目錄一共有10G空間,而home下一共有三個用戶,那麽正常劃分的話每個人應該是分得大概333M空間,但是其中有個用戶在家目錄下存放了很多音頻文件占了8G的空間,這樣的話對其他用戶就顯得不公平,而如果想要磁盤容量公平的分配,這個時候就要靠quota來實現了。
二、quota的常見類型及註意事項
(1)註意事項
1.針對 www server,例如對個人的網頁空間的容量限額。
3.針對file server,例如對個人最大的可用網絡硬盤空間限額。
在這裏我們就主要講解下第三種對硬盤空間進行限額
(2)註意事項
1.核心必須支持quota:Linux核心必須有支持quota這個功能才行,在centos7版本中系統都預設支持quota功能,但如果你是自行編譯的核心,那你就要留意是否真的開啟了quota功能,否則後面做的可能都會白做。
2.只適用於ext2.ext3.ext4文件系統,對於目錄是不起作用的,雖然我們的掛載點是一個目錄,但實際上它是個文件系統設備。
3.只針對普通用戶和組有效:因為在Linux系統中root身份的特殊所以這些設定對root是不起作用的因為整個系統都歸他管啊。
關於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的限制。
三、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是否開啟quota
[root@localhost ~]# mount
/dev/sda6 on /disk2 type ext4 (rw,relatime,seclabel,data=ordered)
我們可以看到quota沒有開啟,所以我們需要重新掛載。為了使下次開機也起作用,我們把掛載寫到/etc/fstab文件中
[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.生成磁盤配額數據庫
[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.編輯磁盤配額文件
[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.測試
我們切換到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而已。但針對的是用戶整個組的限額,而不是單個成員。
四、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後跟指定分區關掉指定分區配額。
磁盤配額(quota)