Linux系統磁盤配額(quota)

        本文主要介紹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功能)

image.png

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選項。

image.png

若是須要開機自動掛載,請vim /etc/fstab 並將掛載選項usrquota,grpquota加入其中。

image.png

3. 添加用於磁盤配額的用戶和組

[root@localhost ~]# groupadd myquota
[root@localhost ~]# useradd -g myquota quota1
[root@localhost ~]# useradd -g myquota quota2

image.png

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配置文件

image.png

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時顯示信息

image.png

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磁盤配額給其餘用戶

image.png

image.png

複製用戶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

image.png

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

image.png

image.png

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已經生效。

image.png

檢查用戶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

image.png

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的磁盤配額狀況。

image.png

[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: 超出磁盤限額

image.png

9. 查看磁盤配額報告狀況repquota

[root@localhost data]# repquota -aug

repquota一個磁盤配額綜合查詢命令,如下是對它的一些選項解釋,通常這三個選項一塊兒使用:

  •  -a 報告全部支持quota的文件系統

  •  -u 報告針對用戶的quota信息

  •  -g 包裹針對組的quota信息

image.png

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        # 天天早上七點執行一次掃描文件系統磁盤配額狀況
相關文章
相關標籤/搜索