引言
這篇文章使用CentOS7實(shí)例演示LVM的創(chuàng)建更改和刪除,LVM(Logical Volume Manager)是Linux環(huán)境下對(duì)硬盤分區(qū)進(jìn)行管理的一種機(jī)制,可以實(shí)現(xiàn)多塊硬盤空間的動(dòng)態(tài)劃分和調(diào)整,跨硬盤儲(chǔ)存文件等功能。常用于裝備大量硬盤并隨時(shí)需要增加或刪除硬盤的環(huán)境,也同樣適于僅有一、兩塊硬盤的環(huán)境。
文章目錄
- 0×1.LVM基本術(shù)語與實(shí)驗(yàn)環(huán)境介紹
- 0×2.如何創(chuàng)建LVM
a.如何創(chuàng)建PVb.如何創(chuàng)建VGc.如何創(chuàng)建LVd.文件系統(tǒng)格式化e.掛載和使用- 0×3.如何擴(kuò)充和縮小LVM
a.如何擴(kuò)充LVb.如何擴(kuò)充VGc.如何縮小LVd.如何縮小VG- 0×4.如何創(chuàng)建LVM備份(快照)
- 0×5.如何刪除LVM
a.如何刪除LVb.如何刪除VGc.如何刪除PV
0×1.LVM基本術(shù)語與實(shí)驗(yàn)環(huán)境介紹
下面是LVM需要了解的基本術(shù)語:
物理卷(PV physical volume): 它可以是物理硬盤上的分區(qū),也可以是整塊物理硬盤;
卷組(VG volume group): 建立在物理卷之上,一個(gè)卷組至少包括一個(gè)物理卷,可以動(dòng)態(tài)增刪物理卷;
邏輯卷(LV logical volume):建立在卷組之上,卷組中未分配的空間可以用來建立邏輯卷,并且可以動(dòng)態(tài)調(diào)整大小直到用完卷組空間,系統(tǒng)中的多個(gè)邏輯卷可以屬于同一個(gè)卷組,也可以屬于不同卷組(卷組是物理卷容器,它又被不同邏輯卷動(dòng)態(tài)占用著,就好像一塊物理硬盤被分割成不同的區(qū)域一樣);
物理區(qū)域(PE physical extend): PE是PV中可以用于分配的最小儲(chǔ)存單元,一旦確定大小不能更改,同一VG中的所有PV的PE大小要一致;
邏輯區(qū)域(LE logical extend): LE是LV中可以用來分配的最小存儲(chǔ)單元,LE的大小取決于LV所在卷中的PE大小;
卷組描述區(qū)域(VGDA volume group descriptor area):VGDA在建立物理卷時(shí)建立,用于描述PV本身,所屬VG,VG中的LV,以及LV中的PE大小等等;
試驗(yàn)環(huán)境介紹:
操作系統(tǒng):CentOS7;
硬盤:/dev/sda(系統(tǒng)所在硬盤)、/dev/sdb(20G)、/dev/sdc(20G) ;
使用/dev/sdb、/dev/sdc這兩塊硬盤完成下面的實(shí)驗(yàn);
0×2.如何創(chuàng)建LVM
創(chuàng)建LVM步驟:創(chuàng)建物理卷(PV)->將物理卷加入卷組(VG)->使用卷組創(chuàng)建邏輯卷(LV)->格式化邏輯卷->掛載使用
a.如何創(chuàng)建PV
#LVM的創(chuàng)建必須使用root權(quán)限,如果沒有給硬盤分區(qū),可以直接使用硬盤號(hào)將其創(chuàng)建為PV,將sdb和sdc這兩塊硬盤創(chuàng)建成PV
qing@qingsword.com:~$ sudo pvcreate /dev/sd[b-c]
#如果硬盤已經(jīng)被分區(qū),請(qǐng)攜帶分區(qū)號(hào),例如,sdb和sdc都劃分了一個(gè)分區(qū),如果使用分區(qū)的形式添加,最好在fdisk創(chuàng)建分區(qū)時(shí),使用t將分區(qū)類型改成8e(LVM)
qing@qingsword.com:~$ sudo pvcreate /dev/sdb1 /dev/sdc1
#查看剛創(chuàng)建好的PV
qing@qingsword.com:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 --- 20.00g 20.00g
/dev/sdc lvm2 --- 20.00g 20.00g
PV創(chuàng)建好了就可以創(chuàng)建VG了。
Ps:若使用fdisk分區(qū)后提示找不到分區(qū),可以執(zhí)行partprobe命令刷新分區(qū)表。
b.如何創(chuàng)建VG
#將sdb和sdc這兩塊已經(jīng)創(chuàng)建成PV的硬盤劃分到vg0這個(gè)卷組池中,vg0是自定義的名稱,代表一個(gè)卷組池(同樣,如果硬盤已經(jīng)分區(qū),請(qǐng)攜帶分區(qū)號(hào))
qing@qingsword.com:~$ sudo vgcreate vg0 /dev/sd[b-c]
Volume group "vg0" successfully created
#查看VG池
qing@qingsword.com:~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
vg0 2 0 0 wz--n- 39.99g 39.99g
#查看PV列表,b和c的VG列都屬于vg0這個(gè)卷組池了
qing@qingsword.com:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdb vg0 --- 20.00g 20.00g
/dev/sdc vg0 --- 20.00g 20.00g
創(chuàng)建好卷組池就能從池中劃分容量給邏輯卷(LV)了。
c.如何創(chuàng)建LV
#從卷組vg0中拿出10G,分配給lv0,其中-n后面是lv自定義名稱,-L后面跟需要從vg0中分配給lv0的大小以及從哪個(gè)VG分配
qing@qingsword.com:~$ sudo lvcreate -n lv0 -L 10G vg0
#查看lv,可以看到lv0大小10G,并且屬于vg0這個(gè)卷組池(這就像是從vg0這塊硬盤上劃分了一個(gè)10G的分區(qū),分區(qū)號(hào)lv0)
qing@qingsword.com:~$ sudo lvs
LV VG Attr LSize
lv0 vg0 -wi-a--- 10.00g
創(chuàng)建好lv后就可以格式化它。
d.文件系統(tǒng)格式化
#創(chuàng)建好的lv所在目錄是"/dev/卷組名稱/邏輯卷名稱",所以本例就是/dev/vg0/lv0,將它格式化成ext4文件系統(tǒng)
qing@qingsword.com:~$ sudo mkfs.ext4 /dev/vg0/lv0
格式化完成后就能掛載使用它了。
e.掛載和使用
#將lv0掛載到/mnt目錄下(不一定非要掛載到/mnt才能使用,請(qǐng)根據(jù)實(shí)際情況掛載到其他目錄)
qing@qingsword.com:~$ sudo mount /dev/vg0/lv0 /mnt
0×3.如何擴(kuò)充和縮小LVM
只要卷組(VG)中有空余空間,就能將其增加到對(duì)應(yīng)邏輯卷(LV)中;或?qū)?duì)應(yīng)邏輯卷(LV)中的某些分區(qū)刪除,讓其成為卷組(VG)中的空余空間。
a.如何擴(kuò)充LV
#首先確保VG池中有足夠的VFree空間可供使用(VSize是這個(gè)VG的總大小,VFree是還剩下多少空間可以劃分,PV是這個(gè)VG包含多少個(gè)物理卷,LV是這個(gè)VG以及劃分了多少個(gè)邏輯卷)
qing@qingsword.com:~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
vg0 2 1 0 wz--n- 39.99g 29.99g
#給lv0增加5G的大小
#lvextend還有一個(gè)-l參數(shù),這個(gè)參數(shù)允許我們輸入一個(gè)PE值來擴(kuò)充LV大小,這個(gè)PE值可以通過vgdisplay命令來查看到,在vgdisplay命令輸出中"Free PE"后面的大小就是這個(gè)vg剩余的PE大小,如果想一次性將剩余的空間全部劃分給當(dāng)前vg,可以使用命令"lvextend -l +8900 /dev/vg0/lv0",其中8900就是在vgdisplay命令輸出中"Free PE"后面看到的值
qing@qingsword.com:~$ sudo lvextend -L +5G /dev/vg0/lv0
#更新lv0大小(必須)
qing@qingsword.com:~$ sudo resize2fs /dev/vg0/lv0
#如果是xfs文件系統(tǒng),上一條命令會(huì)報(bào)錯(cuò),必須使用xfs_growfs來刷新磁盤大小,如下
qing@qingsword.com:~$ sudo xfs_growfs /dev/vg0/lv0
#查看,lv0被擴(kuò)充到了15G
qing@qingsword.com:~$ df -h
文件系統(tǒng) 容量 已用 可用 已用% 掛載點(diǎn)
/dev/mapper/vg0-lv0 15G 25M 14G 1% /mnt
b.如何擴(kuò)充VG
如果此時(shí)我們的VG池容量不夠,可以給計(jì)算機(jī)添加一塊物理硬盤,先將它創(chuàng)建成PV,之后將它放入VG池即可,請(qǐng)看下面的實(shí)例:
#新增加一塊硬盤sdd(20G),將它創(chuàng)建成PV后劃分到vg0下,此時(shí)vg0的容量將增加sdd硬盤的大小
qing@qingsword.com:~$ sudo pvcreate /dev/sdd
qing@qingsword.com:~$ sudo vgextend vg0 /dev/sdd
#vg0的總大小擴(kuò)充了20G
qing@qingsword.com:~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
vg0 3 1 0 wz--n- 59.99g 44.99g
c.如何縮小LV
注意:縮小LV大小有一定風(fēng)險(xiǎn),可能造成數(shù)據(jù)丟失,如果不是必要,最好不要縮小它:
#縮小邏輯卷之前,如果此邏輯卷已經(jīng)掛載,必須先卸載,以lv0為例
qing@qingsword.com:~$ sudo umount /dev/vg0/lv0
#首先對(duì)lv0進(jìn)行檢查
qing@qingsword.com:~$ sudo e2fsck -f /dev/vg0/lv0
#然后縮小文件系統(tǒng),本例將lv0從15G縮小到10G大小
qing@qingsword.com:~$ sudo resize2fs /dev/vg0/lv0 10G
#最后將lv0縮小到10G(一定要和上面resize2fs命令中的大小相同),縮小有風(fēng)險(xiǎn),請(qǐng)慎用
qing@qingsword.com:~$ sudo lvreduce -L 10G /dev/vg0/lv0
WARNING: Reducing active logical volume to 10.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv0? [y/n]: y
#重新掛載使用
qing@qingsword.com:~$ sudo mount /dev/vg0/lv0 /mnt
Ps:因?yàn)閤fs文件系統(tǒng)自帶了擴(kuò)充和縮小的特性,所以xfs文件系統(tǒng)并不需要使用LVM技術(shù),以上縮小的實(shí)驗(yàn)僅適用于ext文件系統(tǒng)。
d.如何縮小VG
縮小VG比縮小LV稍微安全一點(diǎn),確保這個(gè)要被移除的分區(qū)或者硬盤沒有被使用后,可以用下面的命令將它從VG池中去除:
#將sdc這塊硬盤從vg0中移除
qing@qingsword.com:~$ sudo vgreduce vg0 /dev/sdc
0×4.如何創(chuàng)建LVM備份(快照)
注意:邏輯卷的備份是放在和邏輯卷同一個(gè)卷組中的,也需要占用卷組的大小,所以卷組的大小不夠備份就不會(huì)成功:
#以前面創(chuàng)建的lv0距離,首先lvs查看一下lv0的大小,使用相同大小創(chuàng)建備份
qing@qingsword.com:~$ sudo lvs
LV VG Attr LSize
lv0 vg0 -wi-a----- 10.00g
#-L后面填寫的大小和lv0大小一致,-s -n后面跟自定義的備份名稱,再跟需要備份的邏輯卷完整路徑
qing@qingsword.com:~$ sudo lvcreate -L 10G -s -n lv0bk /dev/vg0/lv0
#快照保存了創(chuàng)建時(shí),對(duì)應(yīng)邏輯卷所有數(shù)據(jù),路徑"/dev/vg0/lv0back"
qing@qingsword.com:~$ sudo lvs
LV VG Attr LSize Pool Origin
lv0 vg0 owi-a-s--- 10.00g
lv0bk vg0 swi-a-s--- 10.00g lv0
#如果邏輯卷出了問題,可以用快照恢復(fù),快照恢復(fù)一次后,會(huì)自刪除(注意:恢復(fù)前一定要將被恢復(fù)的分區(qū)先umount卸載,否則可能出現(xiàn)無法恢復(fù)的錯(cuò)誤)
qing@qingsword.com:~$ sudo lvconvert --merge /dev/vg0/lv0bk
qing@qingsword.com:~$ sudo lvs
LV VG Attr LSize Pool Origin
lv0 vg0 owi-a-s--- 10.00g
0×5.如何刪除LVM
刪除LVM的步驟:如果邏輯卷已掛載,需要先卸載->刪除邏輯卷(LV)->刪除卷組(VG)->刪除物理卷(PV)。
a.如何刪除LV
#卸載lv0
qing@qingsword.com:~$ sudo umount /dev/vg0/lv0
#刪除lv0,如果lv0存在快照,會(huì)詢問是否刪除快照
qing@qingsword.com:~$ sudo lvremove /dev/vg0/lv0
Do you really want to remove active logical volume lv0? [y/n]: y
b.如何刪除VG
#刪除vg0
qing@qingsword.com:~$ sudo vgremove vg0
c.如何刪除PV
#刪除兩塊pv硬盤,刪除前請(qǐng)確保這個(gè)pv沒有被添加到vg中,否則應(yīng)該先使用vgreduce移除vg中的pv
qing@qingsword.com:~$ sudo pvremove /dev/sd[b-c]