LVM是Logical Volume Manager(邏輯卷管理器)的簡(jiǎn)寫(xiě),又譯為邏輯卷宗管理器、邏輯扇區(qū)管理器、邏輯磁盤(pán)管理器。是Linux核心所提供的邏輯卷管理(Logical Volume Management)功能。它在硬盤(pán)的硬盤(pán)分區(qū)之上,又創(chuàng)建了一個(gè)邏輯層以方便系統(tǒng)管理硬盤(pán)分區(qū)系統(tǒng)。
最早由IBM開(kāi)發(fā),在AIX系統(tǒng)上實(shí)現(xiàn),OS/2操作系統(tǒng)與HP-UX也支持這個(gè)功能;
在1998年,Heinz Mauelshagen根據(jù)HP-UX上的邏輯卷管理器,寫(xiě)作出第一個(gè)Linux版本的邏輯卷管理器;并將其發(fā)布到Linux社區(qū)中,它允許用戶在Linux系統(tǒng)上用簡(jiǎn)單的命令行管理一個(gè)完整的邏輯卷管理環(huán)境。
LVM的優(yōu)點(diǎn):
它是建立在物理存儲(chǔ)設(shè)備之上的一個(gè)抽象層,允許用戶生成邏輯存儲(chǔ)卷,與直接使用物理存儲(chǔ)在管理上相比,提供了更好靈活性;
LVM將存儲(chǔ)虛擬化,使用邏輯卷,用戶不會(huì)受限于物理磁盤(pán)的大小;另外,與硬件相關(guān)的存儲(chǔ)設(shè)置被器隱藏,用戶可以不用停止應(yīng)用或卸載文件系統(tǒng)來(lái)調(diào)整卷大小或數(shù)據(jù)遷移,可以減少操作成本。
LVM與直接使用物理存儲(chǔ)相比,有以下優(yōu)點(diǎn):
1、 靈活的容量
當(dāng)使用邏輯卷時(shí),文件系統(tǒng)可以擴(kuò)展到多個(gè)磁盤(pán)上,你可以聚合多個(gè)磁盤(pán)或磁盤(pán)分區(qū)成單一的邏輯卷.
2、 可伸縮的存儲(chǔ)池;
你可以使用簡(jiǎn)單的命令來(lái)擴(kuò)大或縮小邏輯卷大小,不用重新格式化或分區(qū)磁盤(pán)設(shè)備.
3、 在線的數(shù)據(jù)再分配
你可以在線移動(dòng)數(shù)據(jù),數(shù)據(jù)可以在磁盤(pán)在線的情況下重新分配.比如,你可以在線更換可熱插拔的磁盤(pán).
4、 方便的設(shè)備命名;
邏輯卷可以按你覺(jué)得方便的方式來(lái)起任何名稱.
5、 磁盤(pán)條塊化
你可以生成一個(gè)邏輯盤(pán),它的數(shù)據(jù)可以被條塊化存儲(chǔ)在2個(gè)或更多的磁盤(pán)上.這樣可以明顯提升數(shù)據(jù)吞吐量.
6、 鏡像卷
邏輯卷提供方便的方法來(lái)鏡像你的數(shù)據(jù).
7、 卷快照
使用邏輯卷,你可以獲得設(shè)備快照用來(lái)一致性備份或者測(cè)試數(shù)據(jù)更新效果而不影響真實(shí)數(shù)據(jù).
2.版本:
LVM1 最初的LVM與1998年發(fā)布,只在Linux內(nèi)核2.4版本上可用,它提供最基本的邏輯卷管理。
LVM2 LVM-1的更新版本,在Linux內(nèi)核2.6中才可用,它在標(biāo)準(zhǔn)的LVM-1功能外還提供了額外的功能。
查看版本:
[root@localhost ~]#uname -a
Linux localhost.localdomain2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64 x86_64 x86_64GNU/Linux
[root@localhost ~]#uname -r
2.6.32-504.el6.x86_64
[root@localhost ~]#rpm -qa | grep lvm
mesa-private-llvm-3.4-3.el6.x86_64
lvm2-libs-2.02.111-2.el6.x86_64
lvm2-2.02.111-2.el6.x86_64
3.LVM基本術(shù)語(yǔ):
物理存儲(chǔ)介質(zhì)(The Physical Media):
這里指系統(tǒng)的存儲(chǔ)設(shè)備,如:/dev/hda1、/dev/sda等等,是存儲(chǔ)系統(tǒng)最低層的存儲(chǔ)單元。
物理卷(PV,Physical Volume):
物理卷就是指磁盤(pán),磁盤(pán)分區(qū)或從邏輯上與磁盤(pán)分區(qū)具有同樣功能的設(shè)備(如RAID),是LVM的基本存儲(chǔ)邏輯塊,但和基本的物理存儲(chǔ)介質(zhì)(如分區(qū)、磁盤(pán)等)比較,卻包含有與LVM相關(guān)的管理參數(shù)。當(dāng)前LVM允許你在每個(gè)物理卷上保存這個(gè)物理卷的0至2份元數(shù)據(jù)拷貝。默認(rèn)為1,保存在設(shè)備的開(kāi)始處。為2時(shí),在設(shè)備結(jié)束處保存第二份備份。
卷組(VG,Volume Group):
LVM卷組類似于非LVM系統(tǒng)中的物理硬盤(pán),其由物理卷組成。可以在卷組上創(chuàng)建一個(gè)或多個(gè)“LVM分區(qū)”(邏輯
卷),LVM卷組由一個(gè)或多個(gè)物理卷組成。
邏輯卷(LV,Logical Volume):
LVM的邏輯卷類似于非LVM系統(tǒng)中的硬盤(pán)分區(qū),在邏輯卷之上可以建立文件系統(tǒng)(比如/home或者/usr等)。
線性邏輯卷(Linear Volumes):
一個(gè)線性邏輯卷聚合多個(gè)物理卷成為一個(gè)邏輯卷.比如,如果你有兩個(gè)60GB硬盤(pán),你可以生成120GB的邏輯卷.
條塊化的邏輯卷(Striped Logical Volumes)
當(dāng)你寫(xiě)數(shù)據(jù)到此邏輯卷中時(shí),文件系統(tǒng)可以將數(shù)據(jù)放置到多個(gè)物理卷中.對(duì)于大量連接讀寫(xiě)操作,它能改善數(shù)據(jù)I/O效率.
鏡像的邏輯卷(MirroredLogical Volumes)
鏡像在不同的設(shè)備上保存一致的數(shù)據(jù).數(shù)據(jù)同時(shí)被寫(xiě)入原設(shè)備及鏡像設(shè)備.它提供設(shè)備之間的容錯(cuò)。
快照卷(SnapshotVolumes)
快照卷提供在特定瞬間的一個(gè)設(shè)備虛擬映像,當(dāng)快照開(kāi)始時(shí),它復(fù)制一份對(duì)當(dāng)前數(shù)據(jù)區(qū)域的改變,由于它優(yōu)先執(zhí)行這些改變,所以它可以重構(gòu)當(dāng)前設(shè)備的狀態(tài)。
PE(physical extent)
每一個(gè)物理卷被劃分為稱為PE(Physical Extents)的基本單元,具有唯一編號(hào)的PE是可以被LVM尋址的最小單元。PE的大小是可配置的,默認(rèn)為4MB。
LE(logical extent)
邏輯卷也被劃分為被稱為L(zhǎng)E(Logical Extents) 的可被尋址的基本單位。在同一個(gè)卷組中,LE的大小和PE是相同的,并且一一對(duì)應(yīng)。
和非LVM系統(tǒng)將包含分區(qū)信息的元數(shù)據(jù)保存在位于分區(qū)的起始位置的分區(qū)表中一樣,邏輯卷以及卷組相關(guān)的元數(shù)據(jù)也是保存在位于物理卷起始處的VGDA(卷組描述符區(qū)域)中。VGDA包括以下內(nèi)容: PV描述符、VG描述符、LV描述符、和一些PE描述符。系統(tǒng)啟動(dòng)LVM時(shí)激活VG,并將VGDA加載至內(nèi)存,來(lái)識(shí)別LV的實(shí)際物理存儲(chǔ)位置。當(dāng)系統(tǒng)進(jìn)行I/O操作時(shí),就會(huì)根據(jù)VGDA建立的映射機(jī)制來(lái)訪問(wèn)實(shí)際的物理位置。
4.LVM模塊:
Physicalvolume (PV)、Volume group (VG)、Logicalvolume(LV)、 Physical extent (PE),下面我們用一個(gè)簡(jiǎn)單
的圖來(lái)說(shuō)明下物理卷、卷組、邏輯卷他們之間的關(guān)系:

邏輯卷的創(chuàng)建,就是將多塊硬盤(pán)創(chuàng)建物理卷,而將這些物理卷以邏輯的形式總成一個(gè)容器,然后從這個(gè)容器里面創(chuàng)建大小不同的分區(qū)文件,而這個(gè)容器就是所謂的卷組(VG),而從這個(gè)容器里創(chuàng)建大小不同的分區(qū)文件,這個(gè)分區(qū)文件就叫做邏輯卷。
LVM實(shí)現(xiàn)邏輯卷鏡像
LVM的鏡像功能,有點(diǎn)兒類似于Raid1,即多塊兒磁盤(pán)互相同步,確保資料不會(huì)丟失。
1、在此添加4塊物理硬盤(pán),每塊2G空間

2、將sdb、sdc、sdd、sde 創(chuàng)建物理卷,將sdb、sdc、sdd 添加卷組到vmTest
[root@node4 ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created
[root@node4 ~]# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created
[root@node4 ~]# pvcreate /dev/sdd
Physical volume "/dev/sdd" successfully created
[root@node4 ~]# pvcreate /dev/sde
Physical volume "/dev/sde" successfully created
[root@node4 ~]# vgcreate vgTest /dev/sdb /dev/sdc /dev/sdd
Volume group "vgTest" successfully created
[root@node4 ~]#
3、創(chuàng)建邏輯卷
[root@node4 ~]# lvcreate -L 1G -m1 -n lvTest vgTest /dev/sdb /dev/sdc /dev/sdd
Logical volume "lvTest" created
查看lvs信息
[root@node4 ~]# lvs -a -o +devices
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert Devices
lv_root VolGroup -wi-ao---- 8.54g /dev/sda2(0)
lv_swap VolGroup -wi-ao---- 992.00m /dev/sda2(2186)
lvTest vgTest mwi-a-m--- 1.00g lvTest_mlog 100.00 lvTest_mimage_0(0),lvTest_mimage_1(0)
[lvTest_mimage_0] vgTest iwi-aom--- 1.00g /dev/sdb(0)
[lvTest_mimage_1] vgTest iwi-aom--- 1.00g /dev/sdc(0)
[lvTest_mlog] vgTest lwi-aom--- 4.00m /dev/sdd(0)
LVM鏡像需要用到-m1參數(shù),從上面可以看出,/dev/sdb和/dev/sdc互為鏡像,而/dev/sdd作為日志存儲(chǔ)使用
4、格式化分區(qū),在邏輯卷上創(chuàng)建一個(gè)文件。對(duì)/dev/sdc進(jìn)行破壞。
[root@node4 ~]# mkfs.ext4 /dev/vgTest/lvTest
mke2fs 1.41.12 (17-May-2010)
文件系統(tǒng)標(biāo)簽=
操作系統(tǒng):Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
第一個(gè)數(shù)據(jù)塊=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
正在寫(xiě)入inode表: 完成
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@node4 ~]# dd if=/dev/zero of=/dev/sdc count=10 bs=20M
記錄了10+0 的讀入
記錄了10+0 的寫(xiě)出
209715200字節(jié)(210 MB)已復(fù)制,2.08666 秒,101 MB/秒
[root@node4 ~]# lvs -a -o +devices
Couldn't find device with uuid zecO8D-2Suc-rnmK-a2Z7-6613-Zy1X-whVS0X.
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert Devices
lv_root VolGroup -wi-ao---- 8.54g /dev/sda2(0)
lv_swap VolGroup -wi-ao---- 992.00m /dev/sda2(2186)
lvTest vgTest mwi-a-m-p- 1.00g lvTest_mlog 100.00 lvTest_mimage_0(0),lvTest_mimage_1(0)
[lvTest_mimage_0] vgTest iwi-aom--- 1.00g /dev/sdb(0)
[lvTest_mimage_1] vgTest iwi-aom-p- 1.00g unknown device(0)
[lvTest_mlog] vgTest lwi-aom--- 4.00m /dev/sdd(0)
[root@node4 ~]# lvscan
Couldn't find device with uuid zecO8D-2Suc-rnmK-a2Z7-6613-Zy1X-whVS0X.
ACTIVE '/dev/vgTest/lvTest' [1.00 GiB] inherit
ACTIVE '/dev/VolGroup/lv_root' [8.54 GiB] inherit
ACTIVE '/dev/VolGroup/lv_swap' [992.00 MiB] inherit
[root@node4 ~]#
重新掛載邏輯卷,確認(rèn)文件可以正常讀取
[root@node4 ~]# mkdir /lvmTest
[root@node4 ~]# mount /dev/vgTest/lvTest /lvmTest/
[root@node4 ~]# cd /lvmTest/
[root@node4 lvmTest]# ls
lost+found
[root@node4 lvmTest]# echo "ac" > ac
[root@node4 lvmTest]# cat ac
ac
[root@node4 lvmTest]#
將卷組中壞掉的物理卷(/dev/sdc)移除:
[root@node4 lvmTest]# vgdisplay
Couldn't find device with uuid zecO8D-2Suc-rnmK-a2Z7-6613-Zy1X-whVS0X.
--- Volume group ---
VG Name vgTest
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 3
Act PV 2
VG Size 5.99 GiB
PE Size 4.00 MiB
Total PE 1533
Alloc PE / Size 513 / 2.00 GiB
Free PE / Size 1020 / 3.98 GiB
VG UUID 1qzO3A-Tjvi-by9l-Oq49-byz3-tIkx-rfSqex
[root@node4 lvmTest]# vgreduce --removemissing --force vgTest
Couldn't find device with uuid zecO8D-2Suc-rnmK-a2Z7-6613-Zy1X-whVS0X.
Wrote out consistent volume group vgTest
[root@node4 lvmTest]#
5、向卷組中加入新的物理卷(/dev/sde):
[root@node4 lvmTest]# vgextend vgTest /dev/sde
Volume group "vgTest" successfully extended
[root@node4 lvmTest]#
6、進(jìn)行數(shù)據(jù)恢復(fù)(過(guò)程中無(wú)須解除邏輯卷的掛載)
[root@node4 lvmTest]# lvconvert -m1 /dev/vgTest/lvTest /dev/sdb /dev/sdd /dev/sde
vgTest/lvTest: Converted: 0.0%
vgTest/lvTest: Converted: 100.0%
[root@node4 lvmTest]# lvs -a -o +devices
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert Devices
lv_root VolGroup -wi-ao---- 8.54g /dev/sda2(0)
lv_swap VolGroup -wi-ao---- 992.00m /dev/sda2(2186)
lvTest vgTest mwi-aom--- 1.00g lvTest_mlog 100.00 lvTest_mimage_0(0),lvTest_mimage_1(0)
[lvTest_mimage_0] vgTest iwi-aom--- 1.00g /dev/sdb(0)
[lvTest_mimage_1] vgTest iwi-aom--- 1.00g /dev/sdd(0)
[lvTest_mlog] vgTest lwi-aom--- 4.00m /dev/sde(0)
7、核實(shí)原數(shù)據(jù)
[root@node4 lvmTest]# cat ac
ac
[root@node4 lvmTest]# echo "abcde" >> ac
[root@node4 lvmTest]# cat ac
ac
abcde
[root@node4 lvmTest]#/p>
p>[root@node4 lvmTest]# lvdisplay
--- Logical volume ---
LV Path /dev/vgTest/lvTest
LV Name lvTest
VG Name vgTest
LV UUID a8kDmI-R3ls-SfKJ-qx3d-1Tbb-wPAd-TJcQfn
LV Write Access read/write
LV Creation host, time node4.lansgg.com, 2015-09-10 20:50:41 +0800
LV Status available
# open 1
LV Size 1.00 GiB
Current LE 256
Mirrored volumes 2
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:5