1. 程式人生 > >磁盤配額(quota)

磁盤配額(quota)

Linux quota Linuxquota Linux磁盤配額 磁盤配額quota

一、什麽是磁盤配額

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

二、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的限制。

三、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)