
什么是LV邏輯卷?
邏輯卷是將一個或多個物理分區(qū)或塊設(shè)備整合在一起形成一種邏輯層。可以使獨立的硬盤,也可以是獨立的分區(qū)。
邏輯卷結(jié)構(gòu)視圖

上圖畫的或許不是那么標(biāo)準(zhǔn),但是也能大體看出邏輯卷的結(jié)構(gòu)。下面從下而上簡單說明下:
1."
~]#" 表示命令提示符
2."#/ /#" 表示添加的注釋內(nèi)容
1.最下層是有一些硬盤或硬盤分區(qū)等組成;
2.下數(shù)第二層是物理卷(PV);pvcreate命令是生成物理卷的命令,后面跟那些物理分區(qū)或塊設(shè)備;
~]# pvcreate /dev/sd{b1,c,d2,e} #/ pvcreat 命令后面跟要做成物理卷的物理分區(qū)或塊設(shè)備 /#
~]# pvdisplay #/ "pvdisplay" 命令是詳細(xì)列出系統(tǒng)上面每個物理卷的信息 /#
3.下數(shù)第三層是卷組(VG);vgcreate命令是把物理卷做成卷組的命令,后面跟卷組名稱(按實際情況自定義)和物理卷名稱;
~]# vgcreate vg0 -s 16M /dev/sd{b1,c,d2,e} #/ "vg0"是給卷組起的名稱;"-s 16M" 是PE值大小 /#
~]# vgdisplay #/ 列出卷組的詳細(xì)信息 /#
4.最上面一層,就是我們的邏輯卷(LV);lvcreate是從卷組生成邏輯卷的命令,后面寫邏輯卷的名稱、邏輯卷的大小和卷組名稱;
~]# lvcreate -n lv0 -l 666 /dev/vg0 #/ "-n"后面跟邏輯卷的名稱;"-l"后面跟PE的個數(shù);最后是卷組名稱; /#
~]# lvcreate -n lv0 -L 20G /dev/vg0 #/ "-L"大寫的后面是邏輯卷容量大?。∕,G)/#
~]# lvdisplay #/ 列出邏輯卷的詳細(xì)信息 /#
上面差不多已經(jīng)講完了如何生成邏輯卷LV了!剩下的步驟不外乎就是:對LV做文件系統(tǒng)-->創(chuàng)建掛載點-->把LV掛載上去-->正常使用即可
~]# mkfs.ext4 /dev/vg0/lv0 #/ 特別注意:這里的邏輯卷名稱是LV的全名!為什么?請看lvdisplay結(jié)果 /#
~]# mkdir /mnt/lv0 #/ 創(chuàng)建掛載邏輯卷的掛載點目錄 /#
~]# mount /dev/vg0/lv0 /mnt/lv0 #/ 掛載邏輯卷 /#
為什么要用邏輯卷管理?
LVM的重點在于可以彈性調(diào)整文件系統(tǒng)的容量!或者說它有在線可擴(kuò)展性!
大白話說的話,一個邏輯卷空間不夠了你可以從卷組中調(diào)出來一部分容量分給它;反過來也可以縮減它的空間大小等等可在線擴(kuò)展操作。
以下是從百度百科搬過來的關(guān)于LVM優(yōu)點的說法,說的很對我就借花獻(xiàn)佛了~
LVM與直接使用物理存儲相比,有以下優(yōu)點:
1. 靈活的容量
當(dāng)使用邏輯卷時,文件系統(tǒng)可以擴(kuò)展到多個磁盤上,你可以聚合多個磁盤或磁盤分區(qū)成單一的邏輯卷.
2.可伸縮的存儲池
你可以使用簡單的命令來擴(kuò)大或縮小邏輯卷大小,不用重新格式化或分區(qū)磁盤設(shè)備.
3.在線的數(shù)據(jù)再分配
你可以在線移動數(shù)據(jù),數(shù)據(jù)可以在磁盤在線的情況下重新分配.比如,你可以在線更換可熱插拔的磁盤.
4. 方便的設(shè)備命名
邏輯卷可以按你覺得方便的方式來起任何名稱.
5.磁盤條塊化.
你可以生成一個邏輯盤,它的數(shù)據(jù)可以被條塊化存儲在2個或更多的磁盤上.這樣可以明顯提升數(shù)據(jù)吞吐量
6.鏡像卷
邏輯卷提供方便的方法來鏡像你的數(shù)據(jù).
7.卷快照
使用邏輯卷,你可以獲得設(shè)備快照用來一致性備份或者測試數(shù)據(jù)更新效果而不影響真實數(shù)據(jù).
實驗:擴(kuò)展LV容量
下面我做做一個在線擴(kuò)展LV的實驗體會體會LVM邏輯卷管理的特性還有相關(guān)命令的運用
1."
~]#" 表示命令提示符
2."#/ /#" 表示添加的注釋內(nèi)容
第一步:用lsblk命令查看有沒有空閑的硬盤可以讓我們拿來用于增加LV容量
~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
#/---------此處省略----------/#
sdb 8:16 0 20G 0 disk
└─vgtest-lvtest 253:0 0 30G 0 lvm
sdc 8:32 0 50G 0 disk #/ 發(fā)現(xiàn)sdc盤是50G的空間滿足實驗需求 /#
├─sdc1 8:33 0 10G 0 part
│ └─vgtest-lvtest 253:0 0 30G 0 lvm
└─sdc2 8:34 0 5G 0 part
sdd 8:48 0 100G 0 disk
sr0 11:0 1 7.7G 0 rom /run/media/root/CentOS 7 x86_64
查看硬盤信息發(fā)現(xiàn)/dev/sdc硬盤滿足我們的實驗需求!
第二步:用fdisk命令增加一分區(qū)
在增加分區(qū)的時候需要注意標(biāo)記新增分區(qū)用途的類別
先分區(qū)~
~]#fdisk /dev/sdc
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p #/ 這是打印硬盤分區(qū)信息 /#
#/---------此處省略----------/#
Device Boot Start End Blocks Id System
/dev/sdc1 2048 20973567 10485760 8e Linux LVM
/dev/sdc2 20973568 31459327 5242880 83 Linux
Command (m for help): u #/ "u"是切換扇區(qū)和柱面 /#
Changing display/entry units to cylinders (DEPRECATED!).
Command (m for help): n #/ "n"是開始分區(qū) /#
Partition type:
p primary (2 primary, 0 extended, 2 free) #/ 這里的"p"主分區(qū) /#
e extended #/ 這里的"e"擴(kuò)展分區(qū) /#
Select (default p): p #/ 這里我分一個主分區(qū) /#
Partition number (3,4, default 3): 3 #/ 選擇主分區(qū)編號為3 /#
First cylinder (1959-6527, default 1959):
Using default value 1959
Last cylinder, +cylinders or +size{K,M,G} (1959-6527, default 6527): +10G #/ 分10G大小 /#
Partition 3 of type Linux and of size 10 GiB is set
Command (m for help): t #/ 這是標(biāo)記分區(qū)類別 /#
Partition number (1-3, default 3): 3 #/ 輸入第幾個分區(qū) /#
Hex code (type L to list all codes): L #/ 大寫"L"可以查看各種分區(qū)類別編號 /#
#/---------此處省略----------/#
Hex code (type L to list all codes): 8e #/ "8e"是用于邏輯卷的分區(qū)類別標(biāo)記 /#
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): p
#/---------此處省略----------/#
Device Boot Start End Blocks Id System
/dev/sdc1 1 1306 10485760 8e Linux LVM
/dev/sdc2 1306 1959 5242880 83 Linux
/dev/sdc3 1959 3265 10488832 8e Linux LVM
Command (m for help): w #/ "w"是存盤退出 /#
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
同步分區(qū)信息:用partprobe命令同步并用**`lsblk`**查看分區(qū)信息
~]#partprobe #/ 把分區(qū)信息同步在內(nèi)存里 /#
Warning: Unable to open /dev/sr0 read-write (Read-only file system).
/dev/sr0 has been opened read-only.
~]#lsblk #/ 查看硬盤信息,是否分區(qū)成功 /#
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
#/---------此處省略----------/#
sdc 8:32 0 50G 0 disk
├─sdc1 8:33 0 10G 0 part
│ └─vgtest-lvtest 253:0 0 30G 0 lvm
├─sdc2 8:34 0 5G 0 part
└─sdc3 8:35 0 10G 0 part
第三步:用pvcreate命令把/dev/sd3生成物理卷并用pvdisplay查看物理卷詳細(xì)信息
先生成物理卷~
~]#pvcreate /dev/sdc3
Physical volume "/dev/sdc3" successfully created.
查看物理卷詳細(xì)信息~
~]#pvdisplay
--- Physical volume ---
#/---------此處省略----------/#
"/dev/sdc3" is a new physical volume of "10.00 GiB" #/ 這里就是我們新生成的物理卷信息 /#
--- NEW Physical volume ---
PV Name /dev/sdc3 #/ 物理卷名稱 /#
VG Name #/ 注意,這里的卷組信息還是空的,因為還沒劃分給卷組 /#
PV Size 10.00 GiB #/ 新增物理卷大小 /#
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 81cHlt-osRn-I2Lc-faE6-36GN-ShzX-eHTfGJ
第四步:用vgextend命令把新的物理卷添加至卷組并用vgdisplay命令查看卷組詳細(xì)信息
開始之前先看看卷組信息,可以可以做對比,這樣會更直接些。關(guān)鍵點我都有注釋的哦~
~]#vgdisplay
--- Volume group ---
#/---------此處省略----------/#
VG Size 29.97 GiB #/ 卷組大小為30G /#
PE Size 16.00 MiB
Total PE 1918
Alloc PE / Size 1918 / 29.97 GiB
Free PE / Size 0 / 0 #/ 沒有可用PE /#
VG UUID kbBjKq-iFnA-fQSH-IK5w-EDFl-FFSL-uLSil9
現(xiàn)在我們開始用vdextend命令增加卷組容量~
vgextend命令用于動態(tài)擴(kuò)展LVM卷組,它通過向卷組中添加物理卷來增加卷組的容量。
~]#vgextend vgtest /dev/sdc3 #/ 把物理卷"/dev/sdc3"添加至卷組"vgtest"中 /#
Volume group "vgtest" successfully extended
~]#vgdisplay #/ 查看卷組詳細(xì)信息 /#
--- Volume group ---
VG Name vgtest
System ID
Format lvm2
Metadata Areas 3
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 3
Act PV 3
VG Size 39.97 GiB #/ 可以看出眷組空間大小從之前只有30G變成目前的40G /#
PE Size 16.00 MiB
Total PE 2558
Alloc PE / Size 1918 / 29.97 GiB
Free PE / Size 640 / 10.00 GiB #/ 這里多出來10G的可用PE /#
VG UUID kbBjKq-iFnA-fQSH-IK5w-EDFl-FFSL-uLSil9
第五步:用lvextend命令增加邏輯卷的容量,并用lvdisplay查看邏輯卷詳細(xì)信息
同樣在開始之前我們先看看邏輯卷信息,看看它大小是多少~
~]#lvdisplay
--- Logical volume ---
LV Path /dev/vgtest/lvtest #/ 這才是邏輯卷的名稱 /#
LV Name lvtest
VG Name vgtest
LV UUID 5IMYwN-9JZS-4KB1-ofFq-WpVn-OVv6-XOCfhL
LV Write Access read/write
LV Creation host, time CentOS7.Wxg, 2017-06-24 20:17:47 +0800
LV Status available
# open 0
LV Size 29.97 GiB #/ 邏輯卷大小是30G /#
Current LE 1918
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
現(xiàn)在我們開始用lvextend命令給邏輯卷增加容量就給他增加個5G容量吧
lvextend命令用于在線擴(kuò)展邏輯卷的空間大小,而不中斷應(yīng)用程序?qū)壿嬀淼脑L問
~]#lvextend -r -L +5G /dev/vgtest/lvtest #/ 給LV新增加5G的容量,注意增加容量時要有"+"號 /#
#/---------此處省略----------/#
~]#lvdisplay
--- Logical volume ---
LV Path /dev/vgtest/lvtest
LV Name lvtest
VG Name vgtest
LV UUID 5IMYwN-9JZS-4KB1-ofFq-WpVn-OVv6-XOCfhL
LV Write Access read/write
LV Creation host, time CentOS7.Wxg, 2017-06-24 20:17:47 +0800
LV Status available
# open 0
LV Size 34.97 GiB #/ 注意到?jīng)]有,從之前的30G變成現(xiàn)在的35G了 /#
Current LE 2238
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
如果還看不出差別的話,我回過頭去看看卷組的信息,看看自由PE值是否從10G減少到5G了~
~]#vgdisplay
--- Volume group ---
VG Name vgtest
#/---------此處省略----------/#
Alloc PE / Size 2238 / 34.97 GiB
Free PE / Size 320 / 5.00 GiB #/ 注意到?jīng)]有,從之前的10G變成現(xiàn)在的5G了 /#
VG UUID kbBjKq-iFnA-fQSH-IK5w-EDFl-FFSL-uLSil9
結(jié)語:
通過這個擴(kuò)展LV的實驗我們很直觀的體會到在線管理邏輯卷的優(yōu)勢,可以有效避免一些不必要的麻煩。
當(dāng)然邏輯卷管理除了擴(kuò)展LV還有很多其他功能,例如可以縮減LV避免不必要的空間浪費、可以移除PV及時更換老舊的硬盤、可以跨主機(jī)遷移LV不丟數(shù)據(jù)的前提下脫離老舊主機(jī)遷到新的主機(jī)上等等強(qiáng)大的功能都可以實現(xiàn)。在這我就不分別做實驗來證明啦~