Linux—磁碟配額,管理LVM邏輯卷

灼眼的夏侯惇發表於2020-11-01

目錄

前言

許多 Linux 作業系統的使用者在安裝作業系統時都會遇到這樣的困境:如何精確評估和分配各個硬碟分割槽的容量。如果當初估計不準確,一旦系統分割槽不夠用就可能不得不備份、刪除相關資料,甚至被迫重新規劃分割槽並重灌作業系統,以滿足應用系統的需要

一、LVM概述

  • LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁碟分割槽進行管理的一種機制
  • 在安裝CentOS 系統的過程中選擇自動分割槽,就會預設採用LVM分割槽方案。不需要再進行手動配置
  • 動態調整磁碟容量,從而提高磁碟管理的靈活性
  • 注意:“/boot”分割槽用於存放引導檔案,不能基於LVM建立,必須獨立出來
  • 圖形化管理介面:system-config

1.1 PV(Physical Volume,物理卷)

  • 物理卷是 LVM 機制的基本儲存裝置,通常對應為一個普通分割槽或整個硬碟
  • 建立物理卷時,會在分割槽或硬碟的頭部建立一個保留區塊,用於記錄 LVM 的屬性,並把儲存空間分割成預設大小為 4MB 的基本單元(Physical Extent,PE),從而構成物理卷
  • 物理卷一般直接使用裝置檔名稱,如/dev/sdb1、/dev/sdb2、/dev/sdd 等
  • 對用於轉換成物理卷的普通分割槽,建議先使用 fdisk 工具將分割槽型別的 ID 標記號改為“8e”。若是整塊硬碟,可以將所有磁碟空間劃分為一個主分割槽後再做相應調整
    物理卷

1.2 VG(Volume Group,卷組)

  • 由一個或多個物理卷組成一個整體,即稱為卷組,在卷組中可以動態地新增或移除物理卷
  • 許多個物理卷可以分別組成不同的卷組,卷組的名稱由使用者自行定義
    卷組

1.3 LV(Logical Volume,邏輯卷)

  • 邏輯卷建立在卷組之上,與物理卷沒有直接關係
  • 對於邏輯捲來說,每一個卷組就是一 個整體,從這個整體中“切出”一小塊空間,作為使用者建立檔案系統的基礎,這一小塊空間就稱為邏輯卷
  • 使用 mkfs 等工具在邏輯捲上建立檔案系統以後,就可以掛載到 Linux 作業系統中的目錄下使用
    邏輯卷

1.4 建立 LVM 分割槽管理機制的過程

  1. 首先,將普通分割槽或整個硬碟建立為物理卷
  2. 然後,將物理上比較分散的各物理卷的儲存空間組成一個邏輯整體,即卷組
  3. 最後,基於卷組這個整體,分割出不同的資料存 儲空間,形成邏輯卷。邏輯卷才是終端使用者可以格式化並掛載使用的儲存單位

二、LVM 的管理命令

LVM 管理命令主要包括三大類:物理卷(PV)管理、卷組(VG)管理、邏輯卷(LV) 管理,對應的命令程式檔案分別以“pv”、“vg”、“lv”開頭

功能PV管理命令VG管理命令LV管理命令
Scan(掃描)pvscanvgscanlvscan
Create(建立)pvcreatevgcreatelvcreate
Display(顯示)pvdisplayvgdisplaylvdisplay
Remove(移除)pvremovevgremovelvremove
Extend(擴充套件)vgextendlvextend
Reduce(減少)vgreducelvreduce
  • 命令的幾種格式
pvcreate 裝置名1 [裝置名2 ... ...]
vgcreate 卷組名 物理卷名1 物理卷名2
lvcreate -L 容量大小 -n 邏輯卷名 卷組名
lvextend -L +大小 /dev/卷組名/邏輯卷名

2.1 物理卷管理

2.1.1 pvscan 命令

  • pvscan 命令用於掃描系統中所有的物理卷,並輸出相關資訊
  • 例如:

[root@localhost ~]# pvscan
PV /dev/sda2	VG cl	lvm2 [99.00 GiB / 4.00 MiB free] Total: 1 [99.00 GiB] / in use: 1 [99.00 GiB] / in no VG: 0 [0	]

2.1.2 pvcreate 命令

  • pvcreate 命令用於將分割槽或整個硬碟轉換成物理卷,主要是新增 LVM 屬性資訊並劃分PE 儲存單位
  • 該命令需要使用硬碟或分割槽的裝置檔案作為引數(可以有多個)
  • 例如:
##把分割槽/dev/sdb1、/dev/sdb2、/dev/sdb3 轉換成物理卷
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdb3
WARNING: xfs signature detected on /dev/sdb1 at offset 0. Wipe it? [y/n]: y 
Wiping xfs signature on /dev/sdb1.	//分割槽簽名的警告提示
WARNING: xfs signature detected on /dev/sdb2 at offset 0. Wipe it? [y/n]: y 
Wiping xfs signature on /dev/sdb2.
WARNING: dos signature detected on /dev/sdb3 at offset 510. Wipe it? [y/n]: y 
Wiping dos signature on /dev/sdb3.
Physical volume "/dev/sdb1" successfully created. 
Physical volume "/dev/sdb2" successfully created. 
Physical volume "/dev/sdb3" successfully created.
  • 注意:
    • 執行建立物理卷的命令時,會出現更換分割槽簽名的警告提示,輸入“y”後按 Enter 鍵即可

2.1.3 pvdisplay 命令

  • pvdisplay 命令用於顯示物理卷的詳細資訊,需要使用指定的物理卷作為命令引數,預設時將顯示所有物理卷的資訊
  • 例如:
##執行“pvdisplay /dev/sdb3”命令可以檢視物理卷/dev/sdb3 的詳細資訊
[root@localhost ~]# pvdisplay /dev/sdb3
"/dev/sdb3" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name	/dev/sdb3 
VG Name
PV Size	20.00 GiB
Allocatable	NO 
PE Size		0
Total PE	0
Free PE	0
Allocated PE	0
PV UUID	rxXULc-L7ov-FTlF-rj7s-XZAr-ysHE-rhJTww

2.1.4 pvremove 命令

  • pvremove 命令用於將物理卷還原成普通分割槽或磁碟,不再用於 LVM 體系,被移除的物理卷將無法被 pvscan 識別
  • 例如:
##執行“pvremove /dev/sdb3”命令可以將物理卷/dev/sdb3 從 LVM 體系中移除
[root@localhost ~]# pvremove /dev/sdb3
Labels on physical volume "/dev/sdb3" successfully wiped

2.2 卷組管理

2.2.1

  • vgscan 命令用於掃描系統中已建立的 LVM 卷組及相關資訊
  • 例如:
##通過執行vgscan 命令後可以列出 cl 卷組
[root@localhost ~]# vgscan
Reading volume groups from cache.
Found volume group "cl" using metadata type lvm2

2.2.2 vgcreate 命令

  • vgcreate 命令用於將一個或多個物理卷建立為一個卷組,第一個命令引數用於設定新卷組的名稱,其後依次指定需要加入該卷組的物理卷作為引數
  • 例如:
##使用物理卷/dev/sdb1和/dev/sdb2建立名為web_document的卷組
[root@localhost ~]# vgcreate web_document /dev/sdb1 /dev/sdb2
Volume group "web_document" successfully created

2.2.3 vgdisplay 命令

  • vgdisplay 命令用於顯示系統中各卷組的詳細資訊,需要使用指定卷組名作為命令引數(未指定卷組時將顯示所有卷組的資訊)
  • 例如:
##檢視卷組 web_document 的詳細資訊
[root@localhost ~]# vgdisplay web_document
--- Volume group ---
VG Name	web_document 
System ID
Format	lvm2
Metadata Areas	2
Metadata Sequence No	1
VG Access		read/write 
VG Status	resizable
MAX LV	0
Cur LV	0
Open LV	0
Max PV	0
Cur PV	2
Act PV	2
VG Size	39.99 GiB
PE Size	4.00 MiB
Total PE	10238
Alloc PE / Size	0 / 0
Free    PE / Size	10238 / 39.99 GiB
VG UUID	Pk3kqd-1ydD-kvId-6E39-hTnD-592f-Q7DG22

2.2.4 vgremove 命令

  • vgremove 命令用於刪除指定的卷組,將指定卷組名稱作為引數即可
  • 刪除時應確保該卷組中沒有正在使用的邏輯卷
  • 例如:
##刪除名為 web_document 的 LVM 卷組
[root@localhost ~]# vgremove web_document
Volume group "web_document" successfully removed

2.2.5 vgextend 命令

  • vgextend 命令用於擴充套件卷組的磁碟空間
  • 當建立了新的物理卷,並需要將其新增到已有卷組中時,就可以使用 vgextend 命令
  • 該命令的第一個引數為需要擴充套件容量的卷組名稱, 其後為需要新增到該卷組中的各物理卷
  • 例如:
##重新建立卷組web_document,只包含物理卷/dev/sdb1,然後通過vgextend命令將物理卷/dev/sdb2 新增到卷組web_document中
[root@localhost ~]# vgcreate web_document /dev/sdb1
Volume group "web_document" successfully created 
[root@localhost ~]# vgextend web_document /dev/sdb2
Volume group "web_document" successfully extended

2.3 邏輯卷管理

2.3.1 lvscan 命令

  • lvscan 命令用於掃描系統中已建立的邏輯卷及相關資訊
  • 例如:
##通過執行lvscan命令可以列出cl卷組中的swap、home、root三個邏輯卷
[root@localhost ~]# lvscan
ACTIVE	'/dev/cl/swap' [7.88 GiB] inherit
ACTIVE	'/dev/cl/home' [41.12 GiB] inherit
ACTIVE	'/dev/cl/root' [50.00 GiB] inherit

2.3.2 lvcreate 命令

  • lvcreate 命令用於從指定的卷組中分割空間,以建立新的邏輯卷
  • 需要指定邏輯卷大小、名稱及所在的卷組名作為引數
  • 邏輯卷建立完成以後,可以通過“/dev/卷組名/邏輯卷名”(或“/dev/mapper/卷組名-邏輯卷名”)形式的裝置檔案進行訪問
  • 命令格式:
lvcreate –L 容量大小  -n 邏輯卷名  卷組名
  • 例如:
##執行操作將在卷組web_document中建立一個新的邏輯卷,容量為10GB,名稱設為 bdqn
[root@localhost ~]# lvcreate -L 10G -n bdqn web_document
Logical volume "bdqn" created.
[root@localhost ~]# ls /dev/web_document/bdqn
/dev/web_document/bdqn	//邏輯卷bdqn 的連結檔案
[root@localhost ~]# ls /dev/mapper/web_document-bdqn
/dev/mapper/web_document-bdqn	//邏輯卷bdqn 的裝置檔案

2.3.3 lvdisplay 命令

  • lvdisplay 命令用於顯示邏輯卷的詳細資訊,可以指定邏輯卷的裝置檔案作為引數,也可以使用卷組名作為引數,以顯示該卷組中所有邏輯卷的資訊
  • 例如:
##執行操作可以檢視前面建立的 bdqn 邏輯卷的詳細資訊
[root@localhost ~]# lvdisplay /dev/web_document/bdqn
--- Logical volume ---
LV Path	/dev/web_document/bdqn
LV Name	bdqn
VG Name	web_document
LV UUID	I6IdqV-wTGz-Dg6o-6vwq-5D4h-E7VW-K2kmSh
LV Write Access	read/write
LV Creation host, time	localhost.localdomain, 2017-05-02 09:51:18 -0400 LV Status	available
# open	0
LV Size	10.00 GiB
Current LE	2560
Segments	1
Allocation	inherit 
Read ahead sectors		auto
- currently set to	8192
Block device	253:3

2.3.4

  • lvextend 命令用於動態擴充套件邏輯卷的空間,當目前使用的邏輯卷空間不足時,可以從所在卷組中分割額外的空間進行擴充套件
  • 只要指定需增加的容量大小及邏輯卷裝置檔案位置即可,前提條件是該卷組中還有尚未分配的磁碟空間,否則需要先擴充套件卷組容量。
  • 另外,調整邏輯卷的容量後,需要執行“xfs_growfs /dev/卷組名/邏輯卷名”命令以便 Linux 作業系統重新識別檔案系統的大小
  • xfs_growfs 是針對 XFS 檔案系統的線上調整檔案系統大小的命令
  • 命令格式
lvextend -L +大小  /dev/卷組名/邏輯卷名
  • 例如:
##為bdqn邏輯卷擴充套件(增加)10GB大小的磁碟空間,並使用xfs_growfs 命令重設大小
[root@localhost ~]# lvextend -L +10G /dev/web_document/bdqn
Size of logical volume web_document/bdqn changed from 10.00 GiB (2560 extents) to 20.00 GiB (5120 extents).
Logical volume web_document/bdqn successfully resized. [root@localhost ~]# lvdisplay /dev/web_document/bdqn
--- Logical volume ---
……
LV Size	20.00 GiB	//容量已由原來的 10GB 變為 20GB
……
[root@localhost ~]# xfs_growfs /dev/web_document/bdqn
meta-data=/dev/mapper/web_document-bdqn isize=512 agcount=8, agsize=655360 blks
        =	sectsz=512	attr=2, projid32bit=1
        =    crc=1	finobt=0 spinodes=0
data	=	bsize=4096	blocks=5242880, imaxpct=25
        =	sunit=0	swidth=0 blks
naming	=version 2	bsize=4096	ascii-ci=0 ftype=1
log	    =internal	bsize=4096	blocks=2560, version=2
        =	sectsz=512	sunit=0 blks, lazy-count=1 
realtime  =none	extsz=4096	blocks=0, rtextents=0
  • 在為邏輯卷擴充套件容量時,能夠擴充套件的大小受限於所在卷組剩餘空間的大小
    • 例如:
    • 當卷組 web_document 的剩餘空間只有 8GB 時,通過 lvextend 命令最多也只能為 bdqn 邏輯卷增加 8GB 的空間,若還需要增加更多的磁碟空間,必須先通過 vgextend 擴充套件卷組的容量

2.3.5 lvremove 命令

  • lvremove 命令用於刪除指定的邏輯卷,直接使用邏輯卷的裝置檔案作為引數即可
  • 例如:
##執行以下操作可以刪除名為 bdqn 的邏輯卷
##需要注意的是,在刪除邏輯卷之前,應確保該邏輯卷不再使用,且必要的資料已做好備份
[root@localhost ~]# lvremove /dev/web_document/bdqn
Do you really want to remove active logical volume web_document/bdqn?[y/n]: y
Logical volume "bdqn" successfully remove

三、LVM應用例項

3.1 案例環境

公司準備在 Internet 中搭建郵件伺服器(CentOS 7 系統平臺),面向全國各地的員工及部分 VIP 客戶提供電子郵箱空間

3.2 需求描述

由於使用者數量眾多,郵件儲存需要大量的空間,考慮動態擴容的需要,除了系統安裝時的一塊硬碟之外,另外增加兩塊 80GB 的 SCSI 硬碟並構建 LVM 邏輯卷(掛載到/mailbox 目錄下)專門用於存放郵件資料

3.3 實驗步驟

實驗步驟

3.3.1 檢視磁碟是否新增成功

[root@localhost ~]# fdisk -l		
磁碟 /dev/sda:42.9 GB, 42949672960 位元組,83886080 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理)512 位元組 / 512 位元組
I/O 大小(最小/最佳)512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x000c1f00

   裝置 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    12584959     6291456   83  Linux
/dev/sda2        12584960    54527999    20971520   83  Linux
/dev/sda3        54528000    62916607     4194304   82  Linux swap / Solaris
/dev/sda4        62916608    83886079    10484736    5  Extended
/dev/sda5        62918656    83886079    10483712   83  Linux

磁碟 /dev/sdb:21.5 GB, 21474836480 位元組,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理)512 位元組 / 512 位元組
I/O 大小(最小/最佳)512 位元組 / 512 位元組

磁碟 /dev/sdc:21.5 GB, 21474836480 位元組,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理)512 位元組 / 512 位元組
I/O 大小(最小/最佳)512 位元組 / 512 位元組  

3.3.2開始建立分割槽,同樣的方法建立/dev/sdc

[root@localhost ~]# fdisk /dev/sdb		
歡迎使用 fdisk (util-linux 2.23.2)。

更改將停留在記憶體中,直到您決定將更改寫入磁碟。
使用寫入命令前請三思。

Device does not contain a recognized partition table
使用磁碟識別符號 0x50f1e234 建立新的 DOS 磁碟標籤。

命令(輸入 m 獲取幫助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
分割槽號 (1-4,預設 1):
起始 扇區 (2048-41943039,預設為 2048):
將使用預設值 2048
Last 扇區, +扇區 or +size{K,M,G} (2048-41943039,預設為 41943039):
將使用預設值 41943039
分割槽 1 已設定為 Linux 型別,大小設為 20 GiB

命令(輸入 m 獲取幫助):t
已選擇分割槽 1
Hex 程式碼(輸入 L 列出所有程式碼)8e		//分割槽ID改成8e,8e是lvm格式,我們保持前後格式相同
已將分割槽“Linux”的型別更改為“Linux LVM命令(輸入 m 獲取幫助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁碟

3.3.3 檢視分割槽建立情況

[root@localhost ~]# fdisk -l		
磁碟 /dev/sda:42.9 GB, 42949672960 位元組,83886080 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理)512 位元組 / 512 位元組
I/O 大小(最小/最佳)512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x000c1f00

   裝置 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    12584959     6291456   83  Linux
/dev/sda2        12584960    54527999    20971520   83  Linux
/dev/sda3        54528000    62916607     4194304   82  Linux swap / Solaris
/dev/sda4        62916608    83886079    10484736    5  Extended
/dev/sda5        62918656    83886079    10483712   83  Linux

磁碟 /dev/sdb:21.5 GB, 21474836480 位元組,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理)512 位元組 / 512 位元組
I/O 大小(最小/最佳)512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x50f1e234

   裝置 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    41943039    20970496   8e  Linux LVM

磁碟 /dev/sdc:21.5 GB, 21474836480 位元組,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理)512 位元組 / 512 位元組
I/O 大小(最小/最佳)512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0x6a90762a

   裝置 Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    41943039    20970496   8e  Linux LVM

3.3.4.建立物理卷

[root@localhost ~]# pvcreate /dev/sd[b-c]1
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc1" successfully created.
[root@localhost ~]# pvscan		'//檢視物理卷'
  PV /dev/sdc1                      lvm2 [<20.00 GiB]
  PV /dev/sdb1                      lvm2 [<20.00 GiB]
  Total: 2 [<40.00 GiB] / in use: 0 [0   ] / in no VG: 2 [<40.00 GiB]

3.3.5.建立卷組

[root@localhost ~]# vgcreate mail_stor /dev/sd[b-c]1
  Volume group "mail_stor" successfully created
[root@localhost ~]# vgscan		'//掃描卷組'
  Reading volume groups from cache.
  Found volume group "mail_stor" using metadata type lvm2
[root@localhost ~]# vgdisplay		'//檢視卷組詳細資訊'
  --- Volume group ---
  VG Name               mail_stor
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       0 / 0   
  Free  PE / Size       10238 / 39.99 GiB
  VG UUID               iEKi0I-hg0i-it0a-cOwe-DfPj-FkXs-fnSP4N

3.3.6.建立邏輯卷

[root@localhost ~]# lvcreate -L 20G -n mbox mail_stor
  Logical volume "mbox" created.
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/mail_stor/mbox
  LV Name               mbox
  VG Name                mail_stor
  LV UUID                VXD0B0-wxqV-wXgk-b7N4-GEPE-c1au-u6nGBs
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-11-04 14:45:59 +0800
  LV Status              available
  # open                 0
  LV Size                20.00 GiB
  Current LE             5120
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

3.3.7.格式化邏輯卷

[root@localhost 1]# mkfs.xfs /dev/mail_stor/mbox
meta-data=/dev/mail_stor/mbox              isize=512    agcount=4, agsize=1310720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242880, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

3.3.8建立掛載點,設定自動掛載

[root@localhost 1]# mkdir mailbox
[root@localhost 1]# vim /etc/fstab

3.3.9啟用掛載

[root@localhost 1]# mount -a
[root@localhost 1]# df -hT		'//檢視是否掛載成功'

3.3.10給邏輯卷擴容10G

[root@localhost 1]# lvextend -L +10G /dev/mail_stor/mbox
  Size of logical volume 1/11 changed from 20.00 GiB (5120 extents) to 30.00 GiB (7680 extents).
  Logical volume 1/11 successfully resized.

3.3.11 使用xfs_growfs命令使Linux系統重新識別檔案系統大小

[root@localhost 1]# xfs_growfs /dev/mail_stor/mbox

四、設定磁碟配額

  • 當 Linux 根分割槽的磁碟空間耗盡時,Linux 作業系統將無法再建立新的檔案(包括程式執行的臨時檔案),從而出現服務程式崩潰、系統無法啟動等故障
  • 為了避免在伺服器中出現類似磁碟空間不足的問題,可以啟用磁碟配額功能,對使用者在指定檔案系統(分割槽)中使用的磁碟空間、檔案數量進行限制,以防止個別使用者惡意或無意間佔用大量磁碟空間,從而保持系統儲存空間的穩定性和持續可用性
  • 在 CentOS 系統中,核心已經定製了支援 Linux 檔案系統的磁碟配額功能,並且在系統中配置和管理磁碟配額的工具由 xfsprogs 軟體包的 xfs_quota 配額管理程式提供
  • 注意:在 CentOS 系統中,不同的檔案系統使用不同磁碟配額配置管理工具
    • XFS 檔案系統通過 xfs_quota 工具進行管理
    • EXT3/4 檔案系統通過 quota 工具進行管理
##通過以下操作可以確認 xfsprogs 軟體包的安裝情況,並列表檢視 xfsprogs 軟體包安裝的 xfs_quota 配額管理程式
[root@localhost ~]# rpm -q xfsprogs
xfsprogs-4.5.0-8.el7.x86_64
[root@localhost ~]# rpm -ql xfsprogs | grep xfs_quota
/usr/sbin/xfs_quota
/usr/share/man/man8/xfs_quota.8.gz

4.1 磁碟配額概述

4.1.1 磁碟配額的作用範圍—針對指定的檔案系統(分割槽)

  • 需要Linux核心支援
  • 安裝xfsprogs與quota軟體包
  • xfs_quota 設定的磁碟配額功能,只在指定的檔案系統(分割槽)內有效,使用者使用其他未設定配額的檔案系統時,將不會受到限制
  • quota軟體包在7.0版本自動加入到xfsprogs,所以只需要安裝xfsprogs就可以

4.1.2 磁碟配額的限制物件—使用者賬號,組賬號

  • xfs_quota 主要針對系統中指定的使用者賬號、組賬號進行限制,沒有被設定限額的使用者或組將不受影響
  • 對組賬號設定配額後,組內所有使用者使用的磁碟容量、檔案數量的總和不能超過限制

4.1.3 磁碟配額的限制型別—磁碟容量,檔案數量

  • 磁碟容量:限制使用者能夠使用的磁碟資料塊(Block)大小,也就是限制磁碟空間大小,預設單位為 KB。
  • 檔案數量:限制使用者能夠擁有的檔案個數。在 Linux 作業系統中,每一個檔案都有一個對應的數字標記,稱為 i 結點(Inode)編號,這個編號在同一個檔案系統內是唯一的,因此 xfs_quota 通過限制 i 結點的數量來實現對檔案數量的限制

4.1.4 磁碟配額的限制方法—軟限制,硬限制

  • 軟限制:指定一個軟性的配額數值(如 480MB 磁碟空間、180 個檔案),在固定的寬限期(預設為七天)內允許暫時超過這個限制,但系統會給出警告資訊
  • 硬限制:指定一個硬性的配額數值(如 500MB 磁碟空間、200 個檔案),是絕對禁止使用者超過的限制值,當達到硬限制值時,系統也會給出警告並禁止繼續寫入數 據。硬限制的配額值應大於相應的軟限制值,否則軟限制將失效
  • 在實施磁碟配額的實際過程中,只有當使用者(或組)、檔案系統(分割槽)及配額數值都滿足限額條件時,xfs_quota 才會對操作進行限制

4.1.5 磁碟配額步驟

  • 臨時設定(大部分都是通過命令實現),永久設定(都是通過原始碼檔案中配置)
  • 大部分命令設定都是臨時生效,重啟失效
  • 配置檔案是永久生效
  • 編輯使用者和組賬號的配額設定:組的配額是固定的
    磁碟配額概述

4.1.6啟動磁碟配額支援

  • 新增usrquota,grpquota掛載引數
  • 臨時設定需要加上 -o 引數

4.2 磁碟配額管理

4.2.1 以支援配額功能的方式掛載檔案系統

  • 除了核心和 xfs_quota 軟體的支援以外,實施磁碟配額功能還有一個前提條件,即指定的分割槽必須已經掛載且支援磁碟配額功能
  • 在配置除錯過程中,可以使用帶“-o usrquota,grpquota”選項的 mount 命令掛載指定的分割槽,以便增加對使用者、組配額功能的支援
  • 例如:
##對mbox邏輯卷重新進行掛載(remount引數),並新增配額支援
[root@localhost ~]# umount /mailbox/	//解除安裝之前/mailbox 目錄掛載的分割槽[root@localhost ~]# mount -o usrquota,grpquota /dev/mail_store/mbox /mailbox/ [root@localhost ~]# mount
……
/dev/mapper/mail_store-mbox	on	/mailbox	type	xfs (rw,relatime,attr2,inode64,usrquota,grpquota)
[root@localhost ~]# chmod 777 /mailbox/ //為後續測試方便,允許任何使用者寫入資料
  • 注意:
    • XFS 檔案系統只有在首次掛載時才啟動磁碟限額功能,所以不能使用“-o remount”掛載選項
    • 對於支援配額功能的檔案系統,將在 mount 資訊中顯示“usrquota,grpquota”
  • 若 需 要 在 每 次 開 機 後 自 動 以 支 持 配 額 功 能 的 方 式 掛 載 該 分 區 , 可 以 將“usrquota,grpquota”掛載引數寫入“/etc/fstab”檔案中
[root@localhost ~]# vi /etc/fstab	//修改mbox 邏輯卷的掛載配置
……	//省略部分資訊
/dev/mapper/mail_store-mbox /mailbox xfs defaults,usrquota,grpquota 0 0

4.2.2 編輯使用者和組賬號的配額設定

  • 使用edquota 命令結合“-u”及“-g”選項可用於指定使用者或組的配額設定
  • 結合“limit”命令可以設定磁碟容量,以及檔案數的軟、硬限制數值
  • 配額設定的基本命令格式:
xfs_quota -x -c 'limit -u bsoft=N bhard=N isoft=N ihard=N 使用者名稱' 掛載點

其中:
“-x”表示啟動專家模式,在當前模式下允許對配額系統進行修改的所有管理命令可用
“-c”表示直接呼叫管理命令
xfs_quota 命令可以以互動方式進行
如果上述設定其使用者磁碟配額的命令不加“-c”選項,那麼命令執行後失敗,並切入“xfs_quota>”環境下,以   互動方式配置管理磁碟配額
  • 除“-x”“-c”選項之外,limit 命令後面還包含四個磁碟配額的限制欄位
    • bsoft::設定磁碟容量的軟限制數值
    • bhard:設定磁碟容量的硬限制數值
    • isoft:設定磁碟檔案數的硬限制數值
    • ihard:設定磁碟檔案數的軟限制數值
  • 例如:
##設定使用者 zhangsan 的磁碟配額:磁碟容量軟限制 80MB、磁碟容量硬限制 100MB、檔案數軟限制 40、檔案數硬限制 50
[root@localhost ~]# xfs_quota -x -c 'limit -u bsoft=80M bhard=100M isoft=40 ihard=50 zhangsan' /mailbox/
  • 若僅限制磁碟容量或檔案數,可以使用如下命令(0 表示無限制)
[root@localhost ~]# xfs_quota -x -c 'limit -u bsoft=80M bhard=100M zhangsan' /mailbox/    
//僅限制磁碟容量
[root@localhost ~]# xfs_quota -x -c 'limit -u isoft=40 ihard=50 zhangsan' /mailbox/    
//僅限制檔案數
  • 設定使用者的磁碟配額後可使用“xfs_quota -c ‘quota -uv zhangsan’ /mailbox/“命令檢視使用者 zhangsan 的磁碟容量限制。結果輸出後”Quota”欄位對應的是軟限制,“Limit”欄位對應的是硬限制
[root@localhost ~]# xfs_quota -c 'quota -uv zhangsan' /mailbox/
//檢視 zhangsan 磁碟容量限制
Disk quotas for User zhangsan (1001)
Filesystem	Blocks	Quota	Limit	Warn/Time	Mounted on
/dev/mapper/mail_store-mbox
0	81920	102400	00 [	]/mailbox
##結合”-i“選項可以檢視 zhangsan 使用者的磁碟檔案數限制
[root@localhost ~]# xfs_quota -c 'quota -i -uv zhangsan' /mailbox/
//檢視 zhangsan 檔案數限制
  • 一般來說,對磁碟容量進行限額的情況更為常見,而限制檔案數量的情況較少
  • 設定的限額數值不應該小於該使用者已經使用的數量,否則可能導致該使用者無法正常登入系統
  • 建議不要對 root 使用者設定磁碟配額,以免對程式及系統的執行和穩定性帶來不可預知的風險
  • 對使用者賬號設定磁碟配額的方法也同樣適用於對組賬號設定配額,只不過在進入編輯環境時要使用“-g”選項指定組賬號物件
  • 示例:
##設定組賬號 user 的磁碟配額:磁碟容量軟限制 1GB、磁碟容量硬限制 2GB、檔案數軟限制 2000、檔案數硬限制2500
[root@localhost ~]#	xfs_quota -x -c 'limit -g bsoft=1G bhard=2G isoft=2000 ihard=2500 user' /mailbox/
[root@localhost ~]# xfs_quota -c 'quota -gv user' /mailbox/
//檢視user 組賬號的磁碟容量限制
Disk quotas for Group user (1002)
Filesystem	Blocks	Quota	Limit	Warn/Time	Mounted on
/dev/mapper/mail_store-mbox
0	1048576	2097152	00 [--------]	/mailbox
[root@localhost ~]# xfs_quota -c 'quota -i -gv user' /mailbox/
//檢視user 組賬號的檔案數
Disk quotas for Group user (1002)
Filesystem	Files	Quota	Limit	Warn/Time Mounted on
/dev/mapper/mail_store-mbox
0	2000	2500	00 [--------]	/mailbox

4.3 驗證磁碟配額功能

  • 使用受配額限制的使用者賬號登入 Linux 作業系統,並切換到應用了配額的檔案系統中, 進行復制檔案等寫入操作,測試所設定的磁碟配額項是否有效
  • 在測試過程中,為了快速看到效果,可以使用 dd 轉換工具
    • dd 命令是一個裝置轉換和複製命令
      • “if=”選項指定輸入裝置(或檔案)
      • “of=”選項指定輸出裝置(或檔案)
      • “bs=”選項指定讀取資料塊的大小
      • “count=”指定讀取資料塊的數量
  • 示例:
##向/mailbox 目錄下寫入一個名為 ddtest.data 的測試檔案,大小為 4MB(分四次讀取,每次 1MB),複製來源為裝置檔案/dev/zero
[root@localhost ~]# dd if=/dev/zero of=/mailbox/ddtest.data bs=1M count=4
4+0 records in
4+0 records out
4194304 bytes (4.2 MB) copied, 0.00502839 s, 834 MB/s [root@localhost ~]# ls -lh /mailbox/ddtest.data
-rw-r--r--. 1 root root 4.0M May 17 10:03 /mailbox/ddtest.data
  • 若要測試/mailbox 檔案系統對使用者 zhangsan 的磁碟配額是否有效,需要以 zhangsan 使用者登入,並切換到/mailbox 目錄下,使用 dd 命令建立特定大小的檔案進行測試(因容量換算採用 1024 進位制的關係,故顯示的大小與實際大小會存在少許出入)
[zhangsan@localhost ~]$ cd /mailbox/
[zhangsan@localhost mailbox]$ dd if=/dev/zero of=myfile bs=1M count=60
記錄了 60+0 的讀入
記錄了 60+0 的寫出	//在軟限制範圍內時成功寫入資料62914560 位元組(63 MB)已複製,0.381649 秒,165 MB/秒
[zhangsan@localhost mailbox]$ ls -lh myfile
-rw-rw-r-- 1 zhangsan zhangsan 60M 55 22:53 myfile [zhangsan@localhost mailbox]$ dd if=/dev/zero of=myfile bs=1M count=90 
記錄了 90+0 的讀入
記錄了 90+0 的寫出	//未超出硬限制前仍能寫入資料94371840 位元組(94 MB)已複製,0.136925 秒,689 MB/秒
[zhangsan@localhost mailbox]$ ls -lh myfile
-rw-rw-r-- 1 zhangsan zhangsan 90M 55 22:57 myfile [zhangsan@localhost mailbox]$ dd if=/dev/zero of=myfile bs=1M count=120 dd: 寫入"myfile" 出錯: 超出磁碟限額
記錄了 101+0 的讀入
記錄了 100+0 的寫出	//超出硬限制的資料將被截斷,無法寫入104857600 位元組(105 MB)已複製,0.12214 秒,859 MB/秒
[zhangsan@localhost mailbox]$ ls -lh myfile
-rw-rw-r-- 1 zhangsan zhangsan 100M 55 22:57 myfile

4.4 檢視配額使用情況

  • 若需要了解在檔案系統中使用者或組的配額使用情況,可以使用 report 命令檢視
    • 結合“-u” 和“-g”選項分別檢視指定使用者和組的配額使用情況
    • 結合“-a”選項可以檢視所有可用分割槽的配額使用報告
  • 示例:
##檢視所有可用分割槽的磁碟容量配額使用情況
[root@localhost ~]# xfs_quota -x -c 'report -a'
User quota on /mailbox (/dev/mapper/mail_store-mbox)
Blocks
User ID	Used	Soft	Hard	Warn/Grace
---------- --------------------------------------------------

root	4096	0	0	00 [0 days]
zhangsan	92160	81920	102400	00 [2 days]

Group quota on /mailbox (/dev/mapper/mail_store-mbox)
Blocks
Group ID	Used	Soft	Hard	Warn/Grace
---------- --------------------------------------------------
root	4096	0	0	00 [--------]
zhangsan	92160	0	0	00 [--------]
user	0	1048576	2097152	00 [--------]

##若想同時檢視磁碟容量和檔案輸的報告可結合“-i”與“-b”選項使用
[root@localhost ~]# xfs_quota -x -c 'report -abi'
User quota on /mailbox (/dev/mapper/mail_store-mbox)
Blocks	Inodes
User ID	Used	Soft Hard   Warn/Grace	Used Soft Hard Warn/Grace

------- -------------------------------	-------------------------	
root	4096	0	0	00 [0 days]	4	0	0	00 [0 days]
zhangsan   92160	81920	102400	00 [2 days]	1	40	50	00 [------]


Group quota on /mailbox (/dev/mapper/mail_store-mbox)

	Blocks	Inodes
User ID	Used	Soft Hard Warn/Grace	Used Soft Hard Warn/Grace
-------  -------------------------------	--------------------------

root	4096	0	0	00 [-----]	4	0	0	00 [-----]
zhangsan	92160	0	0	00 [-----]	1	0	0	00 [-----]
user	0	1048576	2097152	00 [-----]	0	2000	2500	00 [-----]

相關文章