LVM分區(qū)管理實(shí)戰(zhàn):創(chuàng)建和擴(kuò)容的完整指南
在生產(chǎn)環(huán)境中,通常會使用LVM(Logical Volume Manager,邏輯卷管理)作為管理存儲設(shè)備的工具,以便于快速靈活地進(jìn)行擴(kuò)容、縮容等操作。本文將展示如何基于LVM創(chuàng)建分區(qū),并對該分區(qū)擴(kuò)容。
首先,我們需要認(rèn)識LVM中的幾個(gè)基本概念:
- 物理卷(Physical Volume,PV):存儲底層的塊設(shè)備,通常是物理磁盤,也可以是磁盤上的某個(gè)分區(qū)。
- 卷組(Volume Group,VG):由一個(gè)或多個(gè)物理卷組成,為邏輯卷提供待分配的空間。
- 邏輯卷(Logical Volume,LV):從卷組中劃分的虛擬分區(qū),是實(shí)際上用于存儲文件系統(tǒng)的空間。
- 物理塊(Physical Extent,PE):LVM中用于分配的最小存儲單元,默認(rèn)為4MB,邏輯卷和物理卷都由這種單元構(gòu)成,并且組成同一卷組的PE大小相同。
壹、初始分區(qū)環(huán)境
首先看一下當(dāng)前的分區(qū)情況:
圖片
我們計(jì)劃在 vdb 這塊磁盤上創(chuàng)建一個(gè)LVM分區(qū),掛載到工作目錄/tyun。
貳、創(chuàng)建一個(gè)基本LVM分區(qū)
剛掛載的物理磁盤需要經(jīng)過 LVM 的初始化操作,才能被 LVM 管理。
具體流程如下:
1. 創(chuàng)建物理卷、卷組和邏輯卷
# 創(chuàng)建物理卷,將磁盤vdb加入lvm管理
root@ubuntu:~# pvcreate /dev/vdb
Physical volume "/dev/vdb" successfully created.
# 創(chuàng)建一個(gè)卷組,命名為vg0,并將物理卷添加進(jìn)去
root@ubuntu:~# vgcreate vg0 /dev/vdb
Volume group "vg0" successfully created
# 創(chuàng)建邏輯卷組,-n參數(shù)指定新建邏輯卷的名稱(我命名為lv0),-l 100%FREE表示添加卷組內(nèi)所有剩余空間
root@ubuntu:~# lvcreate -l 100%FREE -n lv0 vg0
Logical volume "lv0" created.
2. 查看物理卷、卷組和邏輯卷
# 查看物理卷狀態(tài),想查看詳細(xì)信息可用pvdisplay
root@ubuntu:~# pvs
PV VG Fmt Attr PSize PFree
/dev/vdb vg0 lvm2 a-- <30.00g 0
# 查看卷組狀態(tài),想查看詳細(xì)信息可用vgdisplay
root@ubuntu:~# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 1 1 0 wz--n- <30.00g 0
# 查看邏輯卷狀態(tài),想查看詳細(xì)信息可用lvdisplay
root@ubuntu:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv0 vg0 -wi-a----- <30.00g
因?yàn)榇疟P操作涉及數(shù)據(jù),每一步的檢查都是必要的,每一步的操作都要小心謹(jǐn)慎。
3.格式化邏輯卷
# 根據(jù)相應(yīng)的文件系統(tǒng)格式化邏輯卷,例如使用ext4文件系統(tǒng)
root@ubuntu:~# mkfs.ext4 /dev/vg0/lv0
mke2fs 1.44.1 (24-Mar-2018)
Creating filesystem with 7863296 4k blocks and 1966080 inodes
Filesystem UUID: 168c20f6-f93a-4f6a-9d4f-93609b53fc44
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
此時(shí)再次查看磁盤分區(qū),發(fā)現(xiàn) vdb 磁盤下已經(jīng)有了一個(gè) lvm 分區(qū)。
圖片
4. 掛載分區(qū)到工作目錄上
# 將vdb的lvm分區(qū)掛載到/tyun工作目錄上
root@ubuntu:~# mount /dev/vg0/lv0 /tyun
需要提醒的是,該命令只是臨時(shí)掛載,系統(tǒng)重啟就會取消。如果想要掛載持久化,需要編輯/etc/fstab文件,讓系統(tǒng)啟動時(shí)自動掛載。
具體操作如下:
# 用blkid命令查看邏輯磁盤lv0的uuid
root@ubuntu:~# blkid /dev/vg0/lv0
/dev/vg0/lv0: UUID="168c20f6-f93a-4f6a-9d4f-93609b53fc44" TYPE="ext4"
# 編輯/etc/fstab文件,將lv0的信息添加在新行
root@ubuntu:~# vim /etc/fstab
UUID=baf9b14e-1faf-11e9-84e3-fa9a00532b00 / ext4 defaults 0 0
UUID=168c20f6-f93a-4f6a-9d4f-93609b53fc44 /tyun ext4 defaults 0 0
查看分區(qū),已經(jīng)成功掛載。
叁、擴(kuò)容LVM分區(qū)
LVM最強(qiáng)大的地方就在于可以靈活地對邏輯卷進(jìn)行擴(kuò)容和縮容,此時(shí)我們需要對剛剛創(chuàng)建的/tyun分區(qū)進(jìn)行擴(kuò)容,添加一塊磁盤 vdc 后,分區(qū)情況如下:
圖片
1. 將新添加的磁盤 vdc 初始化為物理卷
root@ubuntu:~# pvcreate /dev/vdc
Physical volume "/dev/vdc" successfully created.
root@ubuntu:~# pvs
PV VG Fmt Attr PSize PFree
/dev/vdb vg0 lvm2 a-- <30.00g 0
/dev/vdc lvm2 --- 30.00g 30.00g
2. 對現(xiàn)有卷組 vg0 進(jìn)行擴(kuò)展,把新的物理卷加入
root@ubuntu:~# vgextend vg0 /dev/vdc
Volume group "vg0" successfully extended
查看當(dāng)前卷組,確認(rèn)卷組容量已擴(kuò)容,確認(rèn) vdc 已加入 vg0 。
3. 對掛載工作目錄/tyun的邏輯卷 lv0 進(jìn)行擴(kuò)容
# 新添加的磁盤有30G,本次僅擴(kuò)容20G空間
# 使用 -L 選項(xiàng)并使用 +20G 參數(shù)擴(kuò)展邏輯卷
root@ubuntu:~# lvextend -L +20G /dev/vg0/lv0
Size of logical volume vg0/lv0 changed from <30.00 GiB (7679 extents) to <50.00 GiB (12799 extents).
Logical volume vg0/lv0 successfully resized.
此時(shí)查看分區(qū)信息,發(fā)現(xiàn)邏輯卷 lv0 已經(jīng)擴(kuò)容到 50G,但/tyun分區(qū)還是原來的 30G。
這是因?yàn)槲募到y(tǒng)層感知不到邏輯卷的大小變化,需要用一些工具根據(jù)實(shí)際的卷空間,重新調(diào)整文件系統(tǒng)的大小。
4. 調(diào)整文件系統(tǒng)的大小
因?yàn)槭?nbsp;ext4 文件系統(tǒng),使用resize2fs工具在線擴(kuò)容。如果是 xfs 文件系統(tǒng),可使用xfs_growfs工具進(jìn)行擴(kuò)容。
# 使用邏輯卷的整個(gè)可用空間,以適應(yīng)邏輯卷的新大小
root@ubuntu:~# resize2fs /dev/vg0/lv0
resize2fs 1.44.1 (24-Mar-2018)
Filesystem at /dev/vg0/lv0 is mounted on /tyun; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 7
The filesystem on /dev/vg0/lv0 is now 13106176 (4k) blocks long.
再次查看,已經(jīng)完成擴(kuò)容。
肆、關(guān)于LVM的一些擴(kuò)展
1. 磁盤空間收縮
與擴(kuò)容相反,這是個(gè)不常見的操作,同樣是通過分配邏輯卷空間實(shí)現(xiàn),涉及到文件系統(tǒng)調(diào)整,且需要卸載分區(qū),如果條件允許,操作前一定要進(jìn)行備份。
# 1. 卸載分區(qū),調(diào)整文件系統(tǒng)空間,例如將 50G 空間調(diào)整為 40G
root@ubuntu:~# umount /tyun # 卸載分區(qū)
root@ubuntu:~# e2fsck -f /dev/vg0/lv0 # 檢查文件系統(tǒng)
e2fsck 1.44.1 (24-Mar-2018)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg0/lv0: 11/3276800 files (0.0% non-contiguous), 251751/13106176 blocks
root@ubuntu:~# resize2fs /dev/vg0/lv0 40G # 調(diào)整文件系統(tǒng)大小
resize2fs 1.44.1 (24-Mar-2018)
Resizing the filesystem on /dev/vg0/lv0 to 10485760 (4k) blocks.
The filesystem on /dev/vg0/lv0 is now 10485760 (4k) blocks long.
# 2. 調(diào)整邏輯卷大小
root@ubuntu:~# lvreduce -L -10G /dev/vg0/lv0
WARNING: Reducing active logical volume to <40.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/lv0? [y/n]: y
Size of logical volume vg0/lv0 changed from <50.00 GiB (12799 extents) to <40.00 GiB (10239 extents).
Logical volume vg0/lv0 successfully resized.
此時(shí)查看 lv0 邏輯卷大小,已經(jīng)縮容到 40G,重新掛載到工作目錄即可。
再次提醒,縮小磁盤容量是一個(gè)敏感操作,可能導(dǎo)致數(shù)據(jù)丟失,一定要確保對重要文件做了備份,以及預(yù)留了足夠的縮容空間。
LVM 的快照功能
LVM的快照就是對邏輯卷拷貝一份副本,可以在進(jìn)行重要操作前創(chuàng)建一個(gè)邏輯卷快照,防止操作意外導(dǎo)致的數(shù)據(jù)損失。
root@ubuntu:~# lvcreate --size 5G --snapshot --name lv0_snapshot_231225 /dev/vg0/lv0
Using default stripesize 64.00 KiB.
Logical volume "lv0_snapshot_231225" created.
- --size:指定快照的大小
- --snapshot:表示創(chuàng)建快照操作
- --name:指定快照的名稱
- /dev/vg0/lv0:指定需要?jiǎng)?chuàng)建快照的邏輯卷
使用快照就是將這個(gè)快照的邏輯卷掛載到新建的某個(gè)目錄上。
LVM 默認(rèn)創(chuàng)建的快照是 COW(Copy-On-Write,寫時(shí)復(fù)制)類型的,即在原始卷上寫入時(shí),在快照卷記錄發(fā)生變化的數(shù)據(jù),這種類型可以在創(chuàng)建快照后繼續(xù)對原始卷進(jìn)行寫入而不影響快照一致性,一般用于測試操作前的備份。
如果在創(chuàng)建快照的命令中加-ro參數(shù),可以創(chuàng)建一個(gè)RO(Read-Only,只讀)快照,它是原始卷的靜態(tài)副本,不允許在快照卷上進(jìn)行寫入操作,通常用于記錄某個(gè)時(shí)間點(diǎn)的原始卷狀態(tài)。
伍、總結(jié)
LVM 作為 Linux 下的磁盤管理工具,已在各種環(huán)境和場景中得到了廣泛應(yīng)用,將底層的存儲設(shè)備抽象成一個(gè)邏輯層,令運(yùn)維人員可以靈活和高效地管理存儲空間,并提供了快照等豐富功能。
掌握 LVM 如何擴(kuò)容,熟悉它的功能,是系統(tǒng)運(yùn)維人員必修的技能,但須注意:在生產(chǎn)環(huán)境中,任何對磁盤的操作都是高危操作,一定要小心謹(jǐn)慎,避免影響數(shù)據(jù)!