2015年3月26日 星期四

quota

vim /etc/fstab
 

前言

簡單來說我們作 Disk Quota 的用意,就是為了避免因為使用者無止盡的放置檔案,而系統的空間規劃又不良時將造成系統硬碟空間被吃光,此時我們便可利用 Disk Quota 功能來強制管理硬碟空間。
Quota 管理使用對象
  • UserQuota:針對 使用者 硬碟空間做限制。
  • GroupQuoa:針對 群組 硬碟空間做限制。
Quota 管理資料類別
  • 磁碟空間 (kbytes):針對 硬碟空間 作管理 (單位為 KB,所以要設定 10 MB = 10240)
  • 檔案數量 (inode):針對 檔案數量 作管理
Quota 管理配額方式
  • 非強制性限制 (Soft limit): 超過指定大小但未超過 Hard limit 時系統會警告,直到 超過警示的時間 (grace time,預設七天) 未降低使用量便會禁止寫入資料。
  • 強制限制 (Hard limit): 超過這個大小,系統會馬上 禁止 寫入資料。

設定 Disk Quotas 的步驟

  1. 修改「/etc/fstab」針對要設定 Quota 的掛載點修改內容 (加在 default, 之後),要啟用使用者 Quota 則加上「usrquota」,要啟用群組 Quota 則加上「grpquota」。
  2. 將檔案系統重新掛載以便套用生效,可以執行指令「mount -o remount <掛載點>」來重新掛載,掛載完成後用 mount 指令確定是否正確載入。
  3. 建立 Quota Database 及 Disk Usage Table 檔案,執行指令「quotacheck -cugm <掛載點>」 之後執行指令「quotaon -vug <掛載點>」來啟用 Quota 機制。
  4. 修改及建立 Disk Quota 限制 「Soft Limit、Hard Limit、寬限時間」。

步驟 1、修改 /etc/fstab

針對要設定 Quota 的掛載點內容進行修改,例如 /home 掛載點要啟用 Disk Quota for User 機制,則修改內容是在該掛載點的「defaults」後面加上「usrquota」(注意不是 us"e"rquota),中間使用逗號進行分隔。
 #vi /etc/fstab
  /dev/sdb1     /home   ext4  defaults   1 2            //修改前
  /dev/sdb1     /home   ext4  defaults,usrquota   1 2   //修改後

步驟 2、載入 Quota 設定

修改 /etc/fstab 檔案完成後,利用指令「mount -o remount /home」重新掛載 /home 掛載點,可以利用 mount 指令來觀察重新掛載檔案系統前後的變化。
 #mount | grep /home
  /dev/sdb1 on /home type ext4 (rw)
 #mount -o remount /home
 #mount | grep vg
  /dev/sdb1 on /home type ext4 (rw) (rw,usrquota)

步驟 3、建立 Quota 機制相關檔案

重 新掛載檔案系統完成後 (目前仍未真正支援 Quota 功能),必須先使用「quotacheck -cugm /home」指令來建立 Quota 機制的 Database 及 Disk Usage Table 檔案,以記錄 Quota 機制磁碟使用情況表,相關參數說明如下:
  • -c: 為檔案系統建立 Quota 檔案,若是使用者 Quota 將於該掛載點建立「aquota.user」檔案,而群組 Quota 則建立「aquota.group」檔案。
  • -u: 建立 User Quota Check 檔案
  • -g: 建立 Group Quota Check 檔案
  • -m: 在該掛載點於掛載的情況下 (資料有讀寫行為時),重新掛載並套用 Quota 機制
 #quotacheck -cugm /home     //產生 quota db
 #ls
  aquota.user  wei weithenn  //aquota.user 檔案建立完成
接著便可以使用 「quotaon -vug /home」指令真正啟用該掛載點的 Quota 機制,若後續想進行問題除錯時可以使用「quotaooff -vug /home」指令來停用 Quota 機制,執行 quotaon/quotaoff 指令時若想一次載入所有設定 Quota 機制的掛載點都會套用可以使用參數「-a」,下列執行參數說明:
  • -v: verbose 即顯示指令執行後產生的詳細內容
  • -u: 開啟 User Quota 功能
  • g: 開啟 Group Quota 功能
 #quotaon -vug  /home   //只針對 /home 掛載點
  /dev/sdb1 [/home]: user quotas turned on

步驟 4、建立 Quota 限制

使 用指令「edquota <使用者帳號>」或「edquota -g <群組名稱>」來進行 Disk Quota 限制,預設情況下當超過 Soft Limit 設定值時會觸發警告機制 (預設寬限期預設為 7 天),若想改變這個寬限期可以使用指令「edquota -t」進行更改,舉例將 weithenn 使用者帳號中針對硬碟空間作管理 Soft Limit 設為 9MB,而 Hard Limit 則設為 10MB,設定完成後可使用「dd」指令建立指定大小的檔案來測試 Quota 機制是否正確運作,如下操作中可以看到將身份切換為 weithenn 帳號後先建立 5MB 大小的檔案可順利建立,再次建立第二個 5MB 檔案時便出現「Disk quota exceeded」表示 Quota 機制確實限制生效。
 #edquota weithenn                     //進入編輯模式修改
  Disk quotas for user weithenn (uid 500):
   Filesystem   blocks    soft    hard   inodes   soft   hard
   /dev/sdb1       632    9216   10240      158      0      0
 #setquota wei 9216 10240 0 0 /home   //直接指定
 #su - weithenn                       //切換為 weithenn 帳號
 $dd if=/dev/zero of=/home/user/weithenn/file bs=1M count=5
  5+0 records in
  5+0 records out
  5242880 bytes (5.2 MB) copied, 0.0103532 s, 506 MB/s
 $dd if=/dev/zero of=/home/user/weithenn/file1 bs=1M count=5
  dd: writing `/home/user/weithenn/file1': Disk quota exceeded  //Quota 機制生效
  5+0 records in
  4+0 records out
  4595712 bytes (4.6 MB) copied, 0.0108485 s, 424 MB/s
當 Quota 機制生效後,如何快速把某個使用者的 Quota 設定值快速套用給其它使用者帳號,若是某幾個帳號可以使用「edquota -p weithenn chris」指令,將 weithenn 帳號的 Quota 設定套用至 chris 帳號中,若是希望一次套用所有使用者帳號例如 UserID 大於 499 (因為使用者 ID 從 500 開始),可使用如下指令一次套用,因為 nfsnobody 的 UserID 為 65534 所以進行排除的動作,之後則是使用「repquota -a」來查看所有使用者帳號的 Quota 限制資訊及使用情況。
 #edquota -p weithenn chris
 #edquota -p weithenn `awk -F: '$3 > 499 {print $1}' /etc/passwd | grep -v nfsnobody`
 #repquota -a
  *** Report for user quotas on device /dev/mapper/vg_centos6-lv_root
  Block grace time: 7days; Inode grace time: 7days
                          Block limits                File limits
  User            used    soft    hard  grace    used  soft  hard  grace
  ----------------------------------------------------------------------
  ...略...
  weithenn  +-   10240    9216   10240  6days     158     0     0
  wei       --      32    9216   10240              9     0     0
  chris     --      32    9216   10240              9     0     0


########################
touch /home/aquota.group
touch /home/aquota.user
touch /var/spool/mail/aquota.group
touch /var/spool/mail/aquota.user

#########################

quotaon -avug
quotacheck -avugmf 

執行數次才能啟動
#########################
edquota -u cyl62
edquota -p cyl62 *
##################

注意:quota 只能針對 partition 來設定,而不能針對某個資料夾來做控管,通常我們將使用者建在 /home (未更改預設使用者家目錄的狀況下),所以針對 /home 來做 quota 控管是必須的,當然前提是作業系統在安裝的時候,有為 home 獨立分割一個磁區
vi /etc/fstab
/dev/VolGroup00/LogVol02 /home ext3 defaults,usrquota 1 2
#在要啟動 quota 功能的磁區內加入紅字部分,這裡是以 /home 為例
#您的畫面,可能和這裡的不同,沒有關係
mount -o remount /home
quotacheck -avmcu
#沒問題的話,在 /home 內會自動產生 aquota.user 檔案
quotaon /home
編輯使用者 quota(這裡是以 s940001 這個帳號為例)
edquota s940001
Disk quotas for user s940001 (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/VolGroup00-LogVol02 5 45000 50000 6 0 0
quota s940001
repquota -a
註:edquota 預設會啟動 vi
複製 quota:
先進入帳號所在的目錄,
cd /home/s94
edquota -p s940001 *
repquota -a
使用 Webmin 設定:系統 / 磁碟配額

讓使用者尚未收的 mail 也受 quota 的管制:

注意:有獨立分割出 home 的人,才可使用這個方法
mkdir /home/mail
chown root.mail /home/mail
chmod 775 /home/mail
cp -rfp /var/spool/mail/* /home/mail
mv /var/spool/mail /var/spool/mail.bak
ln -s /home/mail /var/spool/mail

超過磁碟配額限制使用者名單

script 原始來源:http://home.csjh.tcc.edu.tw/home_exceed.htm
cd
wget http://apt.nc.hcc.edu.tw/web/student_server_centos4/src/quota_exceed.zip
unzip -d /root quota_exceed.zip
rm -rf quota_exceed.zip
chmod 755 -R /root/quota_exceed
修改:
vi /root/quota_exceed/home_create
#!/bin/bash
# Create Quota_exceed report for /home partiotn (/dev/sdb2)
cd /root/quota_exceed
/usr/sbin/repquota /home | grep + | sort > home_exceed
cat r1 > /var/www/html/home_exceed.htm
export LANG=zh_TW.Big5
#在這位置加入這行,這樣出來的網頁才不會有亂碼
date +%F%t%A%t%T >> /var/www/html/home_exceed.htm
cat r2 >> /var/www/html/home_exceed.htm
awk -f r3.awk home_exceed >> /var/www/html/home_exceed.htm
cat r4 >> /var/www/html/home_exceed.htm
/root/quota_exceed/home_create
echo '0 */6 * * * root /root/quota_exceed/home_create > /dev/null 2>&1' >> /etc/crontab
測試:http://IP/home_exceed.htm
/etc/passwd、/etc/shadow、/etc/group、/etc/skel 介紹
symbolic link 介紹:ln -s 真 假

沒有留言:

張貼留言