天天看點

centos使用者磁盤使用配額

 磁盤配額是對每個使用者可以使用的磁盤空間進行限制,限制每個使用者可以使用的磁盤空間的大小。磁盤配額的設定對象是能夠實施讀寫操作的塊裝置,而且必須要有正确的檔案系統。磁盤配額可以限制使用者群組的通路行為,比如為指定使用者限制磁盤使用量,通過磁盤空間進行限制(一個block的限制,代表1KB存儲空間)或者通過inode進行限制。也可以直接通過組的方式來限制指定組中所有成員的磁盤使用量的總和。

    在進行磁盤配額的限制的時候可以有兩種方式,第一種比較人性化,叫做soft limit——軟限制,這種限制是當使用者的磁盤使用量達到軟配額限制,将會啟動寬限期倒計時;在倒計時歸0之前,使用者可以正常使用剩餘的配額量,但一旦倒計時歸0,使用者将不能繼續使用磁盤空間,除非将資料進行清理,低于軟限制,而後可以繼續使用磁盤空間。也就是說當一個使用者使用的磁盤空間達到了限制的上限之後,先進行提醒,如果一段時間之後還是沒有改變,再對其進行處理。與此相對的就是 hard limit——硬限制了,這種限制是使用者所能夠使用的磁盤空間的真正上限,一旦達到這個上限了,不再提醒,直接對使用者進行處理,處理的方法可以是關閉使用者使用磁盤的權利。一般來講,軟限制要比硬限制的數值要小一些,比如軟限制可以是90M,硬限制可以是120M。一般在一個系統中軟、硬限制都會存在,也就是先對使用者進行提醒,使用者可以繼續使用,但是使用者不能達到硬限制。 在Linux中預設的寬限期為7天,當一個使用者達到了軟限制,還能夠在這7天中繼續使用磁盤,直到到了7天這個期限之後,就會強制的對使用者進行處理。

    如果想要讓分區或卷能夠支援磁盤配額的設定,需要單獨的挂載選項,也就是在挂載的時候加上usrquota和grpquota這兩個選項

    首先建立一個能夠挂載的磁盤,比如在我的系統中有磁盤/dev/sdc,在這個磁盤中使用fdisk /dev/sdc 指令來建立一個 /dev/sdc1 磁盤:

<code>[root@localhost ~]</code><code># fdisk /dev/sdc</code>

<code>歡迎使用 </code><code>fdisk</code> <code>(util-linux 2.23.2)。</code>

<code>更改将停留在記憶體中,直到您決定将更改寫入磁盤。</code>

<code>使用寫入指令前請三思。</code>

<code>Device does not contain a recognized partition table</code>

<code>使用磁盤辨別符 0x9de7a864 建立新的 DOS 磁盤标簽。</code>

<code>指令(輸入 m 擷取幫助):n</code>

<code>Partition </code><code>type</code><code>:</code>

<code>   </code><code>p   primary (0 primary, 0 extended, 4 </code><code>free</code><code>)</code>

<code>   </code><code>e   extended</code>

<code>Select (default p): </code>

<code>Using default response p</code>

<code>分區号 (1-4,預設 1):</code>

<code>起始 扇區 (2048-41943039,預設為 2048):</code>

<code>将使用預設值 2048</code>

<code>Last 扇區, +扇區 or +size{K,M,G} (2048-41943039,預設為 41943039):</code>

<code>将使用預設值 41943039</code>

<code>分區 1 已設定為 Linux 類型,大小設為 20 GiB</code>

<code>指令(輸入 m 擷取幫助):w</code>

<code>The partition table has been altered!</code>

<code>Calling ioctl() to re-</code><code>read</code> <code>partition table.</code>

<code>正在同步磁盤。</code>

<code>[root@localhost ~]</code><code>#</code>

在建立之後将其進行格式化,裝上ext4檔案系統:

<code>[root@localhost ~]</code><code># mkfs.ext4 /dev/sdc1</code>

<code>mke2fs 1.42.9 (28-Dec-2013)</code>

<code>檔案系統标簽=</code>

<code>OS </code><code>type</code><code>: Linux</code>

<code>塊大小=4096 (log=2)</code>

<code>分塊大小=4096 (log=2)</code>

<code>Stride=0 blocks, Stripe width=0 blocks</code>

<code>1310720 inodes, 5242624 blocks</code>

<code>262131 blocks (5.00%) reserved </code><code>for</code> <code>the super user</code>

<code>第一個資料塊=0</code>

<code>Maximum filesystem blocks=2153775104</code>

<code>160 block </code><code>groups</code>

<code>32768 blocks per group, 32768 fragments per group</code>

<code>8192 inodes per group</code>

<code>Superblock backups stored on blocks: </code>

<code>32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, </code>

<code>4096000</code>

<code>Allocating group tables: 完成                            </code>

<code>正在寫入inode表: 完成                            </code>

<code>Creating journal (32768 blocks): 完成</code>

<code>Writing superblocks and filesystem accounting information: 完成</code>

然後建立一個挂載點:

<code>[root@localhost ~]</code><code># mkdir /tmp/sdc</code>

    在建立之後就可以将剛才的磁盤挂載到這個挂載點上,但是在這裡需要注意的是必須加上usrquota和grpquota選項才能使用使用者配額,格式如下:

<code>~]</code><code># mount -o usrquota,grpquota DEVICE MOUNT_POINT</code>

或者在/etc/fstab檔案中寫入以下内容:

<code>DEVICE MOUNT_POINT FSTYPE defaults,usrquota,grpquota 0 0</code>

舉例如下:

<code>[root@localhost ~]</code><code># mount -o usrquota,grpquota /dev/sdc1 /tmp/sdc/</code>

    此時使用mount指令檢視挂載的詳細内容就會發現多了/dev/sdc1的挂載資訊,并且有了usrquota和grpquota選項:    

<code>[root@localhost ~]</code><code># mount | grep "/sdc1"</code>

<code>/dev/sdc1</code> <code>on </code><code>/tmp/sdc</code> <code>type</code> <code>ext4 (rw,relatime,seclabel,</code><code>quota</code><code>,usrquota,grpquota,data=ordered)</code>

    在進行了以上的挂載操作之後就可以在這塊磁盤上進行使用者的配額管理了。進行配額管理使用需要兩個重要的檔案,一個是aquota.group,這個檔案是為了對組進行配額;另一個是aquota.user,這個檔案是為了對使用者進行配額。在一個磁盤新挂載的之後是沒有這兩個檔案的,需要使用下面這個指令來進行建立:

quotacheck指令:

quotacheck  -  scan  a filesystem for disk usage, create, check and repair quota files

選項:

-v, --verbose:顯示整個操作過程的詳細資訊

-u, --user:建立,檢測和修複使用者配額檔案

-g, --group:建立,檢測和修複組配額檔案

-c, --create-files:經過檢測,如果沒有使用者配額檔案和或組配額檔案,就安裝使用者給定的選項來進行檔案的建立;

-a, --all:所有的在/etc/fstab檔案中包含了與配額有關的挂載選項的裝置上,是否有對應選項的配額檔案;

    在使用了這個指令之後就會産生兩個檔案:

<code>[root@localhost ~]</code><code># quotacheck -u -g /tmp/sdc/</code>

<code>[root@localhost ~]</code><code># ls /tmp/sdc/</code>

<code>aquota.group  aquota.user  lost+found</code>

    這兩個檔案分别有自己的功能,當然如果隻是需要對使用者進行配額,則不需要aquota.group這個檔案,反過來也是,在使用的時候根據自己的需要來進行指令的使用。

    在這兩個檔案建立完畢了之後,就可以對使用者或組進行磁盤配額了,使用的指令是:

edquota

-u, --user:編寫使用者配額,預設的功能;

-g, --group:編寫組配額,不推薦使用;

-t, --edit-period:設定超出軟限制的寬限期;預設7天,可以選擇以秒,分鐘,小時,天等時間機關;

    在使用這個指令時,比如為一個使用者“test”的配額進行限制:

<code>[root@localhost ~]</code><code># edquota -u test</code>

    在這條指令執行之後就會進入vim的界面,我們可以在這個界面中對使用者的配額進行修改:

<code>Disk quotas </code><code>for</code> <code>user </code><code>test</code> <code>(uid 1006):</code>

<code>Filesystem                   blocks       soft       hard     inodes     soft     hard</code>

<code>/dev/sdc1</code>                        <code>0         0         0        0        0        0</code>

<code>~                                                                                                                                                                          </code>

<code>~</code>

    在這個vim界面中我們可以看到能夠修改的選項有塊數(檔案的大小,機關是KB)的軟限制和硬限制還有inode的軟限制和硬限制,在這裡我對塊數的軟限制和硬限制進行修改,修改的方法是直接對數值進行修改,然後儲存這個檔案即可:

<code>/dev/sdc1</code>                       <code>0       1000       2000        0        0        0</code>

<code>~                                                                                                    </code>

   在進行了修改儲存後,必須使用以下指令來使配額功能生效或失效:

        quotaon(是配額功能生效), quotaoff(是配額功能失效)

    quotaon, quotaoff - turn filesystem quotas on and off

第一種用法是不指定磁盤:

<code>[root@localhost ~]</code><code># quotaon -avug</code>

<code>/dev/sdc1</code> <code>[</code><code>/tmp/sdc</code><code>]: group quotas turned on</code>

<code>/dev/sdc1</code> <code>[</code><code>/tmp/sdc</code><code>]: user quotas turned on</code>

<code>[root@localhost ~]</code><code># quotaoff -avug</code>

<code>/dev/sdc1</code> <code>[</code><code>/tmp/sdc</code><code>]: group quotas turned off</code>

<code>/dev/sdc1</code> <code>[</code><code>/tmp/sdc</code><code>]: user quotas turned off</code>

    或者直接指定磁盤:

<code>quotaon|quotaoff </code><code>/dev/sdb1</code>

檢視配額的使用情況

quota:顯示使用者的磁盤配額,後頭要跟上使用者的名稱

quota - display disk usage and limits

<code>[root@localhost sdc]</code><code># quota test</code>

<code>Disk quotas </code><code>for</code> <code>user </code><code>test</code> <code>(uid 1006): </code>

<code>     </code><code>Filesystem  blocks   </code><code>quota</code>   <code>limit   grace   files   </code><code>quota</code>   <code>limit   grace</code>

<code>      </code><code>/dev/sdc1</code>    <code>2000*   1000    2000   6days       2       0       0        </code>

<code>[root@localhost sdc]</code><code>#</code>

在這個例子中,我将塊數的軟限制改為1M,硬限制改為2M,在儲存之後将目前使用者切換到test,之後可以使用這個使用者通過dd指令建立一個1M的檔案(在建立之前首先要確定這個使用者對這個檔案擁有寫入權限,如果沒有要賦予):

<code>[</code><code>test</code><code>@localhost sdc]$ </code><code>dd</code> <code>if</code><code>=</code><code>/dev/zero</code> <code>bs=1024 count=2000 of=</code><code>/tmp/sdc/FILE1_2M</code>

<code>記錄了2000+0 的讀入</code>

<code>記錄了2000+0 的寫出</code>

<code>2048000位元組(2.0 MB)已複制,0.00675606 秒,303 MB/秒</code>

此時在/tmp/sdc檔案中test使用者使用的磁盤空間就占去了2M的空間,如果再次使用這個指令就會報錯:

<code>[</code><code>test</code><code>@localhost sdc]$ </code><code>dd</code> <code>if</code><code>=</code><code>/dev/zero</code> <code>bs=1024 count=2000 of=</code><code>/tmp/sdc/FILE2_2M</code>

<code>sdc1: write failed, user block limit reached.</code>

<code>dd</code><code>: 寫入</code><code>"/tmp/sdc/FILE2_2M"</code> <code>出錯: 超出磁盤限額</code>

<code>記錄了1+0 的讀入</code>

<code>記錄了0+0 的寫出</code>

<code>0位元組(0 B)已複制,0.000285576 秒,0.0 kB/秒</code>

<code>[</code><code>test</code><code>@localhost sdc]$</code>

repquota:檢視磁盤配額的使用情況,隻有root使用者可以使用

repquota - summarize quotas for a filesystem

<code>[root@localhost sdc]</code><code># repquota -avug</code>

<code>*** Report </code><code>for</code> <code>user quotas on device </code><code>/dev/sdc1</code>

<code>Block grace </code><code>time</code><code>: 7days; Inode grace </code><code>time</code><code>: 7days</code>

<code>                        </code><code>Block limits                File limits</code>

<code>User            used    soft    hard  grace    used  soft  hard  grace</code>

<code>----------------------------------------------------------------------</code>

<code>root      --      20       0      0               2    0     0       </code>

<code>test</code>      <code>+-     2000    1000    2000  6days      2    0     0       </code>

<code>Statistics:</code>

<code>Total blocks: 7</code>

<code>Data blocks: 1</code>

<code>Entries: 2</code>

<code>Used average: 2.000000</code>

<code>*** Report </code><code>for</code> <code>group quotas on device </code><code>/dev/sdc1</code>

<code>Group           used    soft    hard  grace    used  soft  hard  grace</code>

<code>root      --    1020       0      0            3    0    0       </code>

<code>test</code>      <code>--    2000      0      0            2    0    0       </code>

    注意:在使用磁盤配額的時候,無論進行怎樣的操作, root都不受磁盤配額限制,最多隻能對root使用者進行提醒,是以root的權限是非常大的,在沒有必要的時候盡量不要使用root使用者進行登陸。

本文轉自正經的青年51CTO部落格,原文連結:http://blog.51cto.com/11142243/1940587 ,如需轉載請自行聯系原作者

繼續閱讀