目錄一、LVM概述二、基本術語三、PE、PV、VG、LV之間的關係四、LVM的工作原理五、LVM的使用1、部署邏輯捲第一步:還原快照,併在虛擬機添加兩塊新硬碟設備,開機第二步:讓新添加的兩塊硬碟設備支持LVM技術第三步:把兩塊硬碟設備加入到storage捲組中,查看捲組狀態第四步:切割出一個148M ...
目錄
- 一、LVM概述
- 二、基本術語
- 三、PE、PV、VG、LV之間的關係
- 四、LVM的工作原理
- 五、LVM的使用
- 六、LVM的優缺點
- 七、Linux中的LVM
一、LVM概述
LVM
是 Logical Volume Manager(邏輯捲管理器)
的簡寫。邏輯捲管理器是Linux系統用於對硬碟分區進行管理的一種機制,理論性較強,其創建初衷是為瞭解決硬碟設備在創建分區後不易修改分區大小的缺陷。儘管對傳統的硬碟分區進行強制擴容或縮容從理論上來講是可行的,但是卻可能造成數據的丟失。而LVM技術是在硬碟分區和文件系統之間添加了一個邏輯層,它提供了一個抽象的捲組,可以把多塊硬碟進行捲組合併。這樣一來,用戶不必關心物理硬碟設備的底層架構和佈局,就可以實現對硬碟分區的動態調整。
二、基本術語
- 物理存儲介質(PhysicalStorageMedia)
指系統的物理存儲設備:磁碟,如:/dev/hda、/dev/sda等,是存儲系統最底層的存儲單元。
- 物理捲(Physical Volume,PV)
指磁碟分區或從邏輯上與磁碟分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁碟等)比較,卻包含有與LVM相關的管理參數。
- 捲組(Volume Group,VG)
類似於非LVM系統中的物理磁碟,其由一個或多個物理捲PV組成。可以在捲組上創建一個或多個LV(邏輯捲)。
- 邏輯捲(Logical Volume,LV)
類似於非LVM系統中的磁碟分區,邏輯捲建立在捲組VG之上。在邏輯捲LV之上可以建立文件系統(比如/home或者/usr等)。
- 物理塊(Physical Extent,PE)
PE是物理捲PV的基本劃分單元,具有唯一編號的PE是可以被LVM定址的最小單元。PE的大小是可配置的,預設為4MB。所以物理捲(PV)由大小等同的基本單元PE組成。
- 邏輯塊(Logical Extent,LE)
邏輯捲LV也被劃分為可被定址的基本單位,稱為LE。在同一個捲組中,LE的大小和PE是相同的,並且一一對應。
三、PE、PV、VG、LV之間的關係
四、LVM的工作原理
- 物理磁碟被格式化為PV,空間被劃分為一個個的PE。
- 不同的PV加入到同一個VG中,不同PV的PE全部進入到了VG的PE池內。
- LV基於PE創建,大小為PE的整數倍,組成LV的PE可能來自不同的物理磁碟。
- LV現在就直接可以格式化後掛載使用了。
- LV的擴充縮減實際上就是增加或減少組成該LV的PE數量,其過程不會丟失原始數據 。
五、LVM的使用
1、部署邏輯捲
常用的LVM部署命令
功能/命令 | 物理捲管理 | 捲組管理 | 邏輯捲管理 |
---|---|---|---|
掃描 | pvscan | vgscan | lvscan |
建立 | pvcreate | vgcreate | lvcreate |
顯示 | pvdisplay | vgdisplay | lvdisplay |
刪除 | pvremove | vgremove | lvremove |
擴展 | vgextend | lvextend | |
縮小 | vgreduce | lvreduce |
第一步:
還原快照,併在虛擬機添加兩塊新硬碟設備,開機
第二步:
讓新添加的兩塊硬碟設備支持LVM技術
[root@localhost ~]# lsblk #確保已正確新增兩塊硬碟
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos_192-root 253:0 0 17G 0 lvm /
└─centos_192-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sr0 11:0 1 4.4G 0 rom
[root@localhost ~]# pvcreate /dev/sdb /dev/sdc #來將磁碟設備 /dev/sdb 和 /dev/sdc 初始化為物理捲(PV)以支持LVM(邏輯捲管理器)技術。
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
第三步:
把兩塊硬碟設備加入到storage捲組中,查看捲組狀態
[root@localhost ~]# vgcreate storage /dev/sdb /dev/sdc #將物理捲 /dev/sdb 和 /dev/sdc 合併在一起,形成一個新的名為"storage"捲組。
Volume group "storage" successfully created
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name centos_192
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <19.00 GiB
PE Size 4.00 MiB
Total PE 4863
Alloc PE / Size 4863 / <19.00 GiB
Free PE / Size 0 / 0
VG UUID Qtwzup-pc0G-gAaa-Icyt-UfLP-CuM6-3VnATy
--- Volume group ---
VG Name storage
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 SJWDak-DLob-UssH-6d8g-Ms8Y-R2Di-dczcAw
第四步:
切割出一個148MB的邏輯捲設備
在對邏輯捲進行切割時有兩種計量單位
- 以容量為單位,使用參數
-L
。例如使用-L 150M
生成一個大小為150MB的邏輯捲。 - 以基本單元的個數為單位,使用的參數為
-l
。每個基本單元的大小預設為4MB
。例如使用-l 37
可以生成一個大小為37*4MB=148MB的邏輯捲。
-l
切割:
[root@localhost ~]# lvcreate -n vo -l 37 storage #參數-n後面跟的是要創建的邏輯捲名稱
Logical volume "vo" created.
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/centos_192/swap
LV Name swap
VG Name centos_192
LV UUID XDa9D8-hZj7-QVSC-qiQ0-lbaQ-QKRZ-LeZXcT
LV Write Access read/write
LV Creation host, time 192.168.112.140, 2023-08-12 17:05:09 +0800
LV Status available
# open 2
LV Size 2.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/centos_192/root
LV Name root
VG Name centos_192
LV UUID pHMI0L-5zIz-U6RU-g7L0-1Uy1-K01W-SNxrJi
LV Write Access read/write
LV Creation host, time 192.168.112.140, 2023-08-12 17:05:09 +0800
LV Status available
# open 1
LV Size <17.00 GiB
Current LE 4351
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
--- Logical volume ---
LV Path /dev/storage/vo
LV Name vo
VG Name storage
LV UUID h6L7tj-pz3i-Iear-RK9Y-Fu0M-iVEc-HOn8On
LV Write Access read/write
LV Creation host, time localhost, 2024-02-06 20:50:44 +0800
LV Status available
# open 0
LV Size 148.00 MiB
Current LE 37
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
-L
切割:
[root@localhost ~]# lvcreate -n vo -L 148M storage
Logical volume "vo" created.
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/centos_192/swap
LV Name swap
VG Name centos_192
LV UUID XDa9D8-hZj7-QVSC-qiQ0-lbaQ-QKRZ-LeZXcT
LV Write Access read/write
LV Creation host, time 192.168.112.140, 2023-08-12 17:05:09 +0800
LV Status available
# open 2
LV Size 2.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/centos_192/root
LV Name root
VG Name centos_192
LV UUID pHMI0L-5zIz-U6RU-g7L0-1Uy1-K01W-SNxrJi
LV Write Access read/write
LV Creation host, time 192.168.112.140, 2023-08-12 17:05:09 +0800
LV Status available
# open 1
LV Size <17.00 GiB
Current LE 4351
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
--- Logical volume ---
LV Path /dev/storage/vo
LV Name vo
VG Name storage
LV UUID uIyQ4u-fs8f-gDkr-L4Kw-eqC9-FQzq-PwgtL5
LV Write Access read/write
LV Creation host, time localhost, 2024-02-06 21:10:05 +0800
LV Status available
# open 0
LV Size 148.00 MiB
Current LE 37
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
第五步:
把生成好的邏輯捲進行格式化,然後掛載使用
[root@localhost ~]# mkfs.ext4 /dev/storage/vo
mke2fs 1.42.9 (28-Dec-2013)
文件系統標簽=
OS type: Linux
塊大小=1024 (log=0)
分塊大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
38000 inodes, 151552 blocks
7577 blocks (5.00%) reserved for the super user
第一個數據塊=1
Maximum filesystem blocks=33816576
19 block groups
8192 blocks per group, 8192 fragments per group
2000 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: 完成
正在寫入inode表: 完成
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@localhost ~]# mkdir /vo #根目錄下創建vo掛載點
[root@localhost ~]# mount /dev/storage/vo /vo
[root@localhost ~]# df -h #查看成功掛載
文件系統 容量 已用 可用 已用% 掛載點
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos_192-root 17G 2.0G 16G 12% /
/dev/sda1 1014M 151M 864M 15% /boot
tmpfs 378M 0 378M 0% /run/user/0
/dev/mapper/storage-vo 140M 1.6M 128M 2% /vo
[root@localhost ~]# echo "/dev/storage/vo /vo ext4 defaults 0 0" >> /etc/fstab #寫入配置文件使之永久生效
2、擴容邏輯捲
第一步:
把上一個實驗中的邏輯捲vo
擴展至292MB
[root@localhost ~]# umount /vo
[root@localhost ~]# lvextend -L 292M /dev/storage/vo
Rounding size to boundary between physical extents: 292.00 MiB.
Size of logical volume storage/vo changed from 148.00 MiB (37 extents) to 292.00 MiB (73 extents).
Logical volume storage/vo successfully resized.
第二步:
檢查硬碟完整性,並重置硬碟容量
[root@localhost ~]# e2fsck -f /dev/storage/vo #檢查 ext2、ext3 和 ext4 文件系統的工具。這裡的 -f 參數強制進行文件系統的完整性檢查,即使文件系統是“乾凈”的(即上次關機時沒有錯誤)。
e2fsck 1.42.9 (28-Dec-2013)
第一步: 檢查inode,塊,和大小
第二步: 檢查目錄結構
第3步: 檢查目錄連接性
Pass 4: Checking reference counts
第5步: 檢查簇概要信息
/dev/storage/vo: 11/38912 files (0.0% non-contiguous), 10567/155648 blocks
[root@localhost ~]# resize2fs /dev/storage/vo #同步更新文件系統的大小以匹配新的邏輯捲大小
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/vo to 299008 (1k) blocks.
The filesystem on /dev/storage/vo is now 299008 blocks long.
[root@localhost ~]# lvdisplay #看到邏輯捲vo變為292MB
--- Logical volume ---
LV Path /dev/centos_192/swap
LV Name swap
VG Name centos_192
LV UUID XDa9D8-hZj7-QVSC-qiQ0-lbaQ-QKRZ-LeZXcT
LV Write Access read/write
LV Creation host, time 192.168.112.140, 2023-08-12 17:05:09 +0800
LV Status available
# open 2
LV Size 2.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/centos_192/root
LV Name root
VG Name centos_192
LV UUID pHMI0L-5zIz-U6RU-g7L0-1Uy1-K01W-SNxrJi
LV Write Access read/write
LV Creation host, time 192.168.112.140, 2023-08-12 17:05:09 +0800
LV Status available
# open 1
LV Size <17.00 GiB
Current LE 4351
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
--- Logical volume ---
LV Path /dev/storage/vo
LV Name vo
VG Name storage
LV UUID MeqJRa-F8kt-jLi8-hmZV-co3K-KIvR-NjG9m0
LV Write Access read/write
LV Creation host, time localhost, 2024-02-06 21:35:32 +0800
LV Status available
# open 0
LV Size 292.00 MiB
Current LE 73
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
第三步:
重新掛載硬碟設備並查看掛載狀態
[root@localhost /]# mount /dev/storage/vo /vo
[root@localhost /]# df -h
文件系統 容量 已用 可用 已用% 掛載點
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos_192-root 17G 2.0G 16G 12% /
/dev/sda1 1014M 151M 864M 15% /boot
tmpfs 378M 0 378M 0% /run/user/0
/dev/mapper/storage-vo 279M 2.1M 259M 1% /vo
3、縮小邏輯捲
第一步:
檢查文件系統的完整性
[root@localhost ~]# umount /vo
[root@localhost ~]# e2fsck -f /dev/storage/vo
e2fsck 1.42.9 (28-Dec-2013)
第一步: 檢查inode,塊,和大小
第二步: 檢查目錄結構
第3步: 檢查目錄連接性
Pass 4: Checking reference counts
第5步: 檢查簇概要信息
/dev/storage/vo: 11/75776 files (0.0% non-contiguous), 15729/299008 blocks
第二步:
把邏輯捲vo
的容量減少到120MB
[root@localhost ~]# resize2fs /dev/storage/vo 120M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/vo to 122880 (1k) blocks.
The filesystem on /dev/storage/vo is now 122880 blocks long.
[root@localhost ~]# lvreduce -L 120M /dev/storage/vo
WARNING: Reducing active logical volume to 120.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce storage/vo? [y/n]: y
Size of logical volume storage/vo changed from 240.00 MiB (60 extents) to 120.00 MiB (30 extents).
Logical volume storage/vo successfully resized.
第三步:
重新掛載文件系統並查看系統狀態
[root@localhost ~]# mount /dev/storage/vo /vo
[root@localhost ~]# df -h
文件系統 容量 已用 可用 已用% 掛載點
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos_192-root 17G 2.0G 16G 12% /
/dev/sda1 1014M 151M 864M 15% /boot
tmpfs 378M 0 378M 0% /run/user/0
/dev/mapper/storage-vo 113M 1.6M 103M 2% /vo
3、邏輯捲快照
LVM還具備有快照捲
功能,該功能類似於虛擬機軟體的還原時間點功能。例如,可以對某一個邏輯捲設備做一次快照,如果日後發現數據被改錯了,就可以利用之前做好的快照捲進行覆蓋還原。LVM的快照捲功能有兩個特點:
- 快照捲的容量必須等同於邏輯捲的容量;
- 快照捲僅一次有效,一旦執行還原操作後則會被立即自動刪除。
先在/vo
下創建一個readme.txt
文件用來驗證邏輯捲快照還原前後狀態變化
[root@localhost ~]# echo "hello LVM" >> /vo/readme.txt
[root@localhost ~]# ls -l /vo
總用量 13
drwx------ 2 root root 12288 2月 6 22:04 lost+found
-rw-r--r-- 1 root root 10 2月 6 22:10 readme.txt
第一步:
使用-s
參數生成一個快照捲,使用-L
參數指定切割的大小
[root@localhost ~]# lvcreate -L 120M -s -n SNAP /dev/storage/vo #在 "storage" 捲組下,基於名為 "vo" 的現有邏輯捲,創建一個容量為120MB的快照捲,並將這個新的快照捲命名為 "SNAP"
Logical volume "SNAP" created.
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/storage/vo
LV Name vo
VG Name storage
LV UUID ywJ3ah-At9t-t65q-0JsQ-i45Q-pyeh-iHhxWN
LV Write Access read/write
LV Creation host, time localhost, 2024-02-06 22:04:25 +0800
LV snapshot status source of
SNAP [active]
LV Status available
# open 1
LV Size 120.00 MiB
Current LE 30
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
--- Logical volume ---
LV Path /dev/storage/SNAP
LV Name SNAP
VG Name storage
LV UUID JZpfG2-T6Yl-ODCF-CVnR-34Uw-pGQ9-3skxG9
LV Write Access read/write
LV Creation host, time localhost, 2024-02-06 22:11:07 +0800
LV snapshot status active destination for vo
LV Status available
# open 0
LV Size 120.00 MiB
Current LE 30
COW-table size 120.00 MiB
COW-table LE 30
Allocated to snapshot 0.01%
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:5
第二步:
在邏輯捲所掛載的目錄中創建一個100MB的垃圾文件,然後再查看快照捲的狀態。發現存儲空間的占用量上升了
[root@localhost ~]# dd if=/dev/zero of=/vo/file bs=100M count=1
記錄了1+0 的讀入
記錄了1+0 的寫出
104857600位元組(105 MB)已複製,1.21787 秒,86.1 MB/秒
[root@localhost ~]# ll -ht /vo/file
-rw-r--r-- 1 root root 100M 2月 6 22:19 /vo/file
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/storage/vo
LV Name vo
VG Name storage
LV UUID ywJ3ah-At9t-t65q-0JsQ-i45Q-pyeh-iHhxWN
LV Write Access read/write
LV Creation host, time localhost, 2024-02-06 22:04:25 +0800
LV snapshot status source of
SNAP [active]
LV Status available
# open 1
LV Size 120.00 MiB
Current LE 30
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
--- Logical volume ---
LV Path /dev/storage/SNAP
LV Name SNAP
VG Name storage
LV UUID JZpfG2-T6Yl-ODCF-CVnR-34Uw-pGQ9-3skxG9
LV Write Access read/write
LV Creation host, time localhost, 2024-02-06 22:11:07 +0800
LV snapshot status active destination for vo
LV Status available
# open 0
LV Size 120.00 MiB
Current LE 30
COW-table size 120.00 MiB
COW-table LE 30
Allocated to snapshot 83.71%
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:5
第三步:
為了校驗SNAP快照捲的效果,需要對邏輯捲進行快照還原操作。在此之前記得先卸載掉邏輯捲設備與目錄的掛載。
[root@localhost ~]# umount /vo
[root@localhost ~]# lvconvert --merge /dev/storage/SNAP #合併(merge)快照捲 "SNAP" 回到其源捲 "vo"
Merging of volume storage/SNAP started.
storage/vo: Merged: 23.03%
storage/vo: Merged: 100.00%
第四步:
快照捲會被自動刪除掉,並且剛剛在邏輯捲設備被執行快照操作後再創建出來的100MB的垃圾文件也被清除了而/vo/readme.txt
還在
[root@localhost ~]# mount -a
[root@localhost ~]# ls /vo/
lost+found readme.txt
[root@localhost ~]# cat /vo/readme.txt
hello LVM
4、刪除邏輯捲
第一步:
取消邏輯捲與目錄的掛載關聯,刪除配置文件中永久生效的設備參數。
[root@localhost ~]# umount /vo/
[root@localhost ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat Aug 12 17:05:10 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos_192-root / xfs defaults 0 0
UUID=01838dd0-44b0-4056-b0e2-96760522a11b /boot xfs defaults 0 0
/dev/mapper/centos_192-swap swap swap defaults 0 0
第二步:
刪除邏輯捲設備,需要輸入y來確認操作
[root@localhost ~]# lvremove /dev/storage/vo
Do you really want to remove active logical volume storage/vo? [y/n]: y
Logical volume "vo" successfully removed
第三步:
刪除捲組,此處只寫捲組名稱即可,不需要設備的絕對路徑。
[root@localhost ~]# vgremove storage
Volume group "storage" successfully removed
第四步:
刪除物理捲設備
[root@localhost ~]# pvremove /dev/sdb /dev/sdc
Labels on physical volume "/dev/sdb" successfully wiped.
Labels on physical volume "/dev/sdc" successfully wiped.
六、LVM的優缺點
優點:
- 動態擴展:在系統運行時可以線上增加或減少邏輯捲的大小,無需重啟服務或操作系統,提供對存儲空間的動態管理能力。
- 靈活性:允許文件系統跨越多個物理磁碟,突破單個硬碟容量限制,可以根據需要調整邏輯捲佈局,實現存儲資源的有效利用。
- 擴展性:可以方便地向現有的捲組中添加新的物理磁碟,進一步擴大存儲池容量。
- 高可用與冗餘:支持鏡像和條帶化技術,能夠將數據冗餘到多個磁碟上以提高數據安全性及讀寫性能。
- 數據遷移便捷:可以更容易地遷移或備份整個邏輯捲至其他系統或硬體環境。
缺點:
- 在從捲組中移除一個磁碟的時候必須使用reducevg命令(這個命令要求root許可權,並且不允許在快照捲組中使用)。
- 當捲組中的一個磁碟損壞時,整個捲組都會受到影響。
- 因為加入了額外的操作,存儲性能受到影響
- 不能減小文件系統大小(受文件系統類型限制)