網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
不管磁盤空間有多么大,磁盤空間不夠使用似乎是一個(gè)永遠(yuǎn)的事實(shí)。而且Linux系統(tǒng)在默認(rèn)情況下,并不限制每個(gè)用戶使用磁盤空間的大小,如果某個(gè)用戶疏忽或惡意將磁盤占滿,將導(dǎo)致系統(tǒng)無(wú)法進(jìn)行寫(xiě)操作甚至崩潰。因此Linux提供了限制用戶磁盤空間的手段,以便促使每個(gè)用戶合理有效地使用分配給他的空間。
設(shè)置用戶和組配額的分配量對(duì)磁盤配額的限制一般是從一個(gè)用戶占用磁盤大小和所有文件的數(shù)量?jī)蓚€(gè)方面來(lái)進(jìn)行的。設(shè)置磁盤配額時(shí),“某用戶在系統(tǒng)中共計(jì)只能使用50MB磁盤空間”,這樣的限制要求是無(wú)法實(shí)現(xiàn)的;只能設(shè)置“某用戶在/home分區(qū)能使用30MB,在/backup分區(qū)能使用20MB”。磁盤配額的設(shè)置單位是分區(qū),針對(duì)分區(qū)啟用配額限制功能后才可以對(duì)用戶設(shè)置,而不理會(huì)用戶文件放在該文件系統(tǒng)中的哪個(gè)目錄中,其他系統(tǒng),如Unix、Windows,原理與Linux相同。在具體操作之前,我們先了解一下磁盤配額的兩個(gè)基本概念:軟限制和硬限制。
- 軟限制:一個(gè)用戶在一定時(shí)間范圍內(nèi)(默認(rèn)為一周,可以使用命令“edquota -t”重新設(shè)置,時(shí)間單位可以為天、小時(shí)、分鐘、秒)超過(guò)其限制的額度,在不超出硬限制的范圍內(nèi)可以繼續(xù)使用空間,系統(tǒng)會(huì)發(fā)出警告(警告信息設(shè)置文件為“/etc/warnquota.conf”),但如果用戶達(dá)到時(shí)間期限仍未釋放空間到限制的額度下,系統(tǒng)將不再允許該用戶使用更多的空間。
- 硬限制:一個(gè)用戶可擁有的磁盤空間或文件的絕對(duì)數(shù)量,絕對(duì)不允許超過(guò)這個(gè)限制。
明白了上面的基本概念,我們就可以配置磁盤配額了。設(shè)置磁盤配額的步驟:
(1)啟動(dòng)分區(qū)配額功能;
(2)生成配額信息文件;
(3)設(shè)置用戶和組配額;
(4)啟動(dòng)磁盤配額服務(wù)。
1. 啟動(dòng)分區(qū)配額功能
用管理員身份登錄系統(tǒng),編輯系統(tǒng)配置文件/etc/fstab中相應(yīng)分區(qū)(以/home分區(qū)為例)的設(shè)置選項(xiàng),若開(kāi)啟用戶配額添加選項(xiàng)“usrquota”,用戶組配額添加選項(xiàng)“grpquota”,中間以逗號(hào)隔開(kāi)。
LABEL=/home /home ext3 defaults,usrquota 1 2
用戶組配額用以限定一組用戶共計(jì)可以使用的空間數(shù),一般應(yīng)用較少,本例只啟動(dòng)用戶配額。
分區(qū)配額功能生效需要重新啟動(dòng)系統(tǒng),或者簡(jiǎn)單一點(diǎn),重新掛載此分區(qū),讓其新加參數(shù)生效:
# mount -o remount /home
2. 生成配額信息文件
檢測(cè)分區(qū)中當(dāng)前用戶空間使用情況,并生成保存配額信息的數(shù)據(jù)庫(kù)文件:
# quotacheck -F vfsv0 -uv /home (生成符合系統(tǒng)要求的 aquota.usr)
# quotacheck -g /home (生成符合系統(tǒng)要求的 aquota.group)
選項(xiàng)“-F vfsv0”指定磁盤配額功能實(shí)現(xiàn)的軟件版本,當(dāng)前流行的Linux版本基本都為Quota 2.0 ,可以使用命令“man quotacheck”查看到此信息,不必像絕大多數(shù)的文章和書(shū)籍資料中手工“touch”創(chuàng)建。
選項(xiàng)“-u”指定生成用戶配額信息文件“aquota.user”(Quota 1.0為quota.user),如果設(shè)置了用戶組配額則添加選項(xiàng)“-g”生成配額信息文件“aquota.group”,選項(xiàng)“-v”表示執(zhí)行時(shí)顯示詳細(xì)信息。執(zhí)行結(jié)果中自動(dòng)報(bào)告了分區(qū)/home的空間使用情況,并自動(dòng)生成了配額信息文件“aquota.user”,其權(quán)限為600 。
若較老的Linux系統(tǒng)(Quota 1.0)要升級(jí)到Quota 2.0 ,可以使用命令“convertquota”將老格式文件“quota.user”和“quota.group”轉(zhuǎn)換為新格式“aquota.user”和“aquota.group”。
3. 設(shè)置用戶和組配額
使用edquota命令為每個(gè)用戶設(shè)置磁盤配額,如下例為用戶Sam設(shè)置配額:
# edquota Sam
系統(tǒng)會(huì)調(diào)用Vim/Vi生成一臨時(shí)文件,編輯方法與vi完全相同,以ZZ或:wq命令退出。在此文件中可對(duì)用戶Sam配額信息進(jìn)行編輯,默認(rèn)文件內(nèi)容如下:
Disk quotas for user Sam (uid 500):
Filesystem blocks soft hard inodes soft hard
/dev/hda3 5 0 0 5 0 0
其中“Filesystem”字段表明使用磁盤配額的分區(qū)對(duì)應(yīng)的設(shè)備名稱,“blocks”和“inodes”分別表明了用戶當(dāng)前已經(jīng)使用的磁盤空間(以KB為單位)和建立的文件數(shù)(此限制一般較少應(yīng)用),“soft”和“hard”即為前文提及的軟限制和硬限制(大多數(shù)應(yīng)用不設(shè)置軟限制)。
編輯此文件,把軟、硬限制設(shè)置到合適的數(shù)值,保存退出,可以看到“aquota.user”文件的大小改變,說(shuō)明用戶的配額已經(jīng)儲(chǔ)存。設(shè)置組配額可以使用命令“edquota -g 組名”。
設(shè)置大量用戶的磁盤配額,若分配給用戶的配額相同,可以使用命令edquota的“-p”選項(xiàng)在用戶之間復(fù)制配額設(shè)置,可用下面的命令給這些用戶賦予與protuser相同的限額:
# edquota [-u] -p protuser user1 user2 user3
# edquota -g -p protgroup group1 group2 group3
例如將用戶Sam的配額信息復(fù)制給Helen和Jack:
# edquota -p Sam Helen Jack
這樣可將配額模板用戶設(shè)置復(fù)制給任意多用戶,或可利用此命令編寫(xiě)shell腳本批量復(fù)制。此外,也可以使用命令“setquota”來(lái)設(shè)置磁盤配額,如:
# setquota Mary 0 20480 0 0 /home
這樣可以限定用戶Mary可以在/home分區(qū)使用空間20MB ,具體用法在此不在贅述。
在第三步中設(shè)置用戶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 ,做磁盤爆滿測(cè)試:
# 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達(dá)到限定的磁盤空間,出現(xiàn)了上面的提示信息,他將不能再創(chuàng)建文件,有效的控制了用戶磁盤空間的使用。
4. 啟動(dòng)磁盤配額服務(wù)
使用命令quotaon用來(lái)激活配額系統(tǒng)并允許配額檢查:
# quotaon /home
若關(guān)閉配額服務(wù)則使用命令“quotaoff”。分區(qū)的磁盤配額功能設(shè)置后,每次開(kāi)機(jī)會(huì)自動(dòng)加載并啟動(dòng)服務(wù),務(wù)須另行在啟動(dòng)腳本中設(shè)置。
5. 其他功能設(shè)置:設(shè)定soft quota和hard quota之間的時(shí)間
# edquota -t
出現(xiàn)一個(gè) 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
修改成自己所需要的,并保存退出就設(shè)置這個(gè)時(shí)間啦。在這之后可能需要重新啟動(dòng),以使磁盤限額生效。
6. 檢查磁盤空間限制的一致性
系統(tǒng)會(huì)自動(dòng)每次重新啟動(dòng)時(shí),在檢查硬盤后進(jìn)行( /etc/rc.sysinit ),無(wú)須親自進(jìn)行。假若分區(qū)已經(jīng)以“讀寫(xiě)”方式掛上時(shí)要小心,例如:
# 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.
這時(shí), 由于某種需要,或者在某種情況,“不得不”運(yùn)行這個(gè)命令 :
# quotacheck -mf [-u] /dev/hda7
# quotacheck -mf -g /dev/hda7
參數(shù) -m[M] 意思是:強(qiáng)迫在“讀、寫(xiě)”模式下檢查硬盤的 quota (有一定的“正在寫(xiě)”的數(shù)據(jù)丟失可能,應(yīng)確保沒(méi)有進(jìn)程在寫(xiě)這個(gè)分區(qū)。建議在單用戶模式下進(jìn)行。
例如:(在平時(shí)檢查)
# 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節(jié)點(diǎn)數(shù)目的限制
# quotaoff /home (取消磁盤空間限制。)
# quotaon /home (現(xiàn)在啟動(dòng)磁盤空間限制。)
# quotaon /home (如果已經(jīng)啟動(dòng)磁盤空間限制,會(huì)出現(xiàn)以下錯(cuò)誤:)
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. 查看磁盤配額
用戶查看自己當(dāng)前的配額信息,可使用命令“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”字段為軟限制,“l(fā)imit”字段為硬限制,“grace”字段為軟限制達(dá)到后寬限期(前文“edquota -t”設(shè)定的時(shí)間)。
若管理員查看各個(gè)用戶的磁盤配額使用情況,可以使用命令“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
從結(jié)果中可以方便的查看到用戶的配額使用情況。如果想獲得其他更多信息還可以執(zhí)行命令“quotastats”,詳見(jiàn)幫助。
inode與block使用說(shuō)明
磁盤配額限制空間使用的方法有兩種,即分別對(duì)inode和block進(jìn)行限制。磁盤配額可以限定用戶在分區(qū)中使用的空間大小(blocks),也可以限定用戶可以在分區(qū)中最多創(chuàng)建的文件數(shù)(inodes),需要注意的是,只要用戶所創(chuàng)建的文件超過(guò)他可以使用的inode數(shù)額,即使這些文件是空的,他再次創(chuàng)建文件的行為也將被限制。
此處說(shuō)明一下inode的概念。在Linux中創(chuàng)建一個(gè)文件,系統(tǒng)就為該文件分配一個(gè)惟一的inode ,文件的inode用于訪問(wèn)文件的屬性。也就是說(shuō),Linux系統(tǒng)中每個(gè)文件都要對(duì)應(yīng)一個(gè)inode,通俗點(diǎn)說(shuō)Linux內(nèi)核不認(rèn)識(shí)字母,所以用戶要有UID、用戶組要有GID、進(jìn)程要有PID……,文件要有inode ,一旦inode丟失文件將無(wú)法被訪問(wèn)。
使用命令“l(fā)s -i”可以查看到文件的inode號(hào)。
# ls -i
163523 inittab 163524 services 163525 a b
Linux系統(tǒng)中的硬鏈接文件與原文件大小一樣,且可同步更新,因?yàn)橛叉溄邮且粋€(gè)指向文件的指針,它與原文件的inode相同。
如果系統(tǒng)中有名稱特殊的文件,如“a b”,使用“rm”命令無(wú)法對(duì)其操作(因“rm”會(huì)判斷為要?jiǎng)h除兩個(gè)文件“a”和“b”),此時(shí)可以利用inode的原理,假設(shè)“a b”的inode為163535,查看詳細(xì)信息執(zhí)行:
# find . -inum 163535 -exec ls -l {} \;
-rw-r--r-- 1 root root 0 Nov 27 15:21 ./a b
刪除此文件執(zhí)行:
# find . -inum 163535 -exec rm {} \;
選項(xiàng)“-inum”即為查找文件的inode ,選項(xiàng)“-exec”為find命令的連接符。
另外,在部署磁盤配額前,要考慮哪些分區(qū)需要設(shè)置。一般而言,保存用戶宿主目錄的分區(qū)(一般為/home)一定要設(shè)置磁盤配額,公共存儲(chǔ)用戶數(shù)據(jù)的分區(qū)要設(shè)置磁盤配額(如公司的網(wǎng)絡(luò)備份應(yīng)用服務(wù)器)。
磁盤爆滿測(cè)試
一個(gè)沒(méi)有設(shè)置磁盤配額的Linux系統(tǒng)中,使用某一普通用戶登錄,執(zhí)行命令:
# dd if=/dev/zero of=quotatest bs=1024k count=10240000
命令將生成一個(gè)固定大小的文件。其中“if”表示輸入,偽設(shè)備/dev/zero不斷生成字符串“0”,初始化文件;“of”表示輸出,此例為在用戶當(dāng)前 目錄下生成文件“quotatest”;“bs”為“block size”指定數(shù)據(jù)塊大小,單位設(shè)定為“1024k”即1MB;“count”為總計(jì)生成的文件(“quotatest”)大小,若“bs”為1MB,則 “10240000”為10000GB。
大多數(shù)服務(wù)器磁盤空間沒(méi)有這么大,上面的命令沒(méi)執(zhí)行完空間就耗光了。筆者用一臺(tái)一般配置的筆記本電腦測(cè)試,寫(xiě)入速度約為60MB/s,一分鐘就可以寫(xiě) 3GB,如果您的服務(wù)器是100GB的,半個(gè)小時(shí)后磁盤空間就會(huì)達(dá)到100%,此時(shí)用戶無(wú)法創(chuàng)建文件、管理員無(wú)法添加用戶、系統(tǒng)無(wú)法寫(xiě)入日志……甚至系統(tǒng) 重啟后將無(wú)法正常啟動(dòng),因?yàn)榇疟P空間爆滿,啟動(dòng)過(guò)程中臨時(shí)文件無(wú)法生成。
如果您真的做了上述的測(cè)試,系統(tǒng)無(wú)法正常啟動(dòng),可以使用Linux安裝光盤引導(dǎo),在安裝界面輸入“l(fā)inux rescue”進(jìn)入修復(fù)模式后刪掉文件“quotatest”,即可恢復(fù)。
由此可見(jiàn),若不設(shè)置磁盤配額,即使不是黑客,任一普通用戶都可以隨時(shí)摧毀我們的系統(tǒng)。
原文鏈接:https://blog.csdn.net/Nana8874/article/details/126064906
相關(guān)推薦
- 2022-12-22 Nginx配置之main?events塊使用示例詳解_nginx
- 2022-06-26 Git配置.gitignore文件忽略被指定的文件上傳_相關(guān)技巧
- 2023-04-03 iOS數(shù)據(jù)持久化KeyChain數(shù)據(jù)操作詳解_IOS
- 2022-03-27 centos7安裝mongo數(shù)據(jù)庫(kù)的方法(mongo4.2.8)_MongoDB
- 2022-05-16 Qt數(shù)據(jù)庫(kù)應(yīng)用之通用數(shù)據(jù)庫(kù)同步_C 語(yǔ)言
- 2022-07-31 一文理解Goland協(xié)程調(diào)度器scheduler的實(shí)現(xiàn)_Golang
- 2021-12-09 C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)與算法之鏈表(一)_C 語(yǔ)言
- 2022-04-14 Python中五種列表拷貝的方法_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支