Linux磁盤管理之LVM與快照解讀
引言
邏輯卷管理LVM是硬盤的?個(gè)系統(tǒng)?具。?論在Linux或者其他類似的系統(tǒng),都是?常的好?。傳統(tǒng)分區(qū)使?固定??分區(qū),重新調(diào)整???分麻煩。但是,LVM可以創(chuàng)建和管理“邏輯”卷,?不是直接使?物理硬盤。可以讓管理員彈性的管理邏輯卷的擴(kuò)?縮?,操作簡單,?不損壞已存儲(chǔ)的數(shù)據(jù)。可以隨意將新的硬盤添加到LVM,以直接擴(kuò)展已經(jīng)存在的邏輯卷。LVM并不需要重啟就可以讓內(nèi)核知道分區(qū)的存在。
當(dāng)剛開始安裝Linux系統(tǒng)時(shí),往往不能確定每個(gè)分區(qū)使用的空間大小,只能憑經(jīng)驗(yàn)分配不科學(xué)。
- 如果分區(qū)設(shè)置的過大,就浪費(fèi)了磁盤空間,
- 如果分區(qū)設(shè)置的過小,就會(huì)導(dǎo)致空間不夠
- 如何希望分配的空間過大或過小,都能動(dòng)態(tài)調(diào)整,則需要使用到 LVM 邏輯卷
一、邏輯卷
1.LVM優(yōu)缺點(diǎn)
LVM 是 Logical Volume Manager 邏輯卷管理的簡寫,它是對(duì)磁盤分區(qū)管理的一種機(jī)制
優(yōu)點(diǎn):
- LVM 可以創(chuàng)建和管理邏輯卷,而不是直接使用物理硬盤
- LVM 可以彈性的管理邏輯卷的擴(kuò)大縮小,操作簡單,而不損壞已存儲(chǔ)的數(shù)據(jù)
- LVM 可以隨意將新的硬盤添加到LVM,以直接擴(kuò)展已經(jīng)存在的邏輯卷
- 可以在系統(tǒng)運(yùn)?的狀態(tài)下動(dòng)態(tài)的擴(kuò)展?件系統(tǒng)的??
- ?件系統(tǒng)可以跨多個(gè)磁盤,因此?件系統(tǒng)??不會(huì)受物理磁盤的限制
- 可以以鏡像的?式冗余重要的數(shù)據(jù)到多個(gè)物理磁盤
- 可以?便的導(dǎo)出整個(gè)卷組到另外?臺(tái)機(jī)器
缺點(diǎn):
- LVM 如果有一個(gè)磁盤損壞,整個(gè) LVM 都?jí)牧耍琇VM 只有動(dòng)態(tài)擴(kuò)展作用
- 因?yàn)榧?了額外的操作,存取性能受到影響
解決辦法:底層用 RAID + 上層用LVM = 既有冗余又有動(dòng)態(tài)擴(kuò)展;
2. 基本概念
- 物理卷(PV):(physical volume),把常規(guī)的磁盤設(shè)備通過pvcreate命令對(duì)其進(jìn)?初始化,形成了物理卷。其實(shí)就是硬盤或分區(qū)。(?粉)
- 卷組(VG):(volume group),把多個(gè)物理卷組成?個(gè)邏輯的整體,這樣卷組的??就是多個(gè)硬盤之和?;蛘呃斫饩褪怯?個(gè)或多個(gè)PV組成的整體。(?團(tuán))
- 邏輯卷(LV):(logical volume),從卷組中劃分需要的空間??出來。?戶僅需對(duì)其格式化然后即可掛載使?。從VG中切割出的空間?于創(chuàng)建?件系統(tǒng)。(切成饅頭)
- 基本單元(PE):(physical extend),分配的邏輯大小的最小單元,默認(rèn)為4MB的基本塊。(假設(shè)分配100MB邏輯空間,則需要?jiǎng)?chuàng)建25個(gè)PE)

注意:制作pv,可以對(duì)分區(qū)做、也可以對(duì)整塊盤做
二、LVM配置實(shí)操
環(huán)境與步驟
- 這里準(zhǔn)備兩塊物理磁盤(當(dāng)然也可以準(zhǔn)備多塊),一塊上已經(jīng)分區(qū)。建議在虛擬機(jī)關(guān)閉狀態(tài)添加,以便更好的實(shí)驗(yàn)
- .創(chuàng)建物理卷,將普通磁盤轉(zhuǎn)換為物理卷
- 創(chuàng)建卷組, 將物理卷加入到卷組中
- 在卷組中劃分邏輯卷,然后掛載使用
1、下載安裝包
yum install -y lvm2
查看磁盤狀態(tài)
[root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 49G 0 part ├─centos-root 253:0 0 47G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk ├─sdb1 8:17 0 10G 0 part └─sdb2 8:18 0 10G 0 part sdc 8:32 0 100G 0 disk sr0 11:0 1 4.4G 0 rom [root@localhost ~]#
我們用/dev/sdb1分區(qū) 和 /dev/sdc整個(gè)磁盤做pv
1.制作pv
pvcreate 設(shè)備名
root@localhost ~]# pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created. [root@localhost ~]# pvcreate /dev/sdc Physical volume "/dev/sdc" successfully created.
2.查看pv
pvs
[root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- <49.00g 4.00m # 系統(tǒng)自己創(chuàng)建的 /dev/sdb1 lvm2 --- 10.00g 10.00g # 我們創(chuàng)建的 /dev/sdc lvm2 --- 100.00g 100.00g # 我們創(chuàng)建的 [root@localhost ~]#
3.制作卷組vg
vgcreate 卷組名 pv名
[root@localhost ~]# vgcreate test_vg /dev/sdb1 /dev/sdc Volume group "test_vg" successfully created
4.查看vg
vgs
[root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- <49.00g 4.00m # 系統(tǒng)默認(rèn)創(chuàng)建的 test_vg 2 0 0 wz--n- 109.99g 109.99g # 我們自己創(chuàng)建的 [root@localhost ~]#
5.創(chuàng)建邏輯卷lvm(也可以創(chuàng)建多個(gè)邏輯卷)
lvcreate 選項(xiàng)
選項(xiàng) -L #邏輯卷?? -n #邏輯卷名字
分配50g大小給lv1_from_test_vg
[root@localhost ~]# lvcreate -L 50G -n lv1_from_test_vg test_vg Logical volume "lv1_from_test_vg" created.
6.查看vg
lvslvscan
[root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- 46.99g swap centos -wi-ao---- 2.00g lv1_from_test_vg test_vg -wi-a----- 50.00g 或者 [root@localhost ~]# lvscan ACTIVE '/dev/test_vg/lv1_from_test_vg' [50.00 GiB] inherit # 自己創(chuàng)建的 ACTIVE '/dev/centos/swap' [2.00 GiB] inherit # 系統(tǒng)默認(rèn) ACTIVE '/dev/centos/root' [46.99 GiB] inherit # 系統(tǒng)默認(rèn)
7.創(chuàng)建文件系統(tǒng)
mkfs.xfs 邏輯卷名
[root@localhost ~]# mkfs.xfs /dev/test_vg/lv1_from_test_vg
8.創(chuàng)建目錄掛載使用
[root@localhost ~]# mkdir /lv1 [root@localhost ~]# mount -t xfs /dev/test_vg/lv1_from_test_vg /lv1
9.查看掛載情況
[root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 47G 1.3G 46G 3% / /dev/sda1 1014M 138M 877M 14% /boot tmpfs 98M 0 98M 0% /run/user/0 /dev/mapper/test_vg-lv1_from_test_vg 50G 33M 50G 1% /lv1 [root@localhost ~]#
不要縮容!??!并且xfs?脆不?持縮容
不要縮容?。?!并且xfs?脆不?持縮容
不要縮容?。。〔⑶襵fs?脆不?持縮容
所以下面的縮容純屬了解
二、卷組的在線擴(kuò)展與縮容
1. vg擴(kuò)容
1.準(zhǔn)備新的硬盤加入到pv,檢查pv大小。
這里我們還有/dev/sdb2,可以將其加入卷組,方法都一樣,為了簡化就不插入新硬盤了。
[root@localhost ~]# pvcreate /dev/sdb2 Physical volume "/dev/sdb2" successfully created. [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- <49.00g 4.00m /dev/sdb1 test_vg lvm2 a-- <10.00g <10.00g /dev/sdb2 lvm2 --- <10.00g <10.00g /dev/sdc test_vg lvm2 a-- <100.00g <50.00g [root@localhost ~]#
使用vgextend 擴(kuò)展卷組 在已經(jīng)存在的卷組test_vg(上面我們自己創(chuàng)建的)上擴(kuò)展卷組
vgextend 原卷組名 創(chuàng)建的新pv
[root@localhost ~]# vgextend test_vg /dev/sdb2 Volume group "test_vg" successfully extended
再次檢查卷組,發(fā)現(xiàn)已經(jīng)變大了(之前總大小是110G),說明擴(kuò)容成功
現(xiàn)在總大小是120G,正好是/dev/sdb 和/dev/sdc大小之和。
[root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- <49.00g 4.00m test_vg 3 1 0 wz--n- <119.99g <69.99g
2. vg縮容
假設(shè)想移除 /dev/sdb(/dev/sdb1) 磁盤,建議先將 sdb 磁盤數(shù)據(jù)先遷移到 sdc 磁盤,然后在移除
注意:同一卷組的磁盤才可以進(jìn)行在線遷移
1.檢查當(dāng)前邏輯卷 VG 中 PV 使用情況
[root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- <49.00g 4.00m /dev/sdb1 test_vg lvm2 a-- <10.00g <10.00g /dev/sdb2 test_vg lvm2 a-- <10.00g <10.00g /dev/sdc test_vg lvm2 a-- <100.00g <50.00g
2.pvmove 在線數(shù)據(jù)遷移,將 sdb1 的數(shù)據(jù)遷移至 其他盤(可以是sdb2也可以是sdc,隨機(jī)的)
# 因?yàn)槲覀儸F(xiàn)在所有的磁盤都是空的,模擬寫入點(diǎn)數(shù)據(jù)方便遷移
否則會(huì)報(bào)錯(cuò)No data to move for test_vg
[root@localhost ~]# touch /lv1/{a..z}.txt
[root@localhost ~]# pvmove /dev/sdb1 # 實(shí)際業(yè)務(wù)中如果這個(gè)磁盤有數(shù)據(jù),那它就會(huì)執(zhí)行成功
3.檢查是否將 sdb1 數(shù)據(jù)遷移至 其他盤
[root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- <49.00g 4.00m /dev/sdb1 test_vg lvm2 a-- <10.00g <10.00g /dev/sdb2 test_vg lvm2 a-- <10.00g <10.00g /dev/sdc test_vg lvm2 a-- <100.00g <50.00g [root@localhost ~]#
4.從卷組中移除 sdb 磁盤
vgreduce vg名 設(shè)備名
[root@localhost ~]# vgreduce test_vg /dev/sdb1 Removed "/dev/sdb1" from volume group "test_vg"
5.查看
root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- <49.00g 4.00m /dev/sdb1 lvm2 --- 10.00g 10.00g /dev/sdb2 test_vg lvm2 a-- <10.00g <10.00g /dev/sdc test_vg lvm2 a-- <100.00g <50.00g [root@localhost ~]#
三、邏輯卷的在線擴(kuò)容與縮容
1. lv擴(kuò)容
擴(kuò)展邏輯卷:取決于 vg 卷中是否還有剩余的容量
注意擴(kuò)展邏輯卷不能超過卷組 VG 的總大小
[root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- <49.00g 4.00m test_vg 2 1 0 wz--n- 109.99g 59.99g [root@localhost ~]#
可以看到vg還有60G剩余
再看看lv
[root@localhost ~]# lvscan ACTIVE '/dev/test_vg/lv1_from_test_vg' [50.00 GiB] inherit ACTIVE '/dev/centos/swap' [2.00 GiB] inherit ACTIVE '/dev/centos/root' [46.99 GiB] inherit [root@localhost ~]#
給lv1_from_test_vg邏輯卷擴(kuò)容+10G
[root@localhost ~]# lvextend -L +10G /dev/test_vg/lv1_from_test_vg Size of logical volume test_vg/lv1_from_test_vg changed from 50.00 GiB (12800 extents) to 60.00 GiB (15360 extents). Logical volume test_vg/lv1_from_test_vg successfully resized. [root@localhost ~]# #也可以選擇分配卷組中多少百分比給邏輯卷 [root@localhost ~]# lvextend -l +50%FREE /dev/test_vg/lv1_from_test_vg
查看擴(kuò)展后lv
[root@localhost ~]# lvscan ACTIVE '/dev/test_vg/lv1_from_test_vg' [60.00 GiB] inherit ACTIVE '/dev/centos/swap' [2.00 GiB] inherit ACTIVE '/dev/centos/root' [46.99 GiB] inherit [root@localhost ~]#
可以看到,/dev/test_vg/lv1_from_test_vg 確實(shí)增大了10G
擴(kuò)展邏輯卷后需要更新fs文件系統(tǒng)
xfs_growfs 具體的lv名稱# xfs文件格式擴(kuò)容resize2fs 具體的lv名稱# ext文件格式擴(kuò)容
[root@localhost ~]# xfs_growfs /dev/test_vg/lv1_from_test_vg
2. 刪除lv
1.先卸載掛載點(diǎn),然后在移除邏輯卷
[root@localhost ~]# umount /dev/test_vg/lv1_from_test_vg
2.刪除lv
lvremove
[root@localhost ~]# lvremove /dev/test_vg/lv1_from_test_vg Do you really want to remove active logical volume test_vg/lv1_from_test_vg? [y/n]: y Logical volume "lv1_from_test_vg" successfully removed [root@localhost ~]#
3.刪除 vg
vgremove vg名稱
[root@localhost ~]# vgremove test_vg Volume group "test_vg" successfully removed [root@localhost ~]#
4.刪除pv
pvremove
[root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- <49.00g 4.00m /dev/sdb1 lvm2 --- 10.00g 10.00g /dev/sdb2 lvm2 --- <10.00g <10.00g /dev/sdc lvm2 --- 100.00g 100.00g [root@localhost ~]# pvremove /dev/sdb1 Labels on physical volume "/dev/sdb1" successfully wiped. [root@localhost ~]# pvremove /dev/sdb2 Labels on physical volume "/dev/sdb2" successfully wiped. [root@localhost ~]# pvremove /dev/sdc Labels on physical volume "/dev/sdc" successfully wiped. [root@localhost ~]#
四、快照
LVM 機(jī)制還提供了對(duì) LV 做快照的功能,也就是說可以給?件系統(tǒng)做?個(gè)備份,這也是設(shè)計(jì) LVM 快照的主要?的。LVM 的快照功能采?寫時(shí)復(fù)制技術(shù)(Copy-On-Write,COW),這?傳統(tǒng)的備份技術(shù)的效率要?很多。創(chuàng)建快照時(shí)不?停?服務(wù),就可以對(duì)數(shù)據(jù)進(jìn)?備份。說明:LVM 還?持 thin 類型的快照,但是本?中的快照都是指 COW 類型的快照。
LVM 采?的寫時(shí)復(fù)制,是指當(dāng) LVM 快照創(chuàng)建的時(shí)候,僅創(chuàng)建到實(shí)際數(shù)據(jù)的 inode 的硬鏈接(hark-link)?已。只要實(shí)際的數(shù)據(jù)沒有改變,快照就只包含指向數(shù)據(jù)的 inode 的指針,??數(shù)據(jù)本身??煺諘?huì)跟蹤原始卷中塊的改變,?旦你更改了快照對(duì)應(yīng)的?件或?錄,這個(gè)時(shí)候原始卷上將要改變的數(shù)據(jù)會(huì)在改變之前拷?到快照預(yù)留的空間
lvm快照的原理:

創(chuàng)建快照實(shí)際上也是創(chuàng)建了?個(gè)邏輯卷,只不過該卷的屬性與普通邏輯卷的屬性有些不?樣。我們可以通過上圖來理解快照數(shù)據(jù)卷(圖中的實(shí)線框表示快照區(qū)域,虛線框表示?件系統(tǒng)):
#左圖為最初創(chuàng)建的快照數(shù)據(jù)卷狀況,LVM 會(huì)預(yù)留?個(gè)區(qū)域 (?如左圖的左側(cè)三個(gè) PE 區(qū)塊) 作為數(shù)據(jù)存放處。
此時(shí)快照數(shù)據(jù)卷內(nèi)并沒有任何數(shù)據(jù),?快照數(shù)據(jù)卷與源數(shù)據(jù)卷共享所有的 PE 數(shù)據(jù), 因此你會(huì)看到快照數(shù)據(jù)卷的內(nèi)容與源數(shù)據(jù)卷中的內(nèi)容是?模?樣的。
等到系統(tǒng)運(yùn)??陣?后,假設(shè) A 區(qū)域的數(shù)據(jù)被更新了(上?右圖所示),則更新前系統(tǒng)會(huì)將該區(qū)域的數(shù)據(jù)移動(dòng)到快照數(shù)據(jù)卷中,所以在右圖的快照數(shù)據(jù)卷中被占?了?塊 PE 成為 A,?其他 B 到 I 的區(qū)塊則還是與源數(shù)據(jù)卷共享!
由于快照區(qū)與原本的 LV 共享很多 PE 區(qū)塊,因此快照區(qū)與被快照的 LV 必須要在同?個(gè) VG 上頭,
下?兩點(diǎn)?常重要:
- 1、VG中需要預(yù)留存放快照本身的空間,不能全部被占滿。
- 2、快照所在的 VG 必須與被備份的 LV 相同,否則創(chuàng)建快照會(huì)失敗。
總結(jié)
快照的本質(zhì)就是?個(gè)特殊的lv,創(chuàng)建快照后,如果源數(shù)據(jù)卷中的?件被更新了,會(huì)將?數(shù)據(jù)賦給快照的
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Apache中配置支持CORS(跨域資源共享)實(shí)例
這篇文章主要介紹了Apache中配置支持CORS(跨域資源共享)實(shí)例,本文給出了一個(gè)完整的apache、PHP、JavaScript結(jié)合實(shí)現(xiàn)的跨域資源共享實(shí)例,需要的朋友可以參考下2015-01-01
Centos7 firewall和docker沖突問題及解決過程
本文描述了一個(gè)在CentOS 7上使用firewalld和Docker容器的問題,當(dāng)firewalld啟動(dòng)或重啟時(shí),會(huì)從iptables中移除Docker的規(guī)則,導(dǎo)致Docker容器中的服務(wù)無法訪問,最終,作者通過先啟動(dòng)或重啟防火墻,然后重啟Docker服務(wù),并刪除有問題的容器,重新創(chuàng)建容器來解決了問題2025-12-12
解決nginx/apache靜態(tài)資源跨域訪問問題詳解
有時(shí)為了優(yōu)化網(wǎng)站訪問速度,會(huì)給一些靜態(tài)資源配置cdn加速,但是有時(shí)候會(huì)出現(xiàn)跨域訪問的問題,在nginx和apache服務(wù)中可進(jìn)行如下配置2018-10-10

