目錄
一、什麼是LVM?
LVM(Logical Volume Manager),邏輯卷管理。它是Linux中對磁盤分區的一種管理機制。相信大家會有疑問,爲什麼要有這樣一個管理機制?那是因爲:
很多Linux使用者安裝操作系統時都會遇到這樣的困境:如何精確評估和分配各個硬盤分區的容量,分得太大,會浪費硬盤空間;分得太小,又會面臨不夠使用的情況。一旦系統分區不夠用時,我們就不得不備份、刪除相關數據,甚至被迫重新規劃存儲方案並重裝操作系統,以滿足應用系統的需要。
基於這樣的需求,LVM就爲我們提供了一種動態管理存儲的機制。
二、LVM原理
LVM 爲我們提供了邏輯概念上的磁盤,使得文件系統不再關心底層物理磁盤的概念。瞭解LVM原理,我們首先得了解幾種基本的LVM術語。
名 稱 | 意 義 |
---|---|
PV(Physical Volume) | 物理卷,真實的物理硬盤或分區 |
VG(Volume Group) | 卷組,多個物理卷組成的一塊大的邏輯硬盤 |
LV(Logical Volume) | 邏輯卷,卷組劃分的多個可以使用的分區 |
PE(Physical Extend) | 物理擴展塊,物理卷中可用於分配的最小存儲單元,默認爲4MB |
LE(Logical Extend) | 邏輯擴展塊,邏輯卷中可用於分配的最小存儲單元,在同一個卷組中,LE的大小和PE是相同的,並且一一對應 |
緊接着我們來看看LVM的工作原理是什麼呢?結合這張圖來爲大家解釋!
LVM是在硬盤分區之上建立一個邏輯層,這個邏輯層讓多個硬盤或分區看起來像一塊邏輯硬盤,然後將這塊邏輯硬盤分成邏輯卷之後使用,從而大大提高了分區的靈活性。
三、LVM管理操作?
1、建立(刪除、查看)物理卷(PV)
① 建立物理卷
pvcreate命令語法:vgcreate 設備文件名
[root@localhost ~]# yum install -y lvm2 //安裝LVM2(LVM的管理工具)
[root@localhost ~]# pvcreate /dev/sdb{1,2,3,4} //將分區建立成爲物理卷
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdb2" successfully created
Physical volume "/dev/sdb3" successfully created
Physical volume "/dev/sdb4" successfully created
② 刪除物理卷
pvremove命令語法:vgcreate 物理卷名
//刪除物理卷時,物理卷必須不屬於任何卷組
[root@localhost ~]# pvmove /dev/sdb4 //轉移數據到其他PV
[root@localhost ~]# pvremove /dev/sdb4 //刪除物理卷sdb4
Labels on physical volume "/dev/sdb4" successfully wiped
③ 查看物理卷
[root@localhost ~]# pvs //查看物理卷的概要信息
PV VG Fmt Attr PSize PFree
/dev/sdb1 myvg lvm2 a--u 108.00m 8.00m
/dev/sdb2 myvg lvm2 a--u 108.00m 108.00m
/dev/sdb3 myvg lvm2 a--u 108.00m 108.00m
[root@localhost ~]# pvdisplay //查看物理卷的詳細信息
--- Physical volume ---
PV Name /dev/sdb1
VG Name myvg
PV Size 109.79 MiB / not usable 1.79 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 27
Free PE 2
Allocated PE 25
PV UUID PXC8sh-tCv4-KQ5S-Hwo4-FrT1-erxf-0QtmZ8
... //省略/dev/sdb{2,3}的詳細信息
[root@localhost ~]# pvscan //掃描所有硬盤上的物理卷
PV /dev/sdb1 VG myvg lvm2 [108.00 MiB / 8.00 MiB free]
PV /dev/sdb2 VG myvg lvm2 [108.00 MiB / 108.00 MiB free]
PV /dev/sdb3 VG myvg lvm2 [108.00 MiB / 108.00 MiB free]
Total: 3 [324.00 MiB] / in use: 3 [324.00 MiB] / in no VG: 0 [0 ]
2、建立(增加 / 減小容量、刪除、查看)卷組(VG)
① 建立卷組
vgcreate命令語法:vgcreate [-s PE 大小] 卷組名 物理卷名
其中,-s用來指定PE的大小,單位可以是 MB、GB、TB 等,默認爲4MB。
[root@localhost ~]# vgcreate myvg /dev/sdb1 /dev/sdb2 //將物理卷sdb{1,2}加入卷組myvg
Volume group "myvg" successfully created
② 增加捲組容量
vgextend命令語法:vgextend 卷組名 物理卷名
[root@localhost ~]# vgextend myvg /dev/sdb3 //將物理卷sdb3加入卷組myvg
Volume group "myvg" successfully extended
③ 減少卷組容量
vgreduce命令語法:vgreduce 卷組名 物理卷名
[root@localhost ~]# vgreduce myvg /dev/sdb3 //將物理卷sdb3從卷組myvg中移除
Removed "/dev/sdb3" from volume group "myvg"
④ 刪除卷組
vgremove命令語法:vgremove 卷組名
//刪除卷組時,卷組中必須沒有任何邏輯卷
[root@localhost ~]# vgcreate myvg1 /dev/sdb3 //建立測試卷組myvg1
Volume group "myvg1" successfully created
[root@localhost ~]# vgremove myvg1 //刪除測試卷組myvg1
Volume group "myvg1" successfully removed
⑤ 查看卷組
[root@localhost ~]# vgs //查看卷組的概要信息
VG #PV #LV #SN Attr VSize VFree
myvg 2 1 0 wz--n- 216.00m 64.00m
[root@localhost ~]# vgdisplay //查看卷組的詳細信息
--- Volume group ---
VG Name myvg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 216.00 MiB
PE Size 4.00 MiB
Total PE 54
Alloc PE / Size 38 / 152.00 MiB
Free PE / Size 16 / 64.00 MiB
VG UUID jSVIZS-MLeY-fOox-pAJZ-hLLd-vtM3-YaK2Hu
[root@localhost ~]# vgscan //掃描所有硬盤上的卷組
Reading all physical volumes. This may take a while...
Found volume group "myvg" using metadata type lvm2
3、建立(增加 / 減小容量、刪除、查看)邏輯卷(LV)
① 建立邏輯卷
lvcreate命令語法:lvcreate [選項] [-n 邏輯卷名] 卷組名
其中,常用選項:
-n 邏輯卷名:指定邏輯卷名稱;
-L 大小:指定邏輯卷大小,直接指定容量大小,單位可以是 MB、GB、TB 等;
-l 數量:指定邏輯卷大小,通過指定PE數量來決定邏輯卷大小;
-s:創建快照;
[root@localhost ~]# lvcreate -L 100M -n mylv myvg //使用卷組myvg建立大小爲100M的邏輯卷mylv
Logical volume "mylv" created.
② 增加邏輯卷容量
lvresize命令語法:lvresize [選項] 邏輯卷的設備文件名
其中,常用選項:
-L 大小:調整邏輯卷大小,直接指定容量大小;
-l 數量:調整邏輯卷大小,通過指定PE數量來決定邏輯卷大小;
它們都可以使用絕對和相對兩種方式來設置:
#:表示調整爲 # 大小或 # 個PE大小的容量;
+/- #:表示增加/減少 # 大小或增加/減少 # 個PE大小的容量。
有足夠大的VG就可以增加LV容量。
[root@localhost ~]# lvresize -L +50M /dev/myvg/mylv //增加邏輯卷mylv的大小到150M
Rounding size to boundary between physical extents: 52.00 MiB.
Size of logical volume myvg/mylv changed from 100.00 MiB (25 extents) to 152.00 MiB (38 extents).
Logical volume mylv successfully resized.
[root@localhost ~]# df -h /dev/myvg/mylv //查看硬盤信息
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/myvg-mylv
93M 1.6M 87M 2% /mnt/mylv //mylv分區的大小並未改變
//邏輯卷的大小雖然改變了,但是掛載磁盤大小依然是100M,如果要讓分區使用這個新的邏輯卷,必須給新增的LV創建文件系統。
[root@localhost ~]# resize2fs /dev/myvg/mylv //調整文件系統大小
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv is mounted on /mnt/mylv; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/mylv to 155648 (1k) blocks.
The filesystem on /dev/myvg/mylv is now 155648 blocks long.
[root@localhost ~]# df -h /dev/myvg/mylv
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/myvg-mylv
144M 1.6M 135M 2% /mnt/mylv
③ 減少邏輯卷容量
減少LV容量是一個比較危險的操作,所以一般並不推薦減少邏輯卷的容量,因爲這有可能導致數據丟失。需要按照以下步驟減少LV容量:
① 卸載邏輯卷;
② 使用 e2fsck 命令強制檢測邏輯卷剩餘空間;
③ 使用 resize2fs 命令減小文件系統;
④ 使用 lvresize 命令減小邏輯卷容量;
⑤ 掛載使用。
[root@localhost ~]# umount /dev/myvg/mylv //卸載邏輯卷mylv
umount: /dev/myvg/mylv: not mounted
[root@localhost ~]# e2fsck -f /dev/myvg/mylv //強制檢測邏輯卷剩餘空間
e2fsck 1.41.12 (17-May-2010)
/dev/myvg/mylv: recovering journal
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/myvg/mylv: ***** FILE SYSTEM WAS MODIFIED *****
/dev/myvg/mylv: 11/37544 files (9.1% non-contiguous), 10390/155648 blocks
[root@localhost ~]# resize2fs /dev/myvg/mylv 100M //減少邏輯卷文件系統大小
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mylv to 102400 (1k) blocks.
The filesystem on /dev/myvg/mylv is now 102400 blocks long.
[root@localhost ~]# lvresize -L -50M /dev/myvg/mylv //減少邏輯卷容量
Rounding size to boundary between physical extents: 48.00 MiB.
WARNING: Reducing active logical volume to 108.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/mylv? [y/n]: y
Size of logical volume myvg/mylv changed from 156.00 MiB (39 extents) to 108.00 MiB (27 extents).
Logical volume mylv successfully resized.
[root@localhost ~]# mount /dev/myvg/mylv /mnt/mylv/ //掛載
[root@localhost ~]# df -h /dev/myvg/mylv //查看硬盤信息
/dev/mapper/myvg-mylv
93M 1.6M 87M 2% /mnt/mylv
tips:文件系統大小和邏輯卷大小一定要保持一致纔行。如果邏輯卷大於文件系統,就會由於部分區域未格式化成文件系統從而造成空間的浪費;如果邏輯卷小於文件系統,那麼數據就會出現問題。
④ 刪除邏輯卷
刪除邏輯卷,其中的所有數據就會丟失。需要按照以下步驟刪除LV:
① 卸載邏輯卷;
② 如果/etc/fstab中有邏輯卷的掛載信息(如果之前並未添加可以不用理會),需要先刪除,否則系統有可能不能啓動;
③ 使用lvremove命令刪除邏輯卷。
lvremove命令語法:lvremove 邏輯卷名
[root@localhost ~]# umount /dev/myvg/mylv //卸載邏輯卷mylv
[root@localhost ~]# lvremove /dev/myvg/mylv //刪除邏輯卷mylv
Do you really want to remove active logical volume mylv? [y/n]: y
Logical volume "mylv" successfully removed
⑤ 查看邏輯卷
[root@localhost ~]# lvs //查看邏輯卷的概要信息
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-ao---- 108.00m
[root@localhost ~]# lvdisplay //查看邏輯卷的詳細信息
--- Logical volume ---
LV Path /dev/myvg/mylv
LV Name mylv
VG Name myvg
LV UUID 7xpEK7-ODNn-DnSX-Eshz-zo4I-zitd-2h1aSM
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2020-04-03 04:36:05 +0800
LV Status available
# open 1
LV Size 108.00 MiB
Current LE 27
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
[root@localhost ~]# lvscan //掃描所有硬盤上的邏輯卷
ACTIVE '/dev/myvg/mylv' [108.00 MiB] inherit
三、如何建立LVM?
需要按照以下步驟建立LVM:
① 把物理硬盤分成分區;
② 把物理分區建立爲物理卷(PV);
③ 把物理卷整合爲卷組(VG),卷組可以動態地調整大小,把物理分區加入卷組或從卷組中刪除;
④ 把卷組再劃分爲邏輯卷(LV),邏輯卷也可以直接調整大小。
⑤ 邏輯卷可以想象爲分區,所以也需要格式化和掛載。
1、建立物理分區
[root@localhost ~]# fdisk /dev/sdb //在/dev/sdb硬盤中新建兩個分區,每個分區大小爲100M
Command (m for help): n //創建分區
Command action
e extended
p primary partition (1-4)
p //分區類型選擇主分區
Partition number (1-4): 1 //設置分區號爲1
First cylinder (1-130, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130): +100M //設置100M大小
... //剩下一個分區創建過程省略
Command (m for help): t //更改分區格式
Partition number (1-4): 1 //選擇分區1
Hex code (type L to list codes): 8e //8e爲Linux LVM格式
Changed system type of partition 1 to 8e (Linux LVM)
... //剩下一個分區格式修改過程省略
Command (m for help): p //查詢創建結果
Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x2d354121
Device Boot Start End Blocks Id System
/dev/sdb1 1 14 112423+ 8e Linux LVM
/dev/sdb2 15 28 112455 8e Linux LVM
Command (m for help): w //保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# partx -a /dev/sdb //重讀磁盤分區表信息
2、建立物理卷
[root@localhost ~]# pvcreate /dev/sdb{1,2} //將分區建立成爲物理卷
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdb2" successfully created
[root@localhost ~]# pvs //查看物理卷信息
PV VG Fmt Attr PSize PFree
/dev/sdb1 myvg lvm2 a--u 108.00m 108.00m
/dev/sdb2 myvg lvm2 a--u 108.00m 108.00m
3、建立卷組
[root@localhost ~]# vgcreate myvg /dev/sdb{1,2} //將物理卷sdb{1,2}加入卷組myvg
Volume group "myvg" successfully created
[root@localhost ~]# vgs //查看卷組信息
VG #PV #LV #SN Attr VSize VFree
myvg 2 0 0 wz--n- 216.00m 216.00m
4、建立邏輯卷
[root@localhost ~]# lvcreate -L 200M -n mylv myvg //使用卷組myvg建立大小爲200M的邏輯卷mylv
Logical volume "mylv" created.
[root@localhost ~]# lvs //查看邏輯卷信息
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-a----- 200.00m
5、邏輯卷的格式化、掛載
[root@localhost ~]# mkfs.ext4 /dev/myvg/mylv //格式化
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
51200 inodes, 204800 blocks
10240 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
25 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost ~]# mkdir /mnt/mylv //創建掛載點
[root@localhost ~]# mount /dev/myvg/mylv /mnt/mylv/ //掛載
[root@localhost ~]# df -Th //查看硬盤信息
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 ext4 9.8G 814M 8.5G 9% /
tmpfs tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 ext4 190M 31M 150M 17% /boot
/dev/sr0 iso9660 3.7G 3.7G 0 100% /media
`/dev/mapper/myvg-mylv
ext4 190M 1.6M 179M 1% /mnt/mylv`