Linux—磁碟配額,管理LVM邏輯卷
前言
許多 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 分割槽管理機制的過程
- 首先,將普通分割槽或整個硬碟建立為物理卷
- 然後,將物理上比較分散的各物理卷的儲存空間組成一個邏輯整體,即卷組
- 最後,基於卷組這個整體,分割出不同的資料存 儲空間,形成邏輯卷。邏輯卷才是終端使用者可以格式化並掛載使用的儲存單位
二、LVM 的管理命令
LVM 管理命令主要包括三大類:物理卷(PV)管理、卷組(VG)管理、邏輯卷(LV) 管理,對應的命令程式檔案分別以“pv”、“vg”、“lv”開頭
功能 | PV管理命令 | VG管理命令 | LV管理命令 |
---|---|---|---|
Scan(掃描) | pvscan | vgscan | lvscan |
Create(建立) | pvcreate | vgcreate | lvcreate |
Display(顯示) | pvdisplay | vgdisplay | lvdisplay |
Remove(移除) | pvremove | vgremove | lvremove |
Extend(擴充套件) | vgextend | lvextend | |
Reduce(減少) | vgreduce | lvreduce |
- 命令的幾種格式
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=”指定讀取資料塊的數量
- dd 命令是一個裝置轉換和複製命令
- 示例:
##向/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 5 月 5 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 5 月 5 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 5 月 5 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 [-----]
相關文章
- Linux下LVM邏輯卷管理LinuxLVM
- 手把手教學----LVM邏輯卷管理與磁碟配額實操全流程LVM
- LVM 邏輯卷管理LVM
- linux之LVM邏輯卷LinuxLVM
- LVM_邏輯卷管理LVM
- 在Linux中,如何使用LVM管理邏輯卷?LinuxLVM
- Linux LVM Logical Volume Management 邏輯卷的管理LinuxLVM
- lvm 擴充邏輯卷空間(linux的磁碟擴容)LVMLinux
- linux 磁碟分割槽掛載-LVM-物理卷PV,卷組VG,邏輯卷LVLinuxLVM
- LVM與磁碟配額LVM
- Linux的LVM與磁碟配額(理論+配寫)LinuxLVM
- LVM與磁碟配額管理 so easy come onLVM
- LVM邏輯卷線上動態擴容磁碟空間LVM
- 如何在 Ubuntu 中管理和使用邏輯卷管理 LVMUbuntuLVM
- LVM與磁碟配額(包含磁碟配額與驗證實操)LVM
- Linux作業系統邏輯盤卷管理LVM建立步驟(轉)Linux作業系統LVM
- 什麼是LVM邏輯卷管理?0基礎學Linux運維LVMLinux運維
- linux 磁碟自動化分割槽掛載-LVM-物理卷PV,卷組VG,邏輯卷LV-shellLinuxLVM
- 一文全解:LVM(邏輯卷管理器)LVM
- 『學了就忘』Linux檔案系統管理 — 65、LVM邏輯卷管理介紹LinuxLVM
- lvm收縮邏輯卷空間LVM
- Linux下的磁碟分割槽和邏輯卷Linux
- 在Linux中,如何管理磁碟配額?Linux
- 如何新建邏輯卷及磁碟掛載,邏輯卷擴容
- Linux磁碟配額配置Linux
- Linux硬碟掛載與磁碟分割槽基礎(二)(物理卷、卷組、邏輯卷)Linux硬碟
- Centos8中建立LVM精簡邏輯卷CentOSLVM
- Linux-使用者管理與建立邏輯卷Linux
- 在LVM中恢復已刪除的邏輯卷LVM
- Linux LVM磁碟管理與FS掛載LinuxLVM
- Lvm邏輯卷管理、建立、使用、擴充套件、縮減、遷移、快照、恢復LVM套件
- linux系統掛載邏輯卷和擴充套件邏輯卷組Linux套件
- ENGINEER01 - 分割槽規劃和使用,LVM邏輯卷LVM
- 實操CentOS8系統中建立LVM邏輯卷CentOSLVM
- 磁碟配額
- K8S-磁碟配額管理-整理K8S
- linux 給lvm磁碟擴容LinuxLVM
- 『學了就忘』Linux檔案系統管理 — 63、磁碟配額介紹Linux