天天看點

Linux系統磁盤配額(quota)

        本文主要介紹Linux系統磁盤配額工具quota。磁盤配額是指限制使用者對磁盤的使用量。由于Linux是一個多使用者、多任務的作業系統,多個使用者公用磁盤空間,為了公平、合理的使用磁盤空間,于是就有了磁盤配額工具quota。

磁盤配額的限制條件:

  • 對EXT系列檔案系統,quota僅能針對整個檔案系統進行設計,無法對單一的目錄進行磁盤配額;而在最新的xfs的檔案系統中,可以使用quota對目錄進行磁盤配額,是以在進行磁盤配額前,一定要對檔案系統進行檢查。
  • Linux核心必須支援quota。
  • 磁盤配額隻對一般使用者有效,因為root擁有全部的磁盤空間。

quota的可以設定内容:

  • 可以分别針對使用者、群組進行磁盤配額。
  • 可以限制inode和block的用量。
  • soft/hard,表示具體限制的數值大小,當磁盤容量達到soft時,系統會發出警告,要求降低至soft值以下,當達到hard時,系統會禁止繼續增加新的檔案。
  • 寬限時間(一般為7天),當某一使用者使用磁盤容量達到soft時,系統會給出一個grace time,若超過這個天數,soft值會變成hard值并禁止該使用者對磁盤增加新的檔案。

0. 實驗條件

     作業系統:CentOS 6.5 (kernel 2.6.32-431.el6.i686 , 預設支援磁盤配額quota功能)

     磁      盤:/dev/sdb1   (檔案系統ext4,空間大小10G)

     Selinux  :Disabled

     使用者群組:普通使用者quota1,quota2   加入 myquota組

1. 檢視核心支援quota功能

[[email protected] ~]# grep -i quota /boot/config-2.6.32-431.el6.i686 
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
CONFIG_QUOTA=y
CONFIG_QUOTA_NETLINK_INTERFACE=y
CONFIG_PRINT_QUOTA_WARNING=y
# CONFIG_QUOTA_DEBUG is not set
CONFIG_QUOTA_TREE=y
CONFIG_QUOTACTL=y      

其中CONFIG_QUOTA=y(此行y代表支援quota功能)

Linux系統磁盤配額(quota)

2. 準備檔案系統

[[email protected] ~]# fdisk -l /dev/sdb
[[email protected] ~]# fdisk /dev/sdb
Device Boot      Start         End      Blocks       Id  System
/dev/sdb1            1        1306     10490413+     83  Linux
[[email protected] ~]# mkfs.ext4 /dev/sdb1
[[email protected] ~]# mkdir /mnt/data
[[email protected] ~]# mount /dev/sdb1 /mnt/data/
[[email protected] ~]# mount -o remount,usrquota,grpquota /mnt/data/
[[email protected] ~]# mount | grep quota
/dev/sdb1 on /mnt/data type ext4 (rw,usrquota,grpquota)      

首先建立一個可用的磁盤分區裝置/dev/sdb1 ,格式化為ext4檔案系統,挂載到/mnt/data目錄。然後重新挂/dev/sdb1檔案系統,并添加usrquota,grpquota選項。

Linux系統磁盤配額(quota)

如果需要開機自動挂載,請vim /etc/fstab 并将挂載選項usrquota,grpquota加入其中。

Linux系統磁盤配額(quota)

3. 添加用于磁盤配額的使用者群組

[[email protected] ~]# groupadd myquota
[[email protected] ~]# useradd -g myquota quota1
[[email protected] ~]# useradd -g myquota quota2      
Linux系統磁盤配額(quota)

4. 生成磁盤配額配置檔案quotacheck

[[email protected] data]# quotacheck -cug .
[[email protected] data]# ls
aquota.group  aquota.user  lost+found      

其中各選項及生成的配置檔案解釋如下:

  •  -c 建立磁盤配額的配置檔案
  •  -u 針對使用者配額的配置檔案aquota.user
  •  -g 針對使用者組配額的配置檔案aquota.group
  •  -v 顯示掃描過程資訊
  •  -a 檢測系統中所有已經挂載支援quota功能的分區 
  •  aquota.user 使用者配額quota配置檔案
  •  aquota.group 組配額quota配置檔案
Linux系統磁盤配額(quota)

5. 啟用磁盤配額quotaon

[[email protected] data]# quotaon /dev/sdb1            # 啟用/dev/sdb1的磁盤配額quota功能
[[email protected] data]# quotaoff /dev/sdb1       # 關閉/dev/sdb1的磁盤配額quota功能      

其中可以使用選項解釋如下:

  • -a 開啟所有quota設定,根據/etc/mtab設定
  • -v 開啟quota時顯示資訊
Linux系統磁盤配額(quota)

6. 編輯使用者群組磁盤配額edquota

[[email protected] data]# edquota -u quota1
[[email protected] data]# edquota -u quota2
[[email protected] data]# edquota -g myquota      

其中可以使用選項解釋如下:

  • -u 編輯使用者磁盤配額quota.user
  • -g 編輯組磁盤配額quota.grp
  • -t : 編輯寬限時間
  • -p : 複制quota磁盤配額給其他使用者
Linux系統磁盤配額(quota)
Linux系統磁盤配額(quota)

複制使用者quota1的磁盤配額給使用者quota2:

[[email protected] data]# edquota -p quota1 quota2
[[email protected] data]# quota -u quota2
Disk quotas for user quota2 (uid 502): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1       0   50000  100000               1       0       0        
[[email protected] data]# quota -u quota1
Disk quotas for user quota1 (uid 501): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1       0   50000  100000               1       0       0      
Linux系統磁盤配額(quota)

quota配置相關的内容:

  • inode:限制使用者可以建立的檔案數量
  • block:限制使用者磁盤的容量,以KB為機關
  • soft:軟限制。就是在超過這個值後,會提醒使用者,但使用者的權限還沒有被限制。
  • hard:硬限制。這是最高的限制,使用者或組絕對不會超過這個限制值。如果超過了,就限制死了使用者的使用權限了。
  • grace time:寬限時間。這個就是當達到soft限制時,還沒有到達hard限制的時候,用來提醒使用者的。如果在警告的天數之内,使用者都不進行任何磁盤管理操作,那麼    soft限制值會即刻取代hard限值來作為quota的限制,就算你沒有達到hard限制,也用不了了。

這裡修改使用者quota1的軟限制soft為50M,硬限制hard為100M。使用者組myquota的軟限制soft為50M,硬限制hard為100M。

[[email protected] data]# edquota -u quota1
Disk quotas for user quota1 (uid 501):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                         0      50000     100000          0        0        0
[[email protected] data]# edquota -g myquota
Disk quotas for group myquota (gid 501):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sdb1                         0      50000     100000          0        0        0      
Linux系統磁盤配額(quota)
Linux系統磁盤配額(quota)

7. 檢查使用者群組磁盤配額quota

  為了友善檢查測試磁盤配額效果,我們給/mnt/data目錄賦予666權限,以友善普通使用者quota1 和 quota2 建立檔案。

[[email protected] data]# chmod 777 /mnt/data/
[[email protected] data]# ls -ld
drwxrwxrwx 3 root root 4096 1月  31 13:29 .
[[email protected] data]# su - quota1
[[email protected] ~]$ cd /mnt/data/
[[email protected] data]$ touch test1.txt
[[email protected] data]$ quota
Disk quotas for user quota1 (uid 501): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1       0   50000  100000               1       0       0      

可以看到對使用者quota1設定的磁盤配額軟限制50M,硬限制100M已經生效。

Linux系統磁盤配額(quota)

檢查使用者quota1 和 組myquota 的磁盤配額:

[[email protected] data]# quota -u quota1
Disk quotas for user quota1 (uid 501): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1       0   50000  100000               1       0       0        
[[email protected] data]# quota -g myquota
Disk quotas for group myquota (gid 501): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1       0   50000  100000               2       0       0      
Linux系統磁盤配額(quota)

8. 測試使用者磁盤配額效果

[[email protected] data]# su quota1
[[email protected] data]$ dd if=/dev/zero of=quota1.dat bs=1M count=50
sdb1: warning, user block quota exceeded.
sdb1: warning, group block quota exceeded.
記錄了50+0 的讀入
記錄了50+0 的寫出
52428800位元組(52 MB)已複制,0.155252 秒,338 MB/秒
[[email protected] data]$ quota
Disk quotas for user quota1 (uid 501): 
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1   51200*  50000  100000   7days       2       0       0      

可以看到寬限時間grace已經生效7days,表明磁盤配額達到軟限制50M的警告線,此時還可以再增加檔案,但如果達到100M的硬限制,就無法再建立檔案了。

[[email protected] data]$ dd if=/dev/zero of=quota11.dat bs=1M count=80
sdb1: write failed, user block limit reached.
dd: 正在寫入"quota11.dat": 超出磁盤限額
記錄了48+0 的讀入
記錄了47+0 的寫出
49971200位元組(50 MB)已複制,0.0881028 秒,567 MB/秒      

如上“超出磁盤配額”證明對使用者quota1的磁盤配額生效。我們在檢查一下使用者quota1的磁盤配額情況。

Linux系統磁盤配額(quota)
[[email protected] data]$ touch test.txt
[[email protected] data]$ ls
aquota.group  lost+found   quota1.dat  test2.txt
aquota.user   quota11.dat  test1.txt   test.txt
[[email protected] data]$ echo helloworld > test.txt 
bash: echo: write error: 超出磁盤限額      
Linux系統磁盤配額(quota)

9. 檢視磁盤配額報告情況repquota

[[email protected] data]# repquota -aug      

repquota一個磁盤配額綜合查詢指令,以下是對它的一些選項解釋,一般這三個選項一起使用:

  •  -a 報告所有支援quota的檔案系統
  •  -u 報告針對使用者的quota資訊
  •  -g 包裹針對組的quota資訊
Linux系統磁盤配額(quota)

10. 系統啟動時自動啟用磁盤配額及添加計劃任務

    (1)為了實作系統啟動時自動啟用磁盤配額,可以在 /etc/rc.d/rc.sysinit 或 /etc/rc.d/rc.local 中加入以下内容:

 /usr/sbin/quotaon -aug      

    在系統關機/重新開機腳本 /etc/rc.d/rc[0,6]/ 中加入關閉quota的指令:

 /usr/sbin/quotaoff -aug      

    (2)quotcheck指令用來掃描檔案系統的磁盤配額使用情況,更新aquota.user,aquota.group進而保持quota配置到最新的狀态。

     是以最好能在系統啟動時自動執行以下指令:

/sbin/quotacheck -avug      

    或者通過crontab定期執行:

0 8 * * * /sbin/quotacheck -avug        # 每天早上七點執行一次掃描檔案系統磁盤配額情況      

轉載于:https://blog.51cto.com/toddliu/2348206