LVM邏輯卷管理

一、簡述

什么是邏輯卷?LVM(Logical Volume Manager)利用Linux內核device-mapper實現存儲系統的虛擬化。通過LVM,把底層存儲硬件抽象化成存儲邏輯塊,再將這些邏輯塊集合構成存儲池,從存儲池空間劃分分區,可以簡單地擴大或縮小分區,而不用擔心硬盤沒有足夠的連續空間。

使用邏輯卷分區有什么用?使用邏輯卷分區重點在于可以彈性地調整文件系統的容量。在實際環境中我們經常會遇一個文件系統空間不足,想要擴展卻又十分麻煩,一開始劃分空間偏大,想要縮減也是同樣不方便。而LVM可以很好地解決這些問題。

邏輯卷的缺點:由于LVM的原理,導致一個文件數據可能分布在多個硬件設備上,這些設備中只要有一個損壞,數據便有丟失。而且存儲效率上也有所下降。通常LVM結合RAID使用,提升讀寫效能或數據可靠性。

二、LVM原理

    首先理解四個邏輯卷基本概念:

    1、PV(Physical Volume)物理卷:LVM的基本存儲邏輯塊,可以在上面建立卷組的媒介,可以是硬盤分區,也可以是硬盤本身或者回環文件(loopback file)。物理卷包括一個特殊的header,其余部分被切割為一塊塊物理區域(physical extents)。

    2、VG(Volume Group)卷組:一個或多個物理卷組成卷組,即構成一個存儲池??梢栽诰斫M上創建“LVM分區”(邏輯卷)

    3、LV(Logical Volume)邏輯卷:由若干物理區域組成的虛擬分區,類似于硬盤分區

    4、PE(Physical Extent)物理區域:硬盤可供指派給邏輯卷的最小單位。

    5、LE(Logical Extent)邏輯區域:物理區域被指派給邏輯卷后變為邏輯區域,組成邏輯卷的最小單位。

lvm.jpg

簡答來講,我們先將塊設備初始化為PV,將若干個PV劃分為一個VG卷組并命名,卷組被創建時,將PV劃分為若干個PE,默認PE大小為4M,即這些PE構成了卷組,最后我們從卷組中拿出若干個PE組成邏輯卷并命名,相當于劃分出一塊硬盤分區,邏輯卷創建后就可以正常使用它了,比如進行格式化操作,然后掛載到目錄樹上。

三、LVM創建演示

以下操作環境為Centos6.8

準備工作:我劃分了三個分區/dev/sdb{1,2,3},并設置分區類型為 Linux LVM

blob.png

PV初始化

[root@centos6 mapper]$ pvcreate /dev/sdb{1,2,3}
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdb3" successfully created

簡單查看創建PV信息

[root@centos6 mapper]$ pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1       lvm2 ---- 5.00g 5.00g
  /dev/sdb2       lvm2 ---- 5.00g 5.00g
  /dev/sdb3       lvm2 ---- 5.00g 5.00g

詳細查看PV信息

[root@centos6 mapper]$ pvdisplay
  "/dev/sdb1" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0               #在未被加入卷組前,未劃分PE
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               jxLEiT-LOXv-9zqY-Vui2-QRNN-AkN4-vcZehm
   
  "/dev/sdb2" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               vHa18C-QW5D-8lB1-2dRX-jxOF-OcCF-aFBDSb
   
  "/dev/sdb3" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb3
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               NtfNOu-NRYs-CRv8-TcyI-HXbg-Nidr-89Kiwf

VG:創建一個名為jat的卷組

[root@centos6 mapper]$ vgcreate jat /dev/sdb{1,2}
  Volume group "jat" successfully created

查看VG信息

[root@centos6 mapper]# vgs
  VG   #PV #LV #SN Attr   VSize VFree
  jat    2   0   0 wz--n- 9.99g 9.99g
[root@centos6 mapper]# vgdisplay
  --- Volume group ---
  VG Name               jat
  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               9.99 GiB            #卷組容量為兩個PV容量總
  PE Size               4.00 MiB            #默認PE大小為4M
  Total PE              2558                #PE的總數
  Alloc PE / Size       0 / 0               #PE分配的情況
  Free  PE / Size       2558 / 9.99 GiB
  VG UUID               bwm8dx-QYgR-H0cO-xbCe-AvGe-zvDL-qfNIlp

再來看下PV信息

[root@centos6 mapper]$ pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               jat
  PV Size               5.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB       #相關PE的信息已更新
  Total PE              1279
  Free PE               1279
  Allocated PE          0
  PV UUID               jxLEiT-LOXv-9zqY-Vui2-QRNN-AkN4-vcZehm

創建LV

[root@centos6 mapper]$ lvcreate -L 2G -n pap1 jat
  Logical volume "pap1" created.
[root@centos6 mapper]$ lvcreate -L 4G -n pap2 jat
  Logical volume "pap2" created.

查看LV

[root@centos6 mapper]# lvs
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  pap1 jat  -wi-a----- 2.00g                                                    
  pap2 jat  -wi-a----- 4.00g                                                    
[root@centos6 mapper]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/jat/pap1        #邏輯卷設備地址
  LV Name                pap1
  VG Name                jat
  LV UUID                heIpsn-nhPS-BH91-CDrU-6pi0-LFyR-MZBeRs
  LV Write Access        read/write
  LV Creation host, time centos6.localdomain, 2016-09-02 20:26:27 +0800
  LV Status              available            #新創建的LV默認激活可用
  # open                 0
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

引用LV設備有多個路徑

形式1:/dev/mapper/VG_NAME-LV_NAME

形式2:/dev/VG_NAME/LV_NAME

以上都是軟連接指向實際設備文件/dev/dm-N

blob.png

格式化邏輯卷pap1,掛載

mkfs.ext4 /dev/jat/pap1
mount /dev/jat/pap1 /mnt/pap1

使用df命令查看,邏輯卷pap1可用容量

blob.png

嘗試向邏輯卷掛載點拷貝一些數據,完全正常,至此邏輯卷創建成功。

blob.png

四、擴展VG,LV

擴展VG

[root@centos6 ~]$ vgextend jat /dev/sdb3        #給卷組jat新加一個PV
  Volume group "jat" successfully extended
[root@centos6 ~]# vgs                           #查看VG容量已增加了5G
  VG   #PV #LV #SN Attr   VSize  VFree
  jat    3   2   0 wz--n- 14.99g 8.99g

在線擴展LV

命令工具:lvextend

-l|–extents [+]LogicalExtentsNumber[%{VG|LV|PVS|FREE|ORIGIN}]

    此選項可以指定邏輯卷新的LE數量,或增加的數量,也可指定百分比形式擴展

-L|–size [+]LogicalVolumeSize[bBsSkKmMgGtTpPeE]}

    此選項指定大小來擴展

lvextend -l +100%FREE /dev/jat/pap1     #將jat卷組的所有剩余PE分配給pap1
lvextend -L 5G /dev/jat/pap1            #將pap1擴展至5G大小
lvextend -L +1G /dev/jat/pap1           #增加1G的容量

擴展前,vgdisplay 查看卷組使用情況,原始pap1容量

blob.png

blob.png

開始擴展pap1

[root@centos6 ~]# lvextend -L +2G /dev/jat/pap1
  Size of logical volume jat/pap1 changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents).
  Logical volume pap1 successfully resized.

查看pap1 容量增加了2G

blob.png

再對文件系統調整大小

[root@centos6 ~]$ fsadm resize /dev/jat/pap1
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/jat-pap1 is mounted on /mnt/pap1; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/mapper/jat-pap1 to 1048576 (4k) blocks.
The filesystem on /dev/mapper/jat-pap1 is now 1048576 blocks long.

其實可以在擴展LV帶上-r選項可省略此步驟,例如

lvextend -r -L +2G /dev/jat/pap1

df-h查看文件系統大小,已經增加2G容量

blob.png

五、縮減LV

縮減操作較為危險,謹慎操作??s減LV之前確保已對文件系統重新調整大小。

1、卸載邏輯卷

umount /mnt/pap1

2、強制檢測文件系統

e2fsck -f /dev/mapper/jat-pap1

3、resize文件系統

[root@centos6 ~]$ fsadm resize /dev/jat/pap1 3G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/jat-pap1 to 786432 (4k) blocks.
The filesystem on /dev/mapper/jat-pap1 is now 786432 blocks long.

4、縮減LV

[root@centos6 ~]$ lvchange -an /dev/jat/pap1        #停止pap1工作
[root@centos6 ~]$ lvreduce -L 3G /dev/jat/pap1      #縮減至3G
  Size of logical volume jat/pap1 changed from 4.00 GiB (1024 extents) to 3.00 GiB (768 extents).
  Logical volume pap1 successfully resized.

5、激活,掛載

lvchange -ay /dev/jat/pap1
mount /dev/jat/pap1 /mnt/pap1

六、移除PV

移除PV正確操作不會毀壞數據

例如移除/dev/sdb1 此PV

[root@centos6 ~]# pvmove /dev/sdb1   #先把此PV內分配走PE轉移到其他PV上
  /dev/sdb1: Moved: 0.1%
  /dev/sdb1: Moved: 12.9%
  /dev/sdb1: Moved: 22.5%
  /dev/sdb1: Moved: 32.7%
  /dev/sdb1: Moved: 42.2%
  /dev/sdb1: Moved: 52.3%
  /dev/sdb1: Moved: 62.8%
  /dev/sdb1: Moved: 71.6%
  /dev/sdb1: Moved: 82.8%
  /dev/sdb1: Moved: 93.5%
  /dev/sdb1: Moved: 100.0%
[root@centos6 ~]# vgreduce jat /dev/sdb1    #在卷組中移除
  Removed "/dev/sdb1" from volume group "jat"
[root@centos6 ~]# pvremove /dev/sdb1        #最后清除PV標志
  Labels on physical volume "/dev/sdb1" successfully wiped

七、LVM快照功能

快照是一種特殊的邏輯卷,是復制原始卷的元數據而建立的邏輯卷,因此它創建速度很快,而且與原始卷在同一卷組。LVM 快照利用一種稱為“寫時復制(COW – Copy-On-Write)”的技術來跟蹤和維持其數據的一致性。當原始卷的數據塊(指原始卷所包含的所有數據塊,即是空白數據塊)第一次寫入新數據時,會將舊數據塊內容拷貝至快照空間中,也就是說如果只是刪掉原始卷某一文件,但是其占用的數據塊內容沒有改變,刪除文件只是不再占有這些數據塊,COW認為數據塊內容沒發生改變,所以不會占用快照空間;還有如果數據塊已經重寫過一次數據,COW不會再跟蹤。

分配給快照的空間,要依據寫入的數據量多大和寫入的頻率,不一定要指派原始卷一樣大的空間??煺湛臻g可以擴展或縮減。

利用快照可以記錄一個正在使用中的邏輯卷,然后制作一份拍照時刻的備份,由于這個備份是具有一致性的,因此非常的適合于用來備份實時系統。例如,您的運行中的數據庫可能即使在備份時刻也是不允許暫停服務的,那么就可以考慮使用LVM的快照模式,然后再針對此快照來進行文件系統級別或者塊設備級別的數據備份。

創建快照

為pap1創建一個快照,大小為128M

[root@centos6 pap1]$ lvcreate -s /dev/jat/pap1 -n snap_pap1 -L 128M 
  Logical volume "snap_pap1" created.

查看LV信息,已經有快照相關信息生成

blob.png

blob.png

快照邏輯卷創建時帶有文件系統,可以直接掛載,建議只讀掛載

[root@centos6 pap1]# mount -r /dev/jat/snap_pap1 /mnt/snap
[root@centos6 pap1]# ll !$
ll /mnt/snap
total 22
drwxr-xr-x. 128 root root  8192 Sep  3 21:04 etc        可以看見原邏輯卷的文件
drwx------.   2 root root 12288 Sep  2 22:21 lost+found
[root@centos6 pap1]# rm -rf /mnt/pap1/etc/issue    #刪掉原邏輯卷一個文件做試驗
[root@centos6 pap1]# cat /mnt/s
sdb1/ snap/ 
[root@centos6 pap1]# cat /mnt/snap/etc/issue        #快照區備份了原文件,證明備份有效
System time is \t
CentOS release 6.8 (Final)
Kernel \r on an \m
what is your pincode ?

原創文章,作者:cutemsyu,如若轉載,請注明出處:http://www.www58058.com/42892

(0)
cutemsyucutemsyu
上一篇 2016-09-06 08:51
下一篇 2016-09-06 08:53

相關推薦

  • 正則表達式及其用法

    正則表達式及其用法 1.   什么是正則表達式 正則表達式是Global search REgular expression and Print out the line的縮寫。是一類用字符所書寫的模式,其中許多字符并不表示其字面意義,而是表達控制或通配等功能。 在Linux中,用正則表達式搜索文本的常用命令: grep: 使用基本正則表…

    Linux干貨 2015-09-14
  • 網絡管理1

    一、知識整理 1、路由轉發:拆除第一層MAC地址,根據IP地址廣播,收到信號后重新封裝。一個路由器連接多個廣播域,一個交換機連接多個沖突域。 2、網絡用戶應用程序:WEB瀏覽器;即時消息;電子郵件;協作(視頻會議,vnc);web網絡服務;文件網絡服務;數據庫服務;中間件服務(Tomcat);安全服務(netfilter)。 3、HDR:報頭。Frame C…

    Linux干貨 2016-09-05
  • 第一周的博客作業

    1.計算機的組成以及功能:     cpu:就是中央處理器,運算和判斷計算機的數據;     儲設器:存儲計算機的數據;     主板:鏈接多的計算機的硬件;     I/O設備:輸入,輸出設備,,如…

    Linux干貨 2017-01-05
  • linux的tty

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://jeffyyko.blog.51cto.com/28563/140012 最近做了一個小測試,得到了以下結論 測試linux發行版本:rhel AS4.0 環境:VMware 5.0 目的:修改 vi /etc/initt…

    Linux干貨 2015-03-26
  • 馬哥教育網絡班20期+第5周課程練習

    1、顯示/boot/grub/grub.conf中至少一個空白字符開頭的行 [root@localhost ~]# grep "^[[:space:]]\+.*" /boot/grub2/grub.cfg 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行; [root@…

    Linux干貨 2016-08-15
  • date命令總結

    在linux中man手冊頁,對date -d 參數的的說明比較模糊,一下的舉例,進一步說明: #-d –date=STRING display time described by STRING not 'now' 命令: date -d nex-day +%Y%m%d    //明天日期 d…

    Linux干貨 2016-08-05

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-10 09:23

欧美性久久久久