當Linux根分區的磁盤空間耗盡時,Linux系統將無法再建立新的文件,從而出現服務程序崩潰、系統無法啓動等故障現象,爲了避免此問題,我麼可以設置磁盤配額功能,對用戶在指定文件系統中使用磁盤空間、文件數量進行限制,防止用戶佔用大量的磁盤空間,從而保持我們的系統存儲空間可以穩定使用。
一、磁盤配額術語介紹:
磁盤配額對象式硬盤分區,並且要求Linux內核支持磁盤配額技術。
磁盤配額只對一般用戶有效,對管理員來說是沒有任何作用效果的。
軟限制:soft:最低限制容量,可以被超過,但會有警告信息,超過的部分會保存到寬限時期到期。
硬限制:hard:不能被超過限制條件。
寬限時間:當用戶使用的空間超過了軟限制但還沒達到硬限制,在這個寬限的時間到期前必須將超過的數據降低到軟限 以下,(默認是7天),當寬限時間到期,系統將自動清除超過的數據。
一、檢查我們系統中是否已經安裝了quota程序
[root@bogon ~]# rpm -q quota quota-4.01-11.el7.x86_64 [root@bogon ~]# rpm -ql quota /usr/bin/quota /usr/bin/quotasync /usr/sbin/convertquota /usr/sbin/edquota /usr/sbin/quot /usr/sbin/quotacheck /usr/sbin/quotaoff /usr/sbin/quotaon /usr/sbin/quotastats /usr/sbin/repquota /usr/sbin/rpc.rquotad /usr/sbin/setquota /usr/sbin/xqmstats /usr/share/doc/quota-4.01 /usr/share/doc/quota-4.01/Changelog /usr/share/man/man1/quota.1.gz /usr/share/man/man1/quotasync.1.gz /usr/share/man/man8/convertquota.8.gz /usr/share/man/man8/edquota.8.gz /usr/share/man/man8/quot.8.gz /usr/share/man/man8/quotacheck.8.gz /usr/share/man/man8/quotaoff.8.gz /usr/share/man/man8/quotaon.8.gz /usr/share/man/man8/quotastats.8.gz /usr/share/man/man8/repquota.8.gz /usr/share/man/man8/rpc.rquotad.8.gz /usr/share/man/man8/setquota.8.gz /usr/share/man/man8/xqmstats.8.gz
二、以支持配額功能的方式掛載文件系統
[root@bogon ~]# mount /dev/sdd1 /quotadir/###將我的分區掛載到了一個目錄下方便使用 [root@bogon ~]# chmod 777 /quotadir/###改變目錄的權限方便後面我們寫入測試 [root@bogon ~]# [root@bogon ~]# mount -o remount,usrquota,grpquota /dev/sdd1 /quotadir/ ##這是臨時的掛載,我們也可以使用開機自動掛載方式: [root@bogon ~]# vim /etc/fstab /dev/sdd1 /quotadir ext4 defaults,usrquota,grpquota 0 0 [root@bogon ~]# mount -a [root@bogon ~]# mount tmpfs on /run/user/0 type tmpfs (rw,nosuid,nodev,relatime,seclabel,size=100136k,mode=700) /dev/mapper/vg0-lv0 on /tmp/backup type ext4 (rw,relatime,seclabel,data=ordered) /dev/sdd1 on /quotadir type ext4 (rw,relatime,seclabel,quota,usrquota,grpquota,data=ordered)##此處可以看到我們已經掛載成功了
三、創建磁盤配額的配置文件
quotacheck:
-v:顯示掃描過程
-u:針對掃描用戶的情況建立aquota.user
-g:針對掃描組的情況建立aquota.group
-c:創建新的配額文件
-a:掃描所有分區
[root@bogon ~]# quotacheck -ugc /dev/sdd1 [root@bogon ~]# ls -l /quotadir/ total 32 -rw-------. 1 root root 6144 Jun 4 18:25 aquota.group -rw-------. 1 root root 6144 Jun 4 18:25 aquota.user drwx------. 2 root root 16384 Jun 4 18:11 lost+found ##看到我們分區所掛載的目錄自動會生成兩個配置文件即可
四、實現磁盤配合限制:
edquota
-u 用戶 :指定某用設置配額
-t:改變寬限時間
在這我需要創建一個普通的用戶來做測試使用
root@bogon ~]# useradd ma [root@bogon ~]# passwd ma Changing password for user ma. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully.
[root@bogon ~]# edquota -u ma###設置用戶ma的配額 Disk quotas for user ma (uid 1001): Filesystem blocks soft hard inodes soft hard /dev/sdd1 0 10 20 0 3 5 ~
五、啓用配額功能
[root@bogon ~]# quotaon /quotadir/ 好的,那我麼來測試下看看 [ma@bogon ~]$ dd if=/dev/zero of=/quotadir/test1 bs=1k count=8 8+0 records in 8+0 records out 8192 bytes (8.2 kB) copied, 0.000230902 s, 35.5 MB/s #寫入8k的數據時候正常被寫入了,沒有任何報錯 [ma@bogon ~]$ dd if=/dev/zero of=/quotadir/test1 bs=1k count=10 sdd1: warning, user block quota exceeded.###寫入10k的時候寫入了,但是給我們提示警告 10+0 records in 10+0 records out 10240 bytes (10 kB) copied, 0.0009096 s, 11.3 MB/s [ma@bogon quotadir]$ ll -h /quotadir/ total 44K -rw-------. 1 root root 7.0K Jun 4 18:38 aquota.group -rw-------. 1 root root 7.0K Jun 4 18:38 aquota.user drwx------. 2 root root 16K Jun 4 18:11 lost+found -rw-rw-r--. 1 ma ma 10K Jun 4 18:47 test1##此處可以看到我們test1文件的大小爲10k ###我們在寫入了10k的數據進去,看看會有什麼樣變化呢? [ma@bogon quotadir]$ dd if=/dev/zero of=/quotadir/test2 bs=1k count=10 sdd1: write failed, user block limit reached. dd: error writing ‘/quotadir/test2’: Disk quota exceeded 9+0 records in 8+0 records out#只寫入了8k 8192 bytes (8.2 kB) copied, 0.000170428 s, 48.1 MB/s #接下來我們測試下我們寫入文件個數: [ma@bogon quotadir]$ mkdir a1 mkdir: cannot create directory ‘a1’: Disk quota exceeded##報錯了創建失敗了
六、查看下我們用戶具體配額情況:
[ma@bogon root]$ quota -ugv Disk quotas for user ma (uid 1001): Filesystem blocks quota limit grace files quota limit grace /dev/sdd1 20* 10 20 6days 2 3 5 Disk quotas for group ma (gid 1001): Filesystem blocks quota limit grace files quota limit grace /dev/sdd1 20 0 0 2 0 0
七、關閉磁盤配額
[root@bogon ~]# quotaoff /quotadir/###關閉單個磁盤的磁盤配額 [root@bogon ~]# quotaoff -a ###關閉系統所有已經開啓的配額 [root@bogon ~]# [root@bogon ~]# rm -rf /quotadir/aquota.*##如果不在使用可以將配置文件也刪除了 [root@bogon ~]# 然後刪除/etc/fstab中的自動掛載即可