首頁 > 軟體

磁碟配額(Quota)的應用與實踐

2020-06-16 17:02:08

1》什麼是Quota

   在Linux中,由於是多使用者,多工的環境,所以會有多使用者共同使用一個硬碟空間的情況發生,如果其中有少數幾個使用者大量佔用掉了硬碟空間的話,那肯定影響其他使用者的使 用許可權,因此管理員應該適當限制硬碟的空間給使用者,以妥善分配系統資源,使磁碟的容量使用較為公平;舉例來說,我們使用者的預設主資料夾都是在/home下面,如果/home是個 獨立的分割區,假設這個分割區有10G,而/home下面共有30個賬戶,也就是說,每個使用者平均應該會有333MB的空間才對,偏偏有個使用者在他的主資料夾下面下了好多電影,佔用了 8G的空間,這樣會造成其他正常使用者的不便,如果想要讓磁碟的容量公平分配,這個時候就得要靠quota的幫忙;

    1>Quota的一般用途:quota比較常使用的幾個情況是:

       針對WWW Server:列如每個人的網頁空間的容量限制;

        針對MAIL Server: 例如每個人的郵件空間限制;

        針對FILE Server:列如每個人最大的可用網路硬碟空間(教學環境中最常見);

      上面講的是針對網路服務的設計,如果是針對Linux系統主機上面的設定,用途有下面這些:

         1)限制某一使用者組所能使用的最大磁碟配額(使用使用者組限制);

          2)限制某一使用者所能使用的最大磁碟配額(使用使用者限制);

         3)以Link的方式來使郵件可以作為限制的配額(更改/var/spool/mail這個路徑);

    2>Quota的使用限制:雖然quota很好用,但是使用上還是有些限制要先了解的;

          1)僅能針對整個檔案系統:

              quota實際在執行的時候,是針對整個檔案系統進行限制的,列如:如果你的/dev/sda5是掛載在/home下面,那麼在/home下面的所有目錄都會受到限 制;        

          2)核心必須支援quota:

               Linux核心必須支援quota這個功能才行,如果你是使用CentOS 5.x的預設核心,那你的系統已經預設支援quota這個功能,如果你是自行編譯核心 的,那麼請特別留意你是否已經真的開啟了quota這個功能;

          3)Quota的紀錄檔檔案:

               目前新版的Linux作業系統使用的是Kernel 2.6.xx的核心版本,這個核心版本支援新的quota模組,使用的預設檔案(aquota.user,apuota.group)將 不同於舊版本的quota.user,quota.group,而由舊版本的quota可以通過convertquota這個程式來轉換;

          4)只對一般身份使用者有效:

                並不是所有在Linux上面的賬號都可以設定quota,列如root就不能設定quota,因為整個系統所有的資料幾乎都是它的,所以你不能針對某個目錄 來進行quota的設計,但你可以針對某個檔案系統來設定;

    3>Quota的規範設定選項:quota針對整個檔案系統的限制專案主要分為下面幾個部分:

          1)容量限制或檔案數量限制:

               檔案系統主要規劃為存放屬性的inode與實際檔案資料的block塊,Quota既然是管理檔案系統,所以當然可以管理inode或block,這兩個管理的功能 為:

                 限制inode用量:管理使用者可以新建的檔案數量;

                 限制block用量:管理使用者磁碟容量的限制,較常見的為這種方式;

          2)soft/hard:

               既然是規範,當然就有限制值,不管是inode/block,限制值都有兩個,分別是soft與hard;通常hard限制值要比soft還要高,舉例來說,若限制專案 為block,可以限制hard為500MB,而soft為400MB,這兩個限制值的意義為:  

                hard:表示使用者的用量絕對不會超過這個限制值,以上面的設定為例,使用者所能使用的磁碟容量絕對不會超過500MB,若超過這個值則系統會鎖住 該使用者的磁碟使用權;

                soft:表示使用者在低於soft的限值時,可以正常使用磁碟,但若超過soft且低於hard的值時,每次使用者登入系統時,系統會主動發出磁碟即將爆滿的 警告資訊,且會給予一個寬限時間(gracetime),不過,若使用者在寬限時間倒數期間就將容量再次低於soft限值下,則寬限時間會停止;

          3)會倒計時的寬限時間(grace time)

                這個寬限時間只有在使用者的磁碟用量介於soft到hard之間時,才會出現且會倒數的一個時間,由於達到hard限值時,使用者的磁碟使用權可能會被鎖 住,為了擔心使用者沒有注意到這個磁碟配額的問題,因此設計了soft,當你的磁碟用量即將到達hard且超過soft時,系統會給予警告,但也會給一段時間 讓使用者自行管理磁碟,一般默 認的寬限時間為7天,如果7天內你都不進行任何磁碟管理,那麼soft限制值會即刻替代hard限值來作為quota的限值;

2》Quota範例:

    1>案例描述及建立使用者:

      目的與賬號:現在我們讓五個人為一組,這五個人的賬戶分別是myquota1,myquota2,myquota3,myquota4,myquota5,這五個使用者的密碼都是password,且這五個使用者所 屬的初始使用者組都是myquotagrp,其他的賬號屬性則使用預設值;

      賬號的磁碟容量限制值:我們想讓這五個使用者都能夠取得300MB的磁碟使用量(hard),檔案數量則不予限制,此外,只要容量使用率超過250MB(soft),就予以警告 (soft);

      使用者組的限額:由於我的系統裡面還有其他使用者存在,因此我僅承認myquotagrp這個使用者組最多僅能使用1GB的容量,這也就是說,如果其中三個使用者都用了280MB的 容量,那麼其他兩人最多只能使用160MB的磁碟容量,這就是使用者組與使用者同時設定時會產生的結果;

      寬限時間的限制:最後,我們希望每個使用者在超過soft限制值之後,都還能夠有14天的寬限時間,

         建立使用者:

            

    2>檔案系統支援:

          要使用Quota必須要核心與檔案系統支援才行,我們已經使用了預設支援Quota的核心,那麼接下來就是要啟動檔案系統的支援,不過由於Quota僅針對整個文 件系統來進行規劃,所以我們得先查一下/home是否是個獨立的檔案系統;此外,由於VFAT檔案系統並不支援Linux Quota功能,所以我們必須查詢一下/home的檔案 系統,看看是否是ext2/ext3,這樣才能夠支援quota功能;

          

         1)如果只是想要在這次開機中實驗Quota,那麼可以使用如下的方式來手動加入quota的支援:

               

          2)事實上,當你重新掛載時,系統會同步更新/etc/mtab這個檔案,所以我們必須確定/etc/mtab已經加入usrquota,grpquota的支援到你所想要設定的檔案系統 中,另外也要強呼叫戶與使用者組的quota檔案系統支援引數分別是usrquota和grpquota,千萬不可寫錯了,不過手動掛載的資料在下次重新掛載時就會消失,因 此最好寫入組態檔中,直接修改/etc/fstab;

              

    3>新建Quota組態檔:

          其實Quota是通過分析整個檔案系統中每個使用者(使用者組)擁有的檔案總數與總容量,再將這些資料記錄在該檔案系統的最頂層目錄,然後在該組態檔中再 使用每個賬號(或使用者組)的限制值去規定磁碟使用量的,所以構建這個Quota組態檔就非常重要了,掃描有支援Quota引數(usrquota,grpquota)的檔案系統,就 使用quotacheck這個命令,此命令語法如下:

        quotacheck [-avugfM] [/mount_point]

        引數:

             -a: 掃描所有在/etc/mtab內,含有quota支援的檔案系統,加上此引數後,/mount_point可以不必寫,因為掃描所有的檔案系統了;

             -u:針對使用者掃描檔案與目錄的使用情況,會新建aquota.user;

             -g:針對使用者組掃描檔案與目錄的使用情況,會新建aquota.group;

             -v:顯示掃描過程的資訊;

             -f:強制掃描檔案系統,並寫入新的quota組態檔(危險);

             -M:強制以讀寫的方式掃描檔案系統,只有在特殊情況下才會使用;

                

    4>Quota啟動,關閉與限制值設定

         製作好quota組態檔後,接下來就是要啟動quota了,啟動的方式很簡單,使用quotaon,至於關閉就用quotaoff即可;

      quotaon [-vug] [/mount_point]

      引數:

        -u:針對使用者啟動quota(quota.user);

        -g:針對使用者組啟動quota(quota.group)

        -v:顯示啟動過程的相關資訊;

        -a:根據/etc/mtab內的檔案系統設定啟動有關的quota,若不加-a的話,則後面就需要加上特定的那個檔案系統;

       因為我們需要啟動user/group的quota,所以使用下面的語法:

          

       特殊用法,假如你要啟動/var的quota支援,那麼僅啟動user quota時:

          #quotaon -uv /var

            這個"quotaon -avug"的命令幾乎只在第一次啟動quota時才需要進行,因為下次等你重新啟動系統時,系統的/etc/rc.d/rc.sysinit這個初始化指令碼就會自動的執 行這個命令了,因此你只要在這次範例中進行一次即可,將來都不需要自行啟動quota;  

       quotaoff:關閉quota服務

       quotaoff [-a]

       quotaoff [-ug] [/mount_point]

       引數:

          -a:全部的檔案系統的quota都關閉(根據/etc/mtab);

          -u:僅針對後面接的那個/mount_point關閉user quota;

          -g:僅針對後面接的那個/mount_point關閉group quota;

      edquota:編輯賬號/使用者組的限值與寬限時間,edquota是editquota的縮寫,所以就是用來編輯使用者或者是使用者組限額的命令;

      edquota [-u username] [-g groupname]

      edquota -t 修改寬限時間;

      edquota -p 範本賬號 -u 新賬號

        引數:

           -u:後面接賬號名稱,可以進入quota的編輯介面去設定username的限值;

          -g:後面接組名,可以進入quota的編輯介面去設定groupname的限值;

          -t:可以修改寬限時間;

          -p:複製範本,那個範本賬號為已經存在並且已設定好quota的使用者;意義為將範本賬號這個人的quota限值複製給新賬號;

        設定使用者myquota1的限值:

            

        七個欄位的意義分別為:

            檔案系統:說明該限值時針對哪個檔案系統的;

            磁碟容量:這個數值是quota自己算出來的,單位為KB,不要修改它;

            soft:磁碟容量(block)的soft限值,單位為KB;

            hard:block的hard限值,單位為KB;

            檔案數量:這是quota自己算出來的,單位 為個數,不要修改;

            soft:inode的soft限值;

            hard:inode的hard限值;

        *******當soft/hard為0時,表示沒有限制的意思;

         設定其他使用者的限值:

              

         設定使用者組的限額:

              

         將寬限時間改為14天:

              

    5>Quota限制值的報表:

          quota的報表主要有兩種模式,一種是針對每個個人或使用者組的quota命令,一個是針對整個檔案系統的repquota命令,

        1)quota:單一使用者的quota報表;

             quota [-uvs] [username]

             quota [-gvs] [groupname]

           引數:

             -u:後面可以接username,表示顯示出該使用者的quota限值,若不接username,表示顯示出執行者的quota限值;

             -g:後面可接groupname,表示顯示出該使用者的quota限值;

             -v:顯示每個使用者在檔案系統中的quota值;

             -s:使用1024為倍數來指定單位,會顯示如M之類的單位;    

                     

        2)repquota:針對檔案系統的限額做報表;

          repquota -a [-vugs]

          引數:

             -a:直接到/etc/mtab查詢具有quota標誌的檔案系統,並報告quota的結果;

             -v:輸出的資料將含有檔案系統相關的詳細資訊;

             -u:顯示出使用者的quota限值(這是預設值);

             -g:顯示出個別使用者組的quota限值;

             -s:使用M,G為單位顯示結果;

          查詢本例中所有使用者的quota限制情況:

                         

          

     6>測試與管理:

          1)利用myquota1的身份,建立一個270MB的大檔案,並檢視quota結果;

                

                

          2)再建立另外一個大檔案,讓總容量超過300MB;

                       

          3)warnquota:對超過限額這發出警告信:

                此命令可以依據/etc/warnquota.conf的設定,然後找出目前系統上面quota用量超過soft的賬號,通過Email的功能將警告信件傳送到使用者的電子郵 件信箱,warnquota並不會自動執行,所以我們需要手動去執行,執行之後它會傳送兩封信出去,一封給myquota1,一封給root;

             可以進入/var/spoll/mail中檢視:

                  

          可以在/etc/warnquota.conf檔案中更改提示資訊,改成中文也行;

         4)setquota:直接於命令中設定quota限額;

           setquota [-u|-g] 名稱 block (soft) block(hard) inode(soft) inode(hard) 檔案系統

           檢視原始的myquota5限值,並給予soft/hard 分別為100000/200000:

              

3》不改動既有系統的Quota範例:

       如果你的主機原先沒有想到要設定成為郵件主機,所以並沒有規劃將郵件信箱所在的/var/spool/mail目錄獨立成為一個分割區,然後目前你的主機已經沒有辦法新增或分出任何新的分割區了,我們知道quota是針對整個檔案系統進行設計的,因此你是否就無法針對mail的使用量給予quota的限制呢;此外,如果你想要讓使用者的郵件信箱與主檔案 夾的總體磁碟使用量為固定,那又該如何是好,由於/home及/var/spool/mail根本不可能是同一個檔案系統(除非是都不分割區,使用根目錄,才有可能整合在一起),所以該如何進行這樣的quota限制呢?

       其實沒有那麼難,既然quota是針對整個檔案系統來進行限制,假設你又已經有/home這個獨立的分割區了,那麼你只要:

        1)將/var/spool/mail這個目錄完整地移動到/home下面;

        2)利用ln -s /home/mail /var/spool/mail 來新建連線資料;

        3)將/home進行quota限額設定; 

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-11/148494.htm


IT145.com E-mail:sddin#qq.com