2021-05-12 14:32:11
Linux 磁碟配額(XFS & EXT4)
若是在Linux
中搭建了FTP
伺服器,為了安全性,就要考慮磁碟配額,以防伺服器磁碟空間被惡意佔滿。
磁碟配額概述#
1.作用範圍:只在指定的分割區有效。
2.限制物件:主要針對使用者、組進行限制,對組賬號限制,組內所有使用者的使用總和不能超過限制。
3.限制型別:磁碟容量限制(Block),預設單位KB、檔案數量限制(Inode)。
4.限制方法:軟限制、硬限制。軟限制預設7天內允許超過,會有警告。硬限制不允許超過,硬限制應當比軟限制大,否者軟限制失效。
磁碟配額管理#
XFS 檔案系統#
XFS
檔案系統通過xfs_quota
工具進行管理。
檢視xfsprogs
軟體包的安裝情況,列表檢視xfsprogs
軟體包安裝的xfs_quota
配額管理程式。
[root@localhost ~]# rpm -q xfsprogs
xfsprogs-4.5.0-12.el7.x86_64
[root@localhost ~]# rpm -ql xfsprogs | grep -i "xfs_quota"
/usr/sbin/xfs_quota
/usr/share/man/man8/xfs_quota.8.gz
xfs_quota 等命令介紹#
- mount -o usrquota,grpquota /dev/class/stu01 /mnt/stu01
-o usrquota,grpquota
:以支援配額的形式掛載
- xfs_quota -x -c 'limit -u bsoft=N bhard=N isoft=N ihard=N 使用者名稱' 掛載點
設定磁碟配額
-x
:啟動專家模式,在當前模式下允許對配額系統進行修改的所有管理命令可用-c
:直接呼叫管理命令,
管理命令limit
後相關:
-u
:對使用者限制-g
:對組限制bsoft
:磁碟容量軟限制bhard
:磁碟容量硬限制isoft
:檔案數量軟限制ihard
:檔案數量硬限制
- xfs_quota -x -c 'report -abi' 掛載點
檢視磁碟配額
管理命令report
後相關:
-u
:對使用者檢視-g
:對組檢視-a
:檢視所有可用分割區的配額使用報告-b
:檢視磁碟容量-i
:檢視檔案數
- dd if=指定輸入裝置或檔案 of=指定輸出裝置或檔案 bs=指定讀取
block
的大小 count=指定讀取block
的數量。
裝置轉換和復制命令
XFS 實驗過程#
1.關閉SELinux
,若啟用SELinux
功能,不是所有的目錄都能設定quota
,預設quota
僅能對/home
進行設定。
[root@localhost ~]# setenforce 0
2.為stu01
開啟磁碟配額功能,並使其永久生效。
[root@localhost ~]# vim /etc/fstab
//修改stu01那行,這裡為了方便,直接使用上一篇部落格的實驗成果。
/dev/class/stu01 /mnt/stu01 xfs defaults,usrquota,grpquota 0 0
3.檢視stu01
的磁碟配額是否生效。(未生效)
[root@localhost ~]# mount | grep stu01
/dev/mapper/class-stu01 on /mnt/stu01 type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
4.重新掛載stu01
,使磁碟配額生效。
[root@localhost ~]# umount /mnt/stu01/
[root@localhost ~]# mount -a
[root@localhost ~]# df -hT | grep stu01
/dev/mapper/class-stu01 xfs 33G 33M 33G 1% /mnt/stu01
5.檢視stu01
的磁碟配額是否生效。(已生效)
[root@localhost ~]# mount | grep stu01
/dev/mapper/class-stu01 on /mnt/stu01 type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)
6.若是不存在名為zhangsan
的測試使用者,則新增。
[root@localhost ~]# useradd zhangsan && echo "000000" | passwd --stdin zhangsan
Changing password for user zhangsan.
passwd: all authentication tokens updated successfully.
7.設定磁碟配額的資料。
[root@localhost ~]# xfs_quota -x -c 'limit -u bsoft=50M bhard=80M isoft=6 ihard=8 zhangsan' /mnt/stu01/
8.為了方便測試,放開許可權。
[root@localhost ~]# chmod 777 /mnt/stu01/
9.切換到zhangsan
使用者。
[root@localhost ~]# su - zhangsan
10.檔案數量配額測試。
[zhangsan@localhost stu01]$ touch test{1..9}.txt
touch: cannot touch ‘test9.txt’: Disk quota exceeded
[zhangsan@localhost stu01]$ ls
test1.txt test2.txt test3.txt test4.txt test5.txt test6.txt test7.txt test8.txt
[zhangsan@localhost stu01]$ rm -f *
11.磁碟空間配額測試。
[zhangsan@localhost stu01]$ dd if=/dev/zero of=/mnt/stu01/test1.txt bs=1M count=100
dd: error writing ‘/mnt/stu01/test1.txt’: Disk quota exceeded
81+0 records in
80+0 records out
83886080 bytes (84 MB) copied, 0.0799075 s, 1.0 GB/s
[zhangsan@localhost stu01]$ ls -lh
total 80M
-rw-rw-r--. 1 zhangsan zhangsan 80M Aug 25 02:47 test1.txt
[zhangsan@localhost stu01]$ touch test2.txt
touch: cannot touch ‘test2.txt’: Disk quota exceeded
12.檢視配額使用情況。
[root@localhost ~]# xfs_quota -x -c 'report -abi' /mnt/stu01/
User quota on /mnt/stu01 (/dev/mapper/class-stu01)
Blocks Inodes
User ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
---------- -------------------------------------------------- --------------------------------------------------
root 0 0 0 00 [--------] 3 0 0 00 [--------]
zhangsan 81920 51200 81920 00 [6 days] 1 6 8 00 [--------]
Group quota on /mnt/stu01 (/dev/mapper/class-stu01)
Blocks Inodes
Group ID Used Soft Hard Warn/Grace Used Soft Hard Warn/ Grace
---------- -------------------------------------------------- --------------------------------------------------
root 0 0 0 00 [--------] 3 0 0 00 [--------]
zhangsan 81920 0 0 00 [--------] 1 0 0 00 [--------]
EXT4 檔案系統#
EXT3/4
檔案系統通過quota
工具進行管理。
檢視quota
軟體包的安裝情況。
[root@localhost ~]# rpm -q quota
quota-4.01-17.el7.x86_64
quota 相關命令介紹#
- quotacheck
檢測磁碟配額並生成配額檔案
-a
:檢測所有可用的分割區-u
:檢測使用者配額-g
:檢測組配額-c
:建立配額資料檔案-v
:顯示執行過程
quotacheck -ugcv 裝置檔名
quotacheck -augcv
- edquota
編輯使用者和組賬號的配額設定
-u
:修改使用者配額,預設KB。-g
:修改組配額,預設KB。-t
:修改寬限時間
edquota -u 使用者名稱
edquota -g 組名
edquota -t
- quotaon & quotaoff
啟動檔案系統的磁碟配額功能
-u
:使用者-g
:組-v
:顯示過程
quotaon -ugv 裝置檔名或掛載點
quotaoff -ugv 裝置檔名或掛載點
- quota
檢視使用者、組配額使用情況
-u
:使用者-g
:組
quota -u 使用者名稱
quota -g 組名
- repquota
檢視分割區磁碟配額使用情況
repquota 掛載點
EXT4 實驗過程#
1.關閉SELinux
,若啟用SELinux
功能,不是所有的目錄都能設定quota
,預設quota
僅能對/home
進行設定。
[root@localhost ~]# setenforce 0
2.為stu02
開啟磁碟配額功能,並使其永久生效。
[root@localhost ~]# vim /etc/fstab
//修改stu02那行,這裡為了方便,直接使用上一篇部落格的實驗成果。
/dev/class/stu02 /mnt/stu02 ext4 defaults,usrquota,grpquota 0 0
3.檢視stu02
的磁碟配額是否生效。(未生效)
[root@localhost ~]# mount | grep stu02
/dev/mapper/class-stu02 on /mnt/stu02 type ext4 (rw,relatime,seclabel,data=ordered)
4.重新掛載stu02
,使磁碟配額生效。
[root@localhost ~]# umount /mnt/stu02/
[root@localhost ~]# mount -a
[root@localhost ~]# df -hT | grep stu02
/dev/mapper/class-stu02 ext4 23G 44M 22G 1% /mnt/stu02
5.檢視stu02
的磁碟配額是否生效。(已生效)
[root@localhost ~]# mount | grep stu02
/dev/mapper/class-stu02 on /mnt/stu02 type ext4 (rw,relatime,seclabel,quota,usrquota,grpquota,data=ordered)
6.若是不存在名為zhangsan
的測試使用者,則新增。
[root@localhost ~]# useradd zhangsan && echo "000000" | passwd --stdin zhangsan
Changing password for user zhangsan.
passwd: all authentication tokens updated successfully.
7.檢測磁碟配額並生成配額檔案。
[root@localhost ~]# ls /mnt/stu02/
lost+found
[root@localhost ~]# quotacheck -ugcv /dev/class/stu02
quotacheck: Your kernel probably supports journaled quota but you are not using it. Consider switching to journaled quota to avoid running quotacheck after an unclean shutdown.
quotacheck: Scanning /dev/mapper/class-stu02 [/mnt/stu02] done
quotacheck: Cannot stat old user quota file /mnt/stu02/aquota.user: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file /mnt/stu02/aquota.group: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old user quota file /mnt/stu02/aquota.user: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file /mnt/stu02/aquota.group: No such file or directory. Usage will not be subtracted.
quotacheck: Checked 3 directories and 0 files
quotacheck: Old file not found.
quotacheck: Old file not found.
[root@localhost ~]# ls /mnt/stu02/
aquota.group aquota.user lost+found
8.編輯磁碟配額設定。
[root@localhost ~]# edquota -u zhangsan
Disk quotas for user zhangsan (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/class-stu01 81920 51200 81920 1 6 8
/dev/mapper/class-stu02 0 40960 61440 0 4 6
9.啟用磁碟配額功能。
[root@localhost ~]# quotaon -ugv /mnt/stu02/
/dev/mapper/class-stu02 [/mnt/stu02]: group quotas turned on
/dev/mapper/class-stu02 [/mnt/stu02]: user quotas turned on
10.為了方便測試,放開許可權。
[root@localhost ~]# chmod 777 /mnt/stu02/
11.切換到zhangsan
使用者。
[root@localhost ~]# su - zhangsan
12.磁碟空間配額測試。
[zhangsan@localhost stu02]$ dd if=/dev/zero of=/mnt/stu02/test1.txt bs=1M count=50
dm-3: warning, user block quota exceeded.
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 0.509643 s, 103 MB/s
[zhangsan@localhost stu02]$ dd if=/dev/zero of=/mnt/stu02/test2.txt bs=1M count=50
dm-3: write failed, user block limit reached.
dd: error writing ‘/mnt/stu02/test2.txt’: Disk quota exceeded
11+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.117714 s, 89.1 MB/s
[zhangsan@localhost stu02]$ ls -l
total 61472
-rw-------. 1 root root 7168 Aug 25 03:01 aquota.group
-rw-------. 1 root root 7168 Aug 25 03:08 aquota.user
drwx------. 2 root root 16384 Aug 25 00:20 lost+found
-rw-rw-r--. 1 zhangsan zhangsan 52428800 Aug 25 03:30 test1.txt
-rw-rw-r--. 1 zhangsan zhangsan 10485760 Aug 25 03:30 test2.txt
13.檔案數量配額測試。
[zhangsan@localhost stu02]$ touch test{3..7}.txt
dm-3: warning, user file quota exceeded.
dm-3: write failed, user file limit reached.
touch: cannot touch ‘test7.txt’: Disk quota exceeded
[zhangsan@localhost stu02]$ ls -l
total 61472
-rw-------. 1 root root 7168 Aug 25 03:01 aquota.group
-rw-------. 1 root root 7168 Aug 25 03:08 aquota.user
drwx------. 2 root root 16384 Aug 25 00:20 lost+found
-rw-rw-r--. 1 zhangsan zhangsan 52428800 Aug 25 03:30 test1.txt
-rw-rw-r--. 1 zhangsan zhangsan 10485760 Aug 25 03:30 test2.txt
-rw-rw-r--. 1 zhangsan zhangsan 0 Aug 25 03:33 test3.txt
-rw-rw-r--. 1 zhangsan zhangsan 0 Aug 25 03:33 test4.txt
-rw-rw-r--. 1 zhangsan zhangsan 0 Aug 25 03:33 test5.txt
-rw-rw-r--. 1 zhangsan zhangsan 0 Aug 25 03:33 test6.txt
14.檢視使用者zhangsan的配額使用情況。
[root@localhost ~]# quota -u zhangsan
Disk quotas for user zhangsan (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/mapper/class-stu01
81920* 51200 81920 6days 1 6 8
/dev/mapper/class-stu02
61440* 40960 61440 6days 6* 4 6 6days
總結#
通過以上實驗,可以發現,XFS
檔案系統的磁碟配額只要檔案數量、磁碟空間其中任何一個達到限額,就無法繼續寫檔案;而EXT4
檔案系統則不同,磁碟空間滿了還可以建立空檔案,直至數量達到限額,或者數量達到限額,覆蓋已有檔案建立非空檔案,直至磁碟容量達到限額。
相關文章