網站首頁 編程語言 正文
不管磁盤空間有多么大,磁盤空間不夠使用似乎是一個永遠的事實。而且Linux系統在默認情況下,并不限制每個用戶使用磁盤空間的大小,如果某個用戶疏忽或惡意將磁盤占滿,將導致系統無法進行寫操作甚至崩潰。因此Linux提供了限制用戶磁盤空間的手段,以便促使每個用戶合理有效地使用分配給他的空間。
設置用戶和組配額的分配量對磁盤配額的限制一般是從一個用戶占用磁盤大小和所有文件的數量兩個方面來進行的。設置磁盤配額時,“某用戶在系統中共計只能使用50MB磁盤空間”,這樣的限制要求是無法實現的;只能設置“某用戶在/home分區能使用30MB,在/backup分區能使用20MB”。磁盤配額的設置單位是分區,針對分區啟用配額限制功能后才可以對用戶設置,而不理會用戶文件放在該文件系統中的哪個目錄中,其他系統,如Unix、Windows,原理與Linux相同。在具體操作之前,我們先了解一下磁盤配額的兩個基本概念:軟限制和硬限制。
- 軟限制:一個用戶在一定時間范圍內(默認為一周,可以使用命令“edquota -t”重新設置,時間單位可以為天、小時、分鐘、秒)超過其限制的額度,在不超出硬限制的范圍內可以繼續使用空間,系統會發出警告(警告信息設置文件為“/etc/warnquota.conf”),但如果用戶達到時間期限仍未釋放空間到限制的額度下,系統將不再允許該用戶使用更多的空間。
- 硬限制:一個用戶可擁有的磁盤空間或文件的絕對數量,絕對不允許超過這個限制。
明白了上面的基本概念,我們就可以配置磁盤配額了。設置磁盤配額的步驟:
(1)啟動分區配額功能;
(2)生成配額信息文件;
(3)設置用戶和組配額;
(4)啟動磁盤配額服務。
1. 啟動分區配額功能
用管理員身份登錄系統,編輯系統配置文件/etc/fstab中相應分區(以/home分區為例)的設置選項,若開啟用戶配額添加選項“usrquota”,用戶組配額添加選項“grpquota”,中間以逗號隔開。
LABEL=/home /home ext3 defaults,usrquota 1 2
用戶組配額用以限定一組用戶共計可以使用的空間數,一般應用較少,本例只啟動用戶配額。
分區配額功能生效需要重新啟動系統,或者簡單一點,重新掛載此分區,讓其新加參數生效:
# mount -o remount /home
2. 生成配額信息文件
檢測分區中當前用戶空間使用情況,并生成保存配額信息的數據庫文件:
# quotacheck -F vfsv0 -uv /home (生成符合系統要求的 aquota.usr)
# quotacheck -g /home (生成符合系統要求的 aquota.group)
選項“-F vfsv0”指定磁盤配額功能實現的軟件版本,當前流行的Linux版本基本都為Quota 2.0 ,可以使用命令“man quotacheck”查看到此信息,不必像絕大多數的文章和書籍資料中手工“touch”創建。
選項“-u”指定生成用戶配額信息文件“aquota.user”(Quota 1.0為quota.user),如果設置了用戶組配額則添加選項“-g”生成配額信息文件“aquota.group”,選項“-v”表示執行時顯示詳細信息。執行結果中自動報告了分區/home的空間使用情況,并自動生成了配額信息文件“aquota.user”,其權限為600 。
若較老的Linux系統(Quota 1.0)要升級到Quota 2.0 ,可以使用命令“convertquota”將老格式文件“quota.user”和“quota.group”轉換為新格式“aquota.user”和“aquota.group”。
3. 設置用戶和組配額
使用edquota命令為每個用戶設置磁盤配額,如下例為用戶Sam設置配額:
# edquota Sam
系統會調用Vim/Vi生成一臨時文件,編輯方法與vi完全相同,以ZZ或:wq命令退出。在此文件中可對用戶Sam配額信息進行編輯,默認文件內容如下:
Disk quotas for user Sam (uid 500):
Filesystem blocks soft hard inodes soft hard
/dev/hda3 5 0 0 5 0 0
其中“Filesystem”字段表明使用磁盤配額的分區對應的設備名稱,“blocks”和“inodes”分別表明了用戶當前已經使用的磁盤空間(以KB為單位)和建立的文件數(此限制一般較少應用),“soft”和“hard”即為前文提及的軟限制和硬限制(大多數應用不設置軟限制)。
編輯此文件,把軟、硬限制設置到合適的數值,保存退出,可以看到“aquota.user”文件的大小改變,說明用戶的配額已經儲存。設置組配額可以使用命令“edquota -g 組名”。
設置大量用戶的磁盤配額,若分配給用戶的配額相同,可以使用命令edquota的“-p”選項在用戶之間復制配額設置,可用下面的命令給這些用戶賦予與protuser相同的限額:
# edquota [-u] -p protuser user1 user2 user3
# edquota -g -p protgroup group1 group2 group3
例如將用戶Sam的配額信息復制給Helen和Jack:
# edquota -p Sam Helen Jack
這樣可將配額模板用戶設置復制給任意多用戶,或可利用此命令編寫shell腳本批量復制。此外,也可以使用命令“setquota”來設置磁盤配額,如:
# setquota Mary 0 20480 0 0 /home
這樣可以限定用戶Mary可以在/home分區使用空間20MB ,具體用法在此不在贅述。
在第三步中設置用戶Sam配額為10MB ,如下:
Disk quotas for user Sam (uid 500):
Filesystem blocks soft hard inodes soft hard
/dev/hda3 5 0 10240 5 0 0
切換到用戶Sam ,做磁盤爆滿測試:
# dd if=/dev/zero of=quotatest bs=1024k count=10240000
hda3: write failed, user block limit reached.
dd: writing `quotatest': Disk quota exceeded
1+0 records in
0+0 records out
1036288 bytes (1.0 MB) copied, 0.0174559 seconds, 59.4 MB/s
用戶Sam達到限定的磁盤空間,出現了上面的提示信息,他將不能再創建文件,有效的控制了用戶磁盤空間的使用。
4. 啟動磁盤配額服務
使用命令quotaon用來激活配額系統并允許配額檢查:
# quotaon /home
若關閉配額服務則使用命令“quotaoff”。分區的磁盤配額功能設置后,每次開機會自動加載并啟動服務,務須另行在啟動腳本中設置。
5. 其他功能設置:設定soft quota和hard quota之間的時間
# edquota -t
出現一個 vi 窗口:
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/hda7 7days 7days
修改成自己所需要的,并保存退出就設置這個時間啦。在這之后可能需要重新啟動,以使磁盤限額生效。
6. 檢查磁盤空間限制的一致性
系統會自動每次重新啟動時,在檢查硬盤后進行( /etc/rc.sysinit ),無須親自進行。假若分區已經以“讀寫”方式掛上時要小心,例如:
# quotacheck /home
quotacheck: Quota for users is enabled on mountpoint /home so quotacheck might damage the file.
Please turn quotas off or use -f to force checking.
這時, 由于某種需要,或者在某種情況,“不得不”運行這個命令 :
# quotacheck -mf [-u] /dev/hda7
# quotacheck -mf -g /dev/hda7
參數 -m[M] 意思是:強迫在“讀、寫”模式下檢查硬盤的 quota (有一定的“正在寫”的數據丟失可能,應確保沒有進程在寫這個分區。建議在單用戶模式下進行。
例如:(在平時檢查)
# quotacheck /var/spool/ -f
quotacheck: Cannot remount filesystem mounted on /var/spool read-only so counted values might not be right.
Please stop all programs writing to filesystem or use -m flag to force checking.
# quotacheck /var/spool/ -m
quotacheck: Quota for users is enabled on mountpoint /var/spool so quotacheck might damage the file.
Please turn quotas off or use -f to force checking.
7. 取消磁盤空間和i節點數目的限制
# quotaoff /home (取消磁盤空間限制。)
# quotaon /home (現在啟動磁盤空間限制。)
# quotaon /home (如果已經啟動磁盤空間限制,會出現以下錯誤:)
quotaon: using /home/aquota.group on /dev/hda7: Device or resource busy
quotaon: using /home/aquota.user on /dev/hda7: Device or resource busy
8. 查看磁盤配額
用戶查看自己當前的配額信息,可使用命令“quota”:
# quota
Disk quotas for user Sam (uid 500):
Filesystem blocks quota limit grace files quota limit grace
/dev/hda3 1022 0 1024 6 0 0
其中“quota”字段為軟限制,“limit”字段為硬限制,“grace”字段為軟限制達到后寬限期(前文“edquota -t”設定的時間)。
若管理員查看各個用戶的磁盤配額使用情況,可以使用命令“repquota”:
# repquota /home
*** Report for user quotas on device /dev/hda3
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
-----------------------------------------------------------------
root -- 10545 0 0 4 0 0
sam -- 1024 0 1024 8 0 0
helen -- 5 0 10240 5 0 0
從結果中可以方便的查看到用戶的配額使用情況。如果想獲得其他更多信息還可以執行命令“quotastats”,詳見幫助。
inode與block使用說明
磁盤配額限制空間使用的方法有兩種,即分別對inode和block進行限制。磁盤配額可以限定用戶在分區中使用的空間大小(blocks),也可以限定用戶可以在分區中最多創建的文件數(inodes),需要注意的是,只要用戶所創建的文件超過他可以使用的inode數額,即使這些文件是空的,他再次創建文件的行為也將被限制。
此處說明一下inode的概念。在Linux中創建一個文件,系統就為該文件分配一個惟一的inode ,文件的inode用于訪問文件的屬性。也就是說,Linux系統中每個文件都要對應一個inode,通俗點說Linux內核不認識字母,所以用戶要有UID、用戶組要有GID、進程要有PID……,文件要有inode ,一旦inode丟失文件將無法被訪問。
使用命令“ls -i”可以查看到文件的inode號。
# ls -i
163523 inittab 163524 services 163525 a b
Linux系統中的硬鏈接文件與原文件大小一樣,且可同步更新,因為硬鏈接是一個指向文件的指針,它與原文件的inode相同。
如果系統中有名稱特殊的文件,如“a b”,使用“rm”命令無法對其操作(因“rm”會判斷為要刪除兩個文件“a”和“b”),此時可以利用inode的原理,假設“a b”的inode為163535,查看詳細信息執行:
# find . -inum 163535 -exec ls -l {} \;
-rw-r--r-- 1 root root 0 Nov 27 15:21 ./a b
刪除此文件執行:
# find . -inum 163535 -exec rm {} \;
選項“-inum”即為查找文件的inode ,選項“-exec”為find命令的連接符。
另外,在部署磁盤配額前,要考慮哪些分區需要設置。一般而言,保存用戶宿主目錄的分區(一般為/home)一定要設置磁盤配額,公共存儲用戶數據的分區要設置磁盤配額(如公司的網絡備份應用服務器)。
磁盤爆滿測試
一個沒有設置磁盤配額的Linux系統中,使用某一普通用戶登錄,執行命令:
# dd if=/dev/zero of=quotatest bs=1024k count=10240000
命令將生成一個固定大小的文件。其中“if”表示輸入,偽設備/dev/zero不斷生成字符串“0”,初始化文件;“of”表示輸出,此例為在用戶當前 目錄下生成文件“quotatest”;“bs”為“block size”指定數據塊大小,單位設定為“1024k”即1MB;“count”為總計生成的文件(“quotatest”)大小,若“bs”為1MB,則 “10240000”為10000GB。
大多數服務器磁盤空間沒有這么大,上面的命令沒執行完空間就耗光了。筆者用一臺一般配置的筆記本電腦測試,寫入速度約為60MB/s,一分鐘就可以寫 3GB,如果您的服務器是100GB的,半個小時后磁盤空間就會達到100%,此時用戶無法創建文件、管理員無法添加用戶、系統無法寫入日志……甚至系統 重啟后將無法正常啟動,因為磁盤空間爆滿,啟動過程中臨時文件無法生成。
如果您真的做了上述的測試,系統無法正常啟動,可以使用Linux安裝光盤引導,在安裝界面輸入“linux rescue”進入修復模式后刪掉文件“quotatest”,即可恢復。
由此可見,若不設置磁盤配額,即使不是黑客,任一普通用戶都可以隨時摧毀我們的系統。
原文鏈接:https://blog.csdn.net/Nana8874/article/details/126064906
- 上一篇:Qt實現不規則窗體
- 下一篇:如何重置CentOS 7的Root密碼?
相關推薦
- 2022-07-08 Python數據分析Pandas?Dataframe排序操作_python
- 2022-04-24 C++的靜態成員變量和靜態成員函數你了解多少_C 語言
- 2023-01-10 Flutter?SystemChrome使用方法詳解_Android
- 2021-12-11 Linux環境下查看日志文件命令詳解_Linux
- 2022-10-17 使用docker部署django的詳細步驟_docker
- 2024-02-28 UNI-APP,動態設置view的背景圖片
- 2023-01-28 python元組的可變與不可變問題_python
- 2024-02-27 credentials to a set of origins, list them explici
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支