本文主要介紹Linux系統磁盤配額工具quota。磁盤配額是指限制用戶對磁盤的使用量。因爲Linux是一個多用戶、多任務的操做系統,多個用戶公用磁盤空間,爲了公平、合理的使用磁盤空間,因而就有了磁盤配額工具quota。
node
磁盤配額的限制條件:linux
對EXT系列文件系統,quota僅能針對整個文件系統進行設計,沒法對單一的目錄進行磁盤配額;而在最新的xfs的文件系統中,能夠使用quota對目錄進行磁盤配額,所以在進行磁盤配額前,必定要對文件系統進行檢查。vim
Linux內核必須支持quota。bash
磁盤配額只對通常用戶有效,由於root擁有所有的磁盤空間。ide
quota的能夠設置內容:工具
能夠分別針對用戶、羣組進行磁盤配額。測試
能夠限制inode和block的用量。ui
soft/hard,表示具體限制的數值大小,當磁盤容量達到soft時,系統會發出警告,要求下降至soft值如下,當達到hard時,系統會禁止繼續增長新的文件。spa
寬限時間(通常爲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功能
[root@localhost ~]# 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功能)
2. 準備文件系統
[root@localhost ~]# fdisk -l /dev/sdb [root@localhost ~]# fdisk /dev/sdb Device Boot Start End Blocks Id System /dev/sdb1 1 1306 10490413+ 83 Linux [root@localhost ~]# mkfs.ext4 /dev/sdb1 [root@localhost ~]# mkdir /mnt/data [root@localhost ~]# mount /dev/sdb1 /mnt/data/ [root@localhost ~]# mount -o remount,usrquota,grpquota /mnt/data/ [root@localhost ~]# mount | grep quota /dev/sdb1 on /mnt/data type ext4 (rw,usrquota,grpquota)
首先建立一個可用的磁盤分區設備/dev/sdb1 ,格式化爲ext4文件系統,掛載到/mnt/data目錄。而後從新掛/dev/sdb1文件系統,並添加usrquota,grpquota選項。
若是須要開機自動掛載,請vim /etc/fstab 並將掛載選項usrquota,grpquota加入其中。
3. 添加用於磁盤配額的用戶和組
[root@localhost ~]# groupadd myquota [root@localhost ~]# useradd -g myquota quota1 [root@localhost ~]# useradd -g myquota quota2
4. 生成磁盤配額配置文件quotacheck
[root@localhost data]# quotacheck -cug . [root@localhost data]# ls aquota.group aquota.user lost+found
其中各選項及生成的配置文件解釋以下:
-c 建立磁盤配額的配置文件
-u 針對用戶配額的配置文件aquota.user
-g 針對用戶組配額的配置文件aquota.group
-v 顯示掃描過程信息
-a 檢測系統中全部已經掛載支持quota功能的分區
aquota.user 用戶配額quota配置文件
aquota.group 組配額quota配置文件
5. 啓用磁盤配額quotaon
[root@localhost data]# quotaon /dev/sdb1 # 啓用/dev/sdb1的磁盤配額quota功能 [root@localhost data]# quotaoff /dev/sdb1 # 關閉/dev/sdb1的磁盤配額quota功能
其中能夠使用選項解釋以下:
-a 開啓全部quota設定,根據/etc/mtab設定
-v 開啓quota時顯示信息
6. 編輯用戶和組磁盤配額edquota
[root@localhost data]# edquota -u quota1 [root@localhost data]# edquota -u quota2 [root@localhost data]# edquota -g myquota
其中能夠使用選項解釋以下:
-u 編輯用戶磁盤配額quota.user
-g 編輯組磁盤配額quota.grp
-t : 編輯寬限時間
-p : 複製quota磁盤配額給其餘用戶
複製用戶quota1的磁盤配額給用戶quota2:
[root@localhost data]# edquota -p quota1 quota2 [root@localhost 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 [root@localhost 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
quota配置相關的內容:
inode:限制用戶能夠創建的文件數量
block:限制用戶磁盤的容量,以KB爲單位
soft:軟限制。就是在超過這個值後,會提醒用戶,但用戶的權限尚未被限制。
hard:硬限制。這是最高的限制,用戶或組絕對不會超過這個限制值。若是超過了,就限制死了用戶的使用權限了。
grace time:寬限時間。這個就是當達到soft限制時,尚未到達hard限制的時候,用來提醒用戶的。若是在警告的天數以內,用戶都不進行任何磁盤管理操做,那麼 soft限制值會即刻取代hard限值來做爲quota的限制,就算你沒有達到hard限制,也用不了了。
這裏修改用戶quota1的軟限制soft爲50M,硬限制hard爲100M。用戶組myquota的軟限制soft爲50M,硬限制hard爲100M。
[root@localhost 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 [root@localhost 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
7. 檢查用戶和組磁盤配額quota
爲了方便檢查測試磁盤配額效果,咱們給/mnt/data目錄賦予666權限,以方便普通用戶quota1 和 quota2 建立文件。
[root@localhost data]# chmod 777 /mnt/data/ [root@localhost data]# ls -ld drwxrwxrwx 3 root root 4096 1月 31 13:29 . [root@localhost data]# su - quota1 [quota1@localhost ~]$ cd /mnt/data/ [quota1@localhost data]$ touch test1.txt [quota1@localhost 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已經生效。
檢查用戶quota1 和 組myquota 的磁盤配額:
[root@localhost 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 [root@localhost 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
8. 測試用戶磁盤配額效果
[root@localhost data]# su quota1 [quota1@localhost 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/秒 [quota1@localhost 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的硬限制,就沒法再建立文件了。
[quota1@localhost 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的磁盤配額狀況。
[quota1@localhost data]$ touch test.txt [quota1@localhost data]$ ls aquota.group lost+found quota1.dat test2.txt aquota.user quota11.dat test1.txt test.txt [quota1@localhost data]$ echo helloworld > test.txt bash: echo: write error: 超出磁盤限額
9. 查看磁盤配額報告狀況repquota
[root@localhost data]# repquota -aug
repquota一個磁盤配額綜合查詢命令,如下是對它的一些選項解釋,通常這三個選項一塊兒使用:
-a 報告全部支持quota的文件系統
-u 報告針對用戶的quota信息
-g 包裹針對組的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 # 天天早上七點執行一次掃描文件系統磁盤配額狀況