1. 程式人生 > >LVM(邏輯卷管理)

LVM(邏輯卷管理)

一、LVM概念

LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁碟分割槽進行管理的一種機制,LVM是建立在硬碟和分割槽之上的一個邏輯層,來提高磁碟分割槽管理的靈活性。
LVM的工作原理其實很簡單,它就是通過將底層的物理硬碟抽象的封裝起來,然後以邏輯卷的方式呈現給上層應用。在傳統的磁碟管理機制中,我們的上層應用是直接訪問檔案系統,從而對底層的物理硬碟進行讀取,而在LVM中,其通過對底層的硬碟進行封裝,當我們對底層的物理硬碟進行操作時,其不再是針對於分割槽進行操作,而是通過一個叫做邏輯卷的東西來對其進行底層的磁碟管理操作。比如說我增加一個物理硬碟,這個時候上層的服務是感覺不到的,因為呈現給上層服務的是以邏輯卷的方式。
LVM最大的特點就是可以對磁碟進行動態管理。因為邏輯卷的大小是可以動態調整的,而且不會丟失現有的資料。如果我們新增加了硬碟,其也不會改變現有上層的邏輯卷。作為一個動態磁碟管理機制,邏輯卷技術大大提高了磁碟管理的靈活性。

二、LVM術語

PV(Physical Volume)- 物理卷
物理卷在邏輯卷管理中處於最底層,它可以是實際物理硬碟上的分割槽,也可以是整個物理硬碟。
VG(Volumne Group)-卷組
卷組建立在物理卷之上,一個卷組中至少要包括一個物理卷,在卷組建立之後可動態新增物理捲到卷組中。一個邏輯卷管理系統工程中可以只有一個卷組,也可以擁有多個卷組。
LV(Logical Volume)- 邏輯卷
邏輯卷建立在卷組之上,卷組中的未分配空間可以用於建立新的邏輯卷,邏輯卷建立後可以動態地擴充套件和縮小空間。系統中的多個邏輯卷可以屬於同一個卷組,也可以屬於不同的多個卷組

PE(Physical Extent):每一個物理卷被劃分為稱為PE(Physical Extents)的基本單元,具有唯一編號的PE是可以被LVM定址的最小單元。PE的大小是可配置的,預設為4MB。

LE(Logical Extent):邏輯卷也被劃分為被稱為LE(Logical Extents) 的可被定址的基本單位。在同一個卷組中,LE的大小和PE是相同的,並且一一對應。

如下圖所示PV、VG、LV三者關係:

 

三、常用命令
PV:Physical(物理卷)

        pvcreate、pvs 、pvdisplay 、pvremove、pvmove、pvscan

VG:Volume Group(卷組)

        vgcreate、vgs、vgdisplay、vgremove、vgrename、vgreduce、vgextent、vgscan

LV:logical Volume(邏輯卷)

         lvcreate、lvs、lvdisplay、lvremove、lvextend、lvresize、lvscan、lvrename

四、環境準備

1、虛擬機器新增兩塊磁碟

    ESXI線新增虛擬磁碟,fdisk -l沒發現,一般情況下重啟伺服器就可以。但是不能影響業務,為什麼新增磁碟或磁碟擴容後,Linux系統識別不到呢?因為連線儲存裝置的SCSI匯流排需要重新掃描,才能識別到這些新的儲存裝置

[root@Node1 ~]# ls /sys/class/scsi_host/          //確定主機匯流排SCSI匯流排號    
host0  host1  host2
[root@Node1 ~]#  echo "- - -" > /sys/class/scsi_host/host0/scan   //重新掃描 SCSI匯流排新增磁碟
[root@Node1 ~]#  echo "- - -" > /sys/class/scsi_host/host1/scan
[root@Node1 ~]#  echo "- - -" > /sys/class/scsi_host/host2/scan
[root@Node1 ~]# fdisk -l | grep "^Disk /dev"     //檢查硬碟是否線上
Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdc: 32.2 GB, 32212254720 bytes, 62914560 sectors
[root@Node1 ~]# 

 2、用fidsk分別對/dev/sdb與/dev/sdc進行分割槽

[root@Node1 ~]# fdisk  /dev/sdb   //對/dev/sdb進行分割槽
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.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xafcc8a41.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p //主分割槽
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +10G  
Partition 1 of type Linux and of size 10 GiB is set

Command (m for help): t   
Selected partition 1
Hex code (type L to list all codes): 8e    
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (2-4, default 2): 2
First sector (20973568-41943039, default 20973568): 
Using default value 20973568
Last sector, +sectors or +size{K,M,G} (20973568-41943039, default 41943039): 
Using default value 41943039
Partition 2 of type Linux and of size 10 GiB is set

Command (m for help): t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

3、partprobe讓核心重新識別分割槽表

[root@Node1 ~]#partprobe /dev/sd{b,c}
[root@Node1 ~]# partx -a /dev/sdc
[root@Node1 ~]# partx -s /dev/sdc [root@Node1 ~]# cat /proc/partitions //檢視分割槽資訊表 major minor #blocks name 8 0 52428800 sda 8 1 204800 sda1 8 2 20971520 sda2 8 3 20971520 sda3 8 4 0 sda4 8 5 5242880 sda5 8 6 2097152 sda6 8 7 2936832 sda7 8 16 20971520 sdb 8 17 10485760 sdb1 8 18 10484736 sdb2 8 32 31457280 sdc 8 33 1 sdc1 8 37 20971520 sdc5 8 38 10482688 sdc6 11 0 4415488 sr0 [root@Node1 ~]# ls /dev/sdb* //檢視/dev/sdb分割槽情況 /dev/sdb /dev/sdb1 /dev/sdb2 [root@Node1 ~]# ls /dev/sdc* //檢視/dev/sdc分割槽情況 /dev/sdc /dev/sdc1 /dev/sdc5 /dev/sdc6

4、驗證磁碟分割槽結果

[root@Node1 ~]# fdisk -l | grep "LVM$"
/dev/sdb1            2048    20973567    10485760   8e  Linux LVM
/dev/sdb2        20973568    41943039    10484736   8e  Linux LVM
/dev/sdc5            4096    41947135    20971520   8e  Linux LVM
/dev/sdc6        41949184    62914559    10482688   8e  Linux LVM 

四、LVM常用操作命令

1、安裝LVM

[root@Node1 ~]# cat /etc/system-release     //檢視系統版本
CentOS Linux release 7.6.1810 (Core)
[root@Node1 ~]# yum -y install lvm2         //安裝LVM包
[root@Node1 ~]# rpm -qa | grep lvm
llvm-private-6.0.1-2.el7.x86_64
lvm2-2.02.180-10.el7_6.8.x86_64
lvm2-libs-2.02.180-10.el7_6.8.x86_64

2、PV物理卷常用操作
        pvcreate /dev/DEVICE: 建立PV
        pvs:簡要PV資訊顯示
        pvdisplay:顯示PV的詳細資訊
        pvremove  /dev/DEVICE: 移除PV
        pvscan: 掃描系統中連線的所有硬碟,列出找到的物理卷列表

[root@Node1 ~]# pvcreate /dev/sdb{1,2}       //建立2個物理卷pv
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
[root@Node1 ~]# pvs                         //檢視物理卷摘要資訊
  PV         VG Fmt  Attr PSize   PFree  
  /dev/sdb1     lvm2 ---   10.00g  10.00g
  /dev/sdb2     lvm2 ---  <10.00g <10.00g
[root@Node1 ~]# pvscan                     //搜尋已存在的物理卷
  PV /dev/sdb2                      lvm2 [<10.00 GiB]
  PV /dev/sdb1                      lvm2 [10.00 GiB]
  Total: 2 [<20.00 GiB] / in use: 0 [0   ] / in no VG: 2 [<20.00 GiB]
[root@Node1 ~]# pvremove  /dev/sdb2         //移除/dev/sdb2
  Labels on physical volume "/dev/sdb2" successfully wiped.
[root@Node1 ~]# pvdisplay  /dev/sdb1       //顯示詳細的物理卷資訊
  "/dev/sdb1" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               k6YMJN-BfTI-DL8G-qjEr-onjT-CmDK-IzC9vB
[root@Node1 ~]# pvcreate /dev/sdb2 // 將/dev/sdb2加入物理卷
  Physical volume "/dev/sdb2" successfully created.
[root@Node1 ~]# pvs -o +pv_uuid
  PV         VG     Fmt  Attr PSize   PFree   PV UUID                               
  /dev/sdb1  datavg lvm2 a--  <10.00g <10.00g GX3Clm-pGDv-4xtw-VIr3-x00m-vIlD-zPOooJ
  /dev/sdb2  datavg lvm2 a--  <10.00g <10.00g zuMtAt-6S6z-3vDa-xnj2-WADw-hk0s-H9V1Wi
  /dev/sdc5  datavg lvm2 a--  <10.00g <10.00g orxgvl-GKbn-LMN0-YOUY-mIGA-TqJp-g1V8iv
[root@Node1 ~]# pvs -v

3、VG常用操作
        vgcreate /dev/DEVICE: 建立VG卷組
        vgs: 簡要VG資訊顯示
        vgextend:動態擴充套件LVM卷組,它通過向卷組中新增物理捲來增加捲組的容量
        vgreduce:通過刪除LVM卷組中的物理捲來減少卷組容量,不能刪除LVM卷組中剩餘的最後一個物理卷
        vgdisplay:顯示VG的詳細資訊
        vgscan:查詢系統中存在的LVM卷組,並顯示找到的卷組列表
        vgremove:刪除卷組,其上的邏輯卷必須處於離線狀態

[root@Node1 ~]# vgcreate datavg /dev/sdb{1,2}     //建立datavg卷組  
  Volume group "datavg" successfully created
[root@Node1 ~]# vgdisplay datavg           //顯示datavg詳細資訊,也可以使用vgdisplay -vv或vgdisplay -vvv命令       --- Volume group ---
  VG Name               datavg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               19.99 GiB
  PE Size               4.00 MiB
  Total PE              5118
  Alloc PE / Size       0 / 0   
  Free  PE / Size       5118 / 19.99 GiB
  VG UUID               thDWMH-ZXq6-zJP5-LtTn-xmQh-OpG5-b3qrUu
   
[root@Node1 ~]# vgs       //顯示VG的簡要資訊
  VG     #PV #LV #SN Attr   VSize  VFree 
  datavg   2   0   0 wz--n- 19.99g 19.99g
[root@Node1 ~]# vgextend datavg  /dev/sdc5    //向datavg卷組中新增物理卷
  Physical volume "/dev/sdc5" successfully created.
  Volume group "datavg" successfully extended
[root@Node1 ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sdb1  datavg lvm2 a--  <10.00g <10.00g
  /dev/sdb2  datavg lvm2 a--  <10.00g <10.00g
  /dev/sdc5  datavg lvm2 a--  <10.00g <10.00g
[root@Node1 ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  datavg   3   0   0 wz--n- <29.99g <29.99g
[root@Node1 ~]# vgreduce datavg /dev/sdc5  //從datavg卷組中移除物理卷
  Removed "/dev/sdc5" from volume group "datavg"
[root@Node1 ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  datavg   2   0   0 wz--n- 19.99g 19.99g
[root@Node1 ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sdb1  datavg lvm2 a--  <10.00g <10.00g
  /dev/sdb2  datavg lvm2 a--  <10.00g <10.00g
  /dev/sdc5         lvm2 ---   20.00g  20.00g
[root@Node1 ~]# vgremove datavg       //移除datavg
  Volume group "datavg" successfully removed.
[root@Node1 ~]# vgs
[root@Node1 ~]# vgcreate datavg /dev/sdb{1,2}
  Volume group "datavg" successfully created
[root@Node1 ~]# vgdisplay datavg 
  --- Volume group ---
  VG Name               datavg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               19.99 GiB
  PE Size               4.00 MiB
  Total PE              5118
  Alloc PE / Size       0 / 0   
  Free  PE / Size       5118 / 19.99 GiB
  VG UUID               T8c1W9-xpJF-vvnS-bm5y-gqmY-5RBK-wRkD9Y
   
[root@Node1 ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  datavg   2   0   0 wz--n- 19.99g 19.99g
[root@Node1 ~]# vgextend datavg  /dev/sdc5
  Volume group "datavg" successfully extended
[root@Node1 ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  datavg   3   0   0 wz--n- <29.99g <29.99g
[root@Node1 ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sdb1  datavg lvm2 a--  <10.00g <10.00g
  /dev/sdb2  datavg lvm2 a--  <10.00g <10.00g
  /dev/sdc5  datavg lvm2 a--  <10.00g <10.00g
[root@Node1 ~]# pvscan //掃描系統中連線的所有硬碟,列出找到的物理卷列表
  PV /dev/sdb1   VG datavg          lvm2 [<10.00 GiB / <10.00 GiB free]
  PV /dev/sdb2   VG datavg          lvm2 [<10.00 GiB / <10.00 GiB free]
  PV /dev/sdc5   VG datavg          lvm2 [<10.00 GiB / <10.00 GiB free]
  Total: 3 [<29.99 GiB] / in use: 3 [<29.99 GiB] / in no VG: 0 [0   ]
[root@Node1 ~]# vgscan //顯示系統中所有卷組
  Reading volume groups from cache.
  Found volume group "datavg" using metadata type lvm2
[root@Node1 ~]# vgs -o +pv_name
  VG     #PV #LV #SN Attr   VSize   VFree   PV        
  datavg   3   0   0 wz--n- <29.99g <29.99g /dev/sdb1
  datavg   3   0   0 wz--n- <29.99g <29.99g /dev/sdb2
  datavg   3   0   0 wz--n- <29.99g <29.99g /dev/sdc5
[root@Node1 ~]# vgs -v
  VG     Attr   Ext   #PV #LV #SN VSize   VFree   VG UUID                                VProfile
  datavg wz--n- 4.00m   3   0   0 <29.99g <29.99g 2b9qgs-mCb0-Isc2-Af74-5uWo-Yf8Q-4KOmns 

 4、LV常用操作
          lvcreate : 用來建立LVM的邏輯卷
               lvcreate -L #[mMgGtT] -n NAME VolumeGroup
              用法:lvcreate [選項] [引數]
    選項:
       -L:指定大小
       -l:指定大小(LE數)
       -n:指定名稱
       -s:建立快照
       -p r:設定為只讀(該選項一般用於建立快照中
        lvs : 顯示邏輯卷資訊
        lvscan:掃描當前系統中的所有邏輯卷,及其對應的裝置檔案
        lvdisplay:顯示邏輯卷屬性
        lvextend:可線上擴充套件邏輯卷空間
        lvreduce:縮減邏輯卷空間,一般離線使用
        lvremove:刪除邏輯卷,需要處於離線(解除安裝)狀態

[root@Node1 ~]# lvcreate -L 5G -n datalv datavg    //建立datalv邏輯卷
  Logical volume "datalv" created.
[root@Node1 ~]# ls /dev/mapper/
control  datavg-datalv
[root@Node1 ~]# mkfs.xfs -L Backup /dev/datavg/datalv   //格式化邏輯卷
meta-data=/dev/datavg/datalv     isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1310720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@Node1 ~]#  mkdir /dbbackup
[root@Node1 ~]#  mount /dev/mapper/datavg-datalv /dbbackup/   //掛載至/dbbackup目錄
[root@Node1 ~]#  df -hT | grep datalv  //查詢datalv的掛載情況
/dev/mapper/datavg-datalv xfs       5G   33M  5G   1% /dbbackup
[root@Node1 ~]# lvs  //顯示邏輯卷資訊
  LV     VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  datalv datavg -wi-ao---- 5.00g                                                    
[root@Node1 ~]# lvscan  //掃描系統中的邏輯卷
  ACTIVE            '/dev/datavg/datalv' [5.00 GiB] inherit
[root@Node1 ~]# lvdisplay  //顯示邏輯卷詳細資訊
  --- Logical volume ---
  LV Path                /dev/datavg/datalv
  LV Name                datalv
  VG Name                datavg
  LV UUID                Y1P5zJ-Wy1Q-kERv-VUtC-4vAm-NsMb-3aCy1y
  LV Write Access        read/write
  LV Creation host, time Node1.contoso.com, 2019-09-18 06:31:59 +0800
  LV Status              available
  # open                 1
  LV Size                5.00 GiB
  Current LE             3840
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
[root@Node1 ~]# lvcreate -L 3G -n weblv datavg //建立weblv邏輯卷
[root@Node1 ~]# mkfs.ext4 -L webapp /dev/datavg/weblv
[root@Node1 ~]# mkdir /webapp
[root@Node1 ~]# mount /dev/mapper/datavg-weblv /webapp/
[root@Node1 ~]# df -hT | grep mapper
/dev/mapper/datavg-datalv xfs        5G   33M   5G   1% /dbbackup
/dev/mapper/datavg-weblv  ext4      2.9G  9.0M  2.8G   1% /webapp
[root@Node1 ~]# lvs
  LV     VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  datalv datavg -wi-ao---- 5.00g                                                    
  weblv  datavg -wi-ao----  3.00g                                                    
[root@Node1 ~]# lvscan
  ACTIVE            '/dev/datavg/datalv' [5.00 GiB] inherit
  ACTIVE            '/dev/datavg/weblv' [3.00 GiB] inherit

 5、LVM邏輯卷的擴充與縮小

       lvextend:擴充套件邏輯卷空間
             lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
       lvreduce:縮減邏輯卷空間
          縮減邏輯卷:
            1、先確定縮減後的目標大小;並確保對應的目標邏輯卷大小中有足夠的空間可容納原有所有資料;
            2、先解除安裝檔案系統,並要執行強制檢測  e2fsck -f
            3、縮減邏輯邊界 resize2fs DEVICE
            4、縮減物理邊界 lvreduce
            5、新掛載 mount
        PS:縮減很危險,要離線操作

       lvresize:擴充套件或縮小邏輯卷空間
       resize2fs: 針對的是ext2、ext3、ext4檔案系統
                      調整ext2\ext3\ext4檔案系統的大小,它可以放大或者縮小沒有掛載的檔案系統的大小。如果檔案系統已經掛載,它可以擴大檔案系統的大小,前提是核心支援線上調整大小。
       xfs_growfs: 針對的是xfs檔案系統

     1)ext2/ext3/ext4檔案系統的調整命令是resize2fs(增大和減小都支援)

[root@Node1 ~]# lvextend -L 5G /dev/mapper/datavg-weblv    //增大至5G
[root@Node1 ~]# lvextend -L +2G /dev/mapper/datavg-weblv   //增加2G
[root@Node1 ~]# resize2fs /dev/mapper/datavg-weblv      //調整邏輯大小
[root@Node1 ~]# df -hT | grep weblv                     //由3G增大至5,又增加2G,目前7G
/dev/mapper/datavg-weblv  ext4      6.9G   14M  6.5G   1% /webapp     
[root@Node1 webapp]# cp /etc/fstab .  //複製fstab命令至當前目錄
[root@Node1 webapp]# ls
fstab  lost+found
[root@Node1 ~]# umount -f /dev/mapper/datavg-weblv  //解除安裝/dev/mapper/datavg-weblv邏輯卷
[root@Node1 ~]# e2fsck -f /dev/datavg/weblv   //檢查ext2、ext3、ext4檔案系統,如果系統已經掛載了,那麼不建議去檢查,因為這樣是不安全的
e2fsck 1.42.9 (28-Dec-2013)
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
webapp: 12/458752 files (0.0% non-contiguous), 48640/1835008 blocks
[root@Node1 ~]# resize2fs /dev/datavg/weblv 5G  //調整至5G空間大小的邏輯卷
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/datavg/weblv to 1310720 (4k) blocks.
The filesystem on /dev/datavg/weblv is now 1310720 blocks long.

[root@Node1 ~]# lvreduce -L 5G /dev/datavg/weblv  //縮減至5G空間大小的邏輯卷
  WARNING: Reducing active logical volume to 5.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce datavg/weblv? [y/n]: y
  Size of logical volume datavg/weblv changed from 7.00 GiB (1792 extents) to 5.00 GiB (1280 extents).
  Logical volume datavg/weblv successfully resized.
[root@Node1 ~]# mount /dev/mapper/datavg-weblv /webapp/  //重新掛載
[root@Node1 ~]# df -hT | grep weblv/dev/mapper/datavg-weblv  ext4      4.9G   12M  4.7G   1% /webapp
[root@Node1 ~]# ls /webapp/      //檢視fstab檔案還在
fstab  lost+found

 2)xfs檔案系統的調整命令是xfs_growfs(只支援增大)

[root@Node1 ~]# lvextend -L 8G /dev/mapper/datavg-datalv   //增大至8G
[root@Node1 ~]# lvextend -L +2G /dev/mapper/datavg-datalv  //增加2G
[root@Node1 ~]# xfs_growfs /dev/mapper/datavg-datalv     //擴容xfs邏輯卷
[root@Node1 ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree 
  datavg   3   2   0 wz--n- <29.99g <9.99g
[root@Node1 ~]# lvs
  LV     VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  datalv datavg -wi-ao---- 15.00g                                                    
  weblv  datavg -wi-ao----  5.00g                                                    
[root@Node1 ~]# lvscan
  ACTIVE            '/dev/datavg/datalv' [15.00 GiB] inherit
  ACTIVE            '/dev/datavg/weblv' [5.00 GiB] inherit

PS:xfs檔案系統只支援增大分割槽空間的情況,不支援減小的情況,硬要減小的話,只能在減小後將邏輯分割槽重新通過mkfs.xfs命令重新格式化才能掛載上,這樣的話這個邏輯分割槽上原來的資料就丟失了

 6、邏輯卷快照
 snapshot是像照相一樣將當前的系統資訊儲存下來。
當建立一個snapshot的時候,僅拷貝原始卷裡資料的元資料(meta-data)。建立的時候,並不會有資料的物理拷貝,因此snapshot的建立幾乎是實時的,當原始捲上有寫操作執行時,snapshot跟蹤原始卷塊的改變,這個時候原始捲上將要改變的資料在改變之前被拷貝到snapshot預留的空間裡,因此這個原理的實現叫做寫時複製(copy-on-write)。
在寫操作寫入塊之前,原始資料被移動到 snapshot空間裡,這樣就保證了所有的資料在snapshot建立時保持一致。而對於snapshot的讀操作,如果是沒有修改過的塊,那麼會將讀操作直接重定向到原始捲上,如果是已經修改過的塊,那麼就讀取拷貝到snapshot中的塊。
     注:建立快照前需將針對的邏輯卷臨時改為只讀,建立完畢後再改為讀寫,例如
     - 建立快照前:mount -o remount,ro /dev/datavg/weblv /webapp
     - 建立快照後:mount -o remount,rw /dev/datavg/weblv /webapp

[root@Node1 webapp]# df -h | grep datavg
/dev/mapper/datavg-weblv   4.9G   13M  4.7G   1% /webapp
/dev/mapper/datavg-datalv   15G   33M   15G   1% /dbbackup
[root@Node1 ~]# cd /webapp/
[root@Node1 webapp]# cp /etc/passwd /etc/fstab /etc/redhat-release .    //複製一些檔案到當前目錄
[root@Node1 webapp]# ls
fstab  lost+found  passwd  redhat-release
[root@Node1 webapp]# mount -o remount,ro /dev/datavg/weblv /webap  //先改成只讀掛載
[root@Node1 webapp]# lvcreate -s -L 2G -n weblvsnap -p r /dev/datavg/weblv  //對weblv做快照為weblvsnap 大小為2G,設為只讀
  Logical volume "weblvsnap" created.
[root@Node1 webapp]# mount -o remount,rw /dev/datavg/weblv /webapp  //快照完,改為讀寫掛載
[root@Node1 webapp]# mdir /mnt/web
[root@Node1 webapp]# mount /dev/datavg/weblvsnap /mnt/web/    //掛載快照
mount: /dev/mapper/datavg-weblvsnap is write-protected, mounting read-only
[root@Node1 webapp]# df -hT | grep weblv
/dev/mapper/datavg-weblv     ext4      4.9G   13M  4.7G   1% /webapp
/dev/mapper/datavg-weblvsnap ext4      4.9G   13M  4.7G   1% /mnt/web
[root@Node1 webapp]# ls
fstab  lost+found  passwd  redhat-release
[root@Node1 webapp]# rm -rf fstab && echo data > data.txt
[root@Node1 webapp]# ls
data.txt  lost+found  passwd  redhat-release
[root@Node1 webapp]# ls /mnt/web/
fstab  lost+found  passwd  redhat-release
[root@Node1 webapp]# ls
data.txt  lost+found  passwd  redhat-release
[root@Node1 webapp]# ls /mnt/web/
fstab  lost+found  passwd  redhat-release
[root@Node1 webapp]# cd /mnt/web/
[root@Node1 web]# ls
fstab  lost+found  passwd  redhat-release
[root@Node1 web]# rm -rf fstab   //掛載為只讀模式,無法刪除該目錄下的檔案
rm: cannot remove ‘fstab’: Read-only 
[root@Node1 web]# lvs
  LV        VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  datalv    datavg -wi-ao---- 15.00g                                                    
  weblv     datavg owi-aos---  5.00g                                                    
  weblvsnap datavg sri-aos---  2.00g      weblv  0.01                                   
[root@Node1 web]# lvscan
  ACTIVE            '/dev/datavg/datalv' [15.00 GiB] inherit
  ACTIVE   Original '/dev/datavg/weblv' [5.00 GiB] inherit
  ACTIVE   Snapshot '/dev/datavg/weblvsnap' [2.00 GiB] inherit
[root@Node1 web]# lvdisplay /dev/datavg/weblvsnap
--- Logical volume ---
LV Path /dev/datavg/weblvsnap
LV Name weblvsnap
VG Name datavg
LV UUID pf2jl8-21kq-kCKf-PymV-Vqvn-a5nm-q2tp0s
LV Write Access read only
LV Creation host, time Node1.contoso.com, 2019-09-19 05:31:23 +0800
LV snapshot status active destination for weblv
LV Status available
# open 1
LV Size 5.00 GiB
Current LE 1280
COW-table size 2.00 GiB
COW-table LE 512
Allocated to snapshot 0.01%
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:4

 7、刪除LVM流程
       解除安裝=>lvremove=>vgremove=>pvremove

[root@Node1 ~]# umount /dev/mapper/datavg-weblvsnap
[root@Node1 ~]# umount /dev/mapper/datavg-weblv
[root@Node1 ~]# umount /dev/mapper/datavg-datalv [root@Node1 ~]# lvremove /dev/mapper/datavg-weblvsnap //刪除邏輯卷,需要處於離線(解除安裝)狀態 Do you really want to remove active logical volume datavg/weblvsnap? [y/n]: y Logical volume "weblvsnap" successfully removed [root@Node1 ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert datalv datavg -wi-ao---- 15.00g weblv datavg -wi-ao---- 5.00g [root@Node1 ~]# vgremove datavg //刪除卷組 Do you really want to remove volume group "datavg" containing 1 logical volumes? [y/n]: y Do you really want to remove active logical volume datavg/weblv? [y/n]: y Logical volume "weblv" successfully removed Volume group "datavg" successfully removed [root@Node1 ~]# pvremove /dev/sdc5 //移除物理卷 Labels on physical volume "/dev/sdc5" successfully wiped.

 

五、LVM的優缺點   

     優點:
     1. 檔案系統可以跨多個磁碟,因此檔案系統大小不會受物理磁碟的限制。
     2. 可以在系統執行的狀態下動態的擴充套件檔案系統的大小    
     3. 可以增加新的磁碟到LVM的儲存池中。   
     4. 可以以映象的方式冗餘重要的資料到多個物理磁碟。    
     5. 可以方便的匯出整個卷組到另外一臺機器。
    
     缺點:   
     1. 在從卷組中移除一個磁碟的時候必須使用reducevg命令(這個命令要求root許可權,並且不允許在快照卷組中使用)。   
     2. 當卷組中的一個磁碟損壞時,整個卷組都會受到影響。    
     3. 因為加入了額外的操作,儲存效能受到影響
     4. 不能減小檔案系統大小(受檔案系統型別限制)
    

          使用 LVM 將獲得更好的可擴充套件性和可操作性,但卻損失了可靠性和儲存效能,總的說來就是在這兩者間選擇。