LVM(Logical Volumn Manage)邏輯卷的常見使用方法

Linux 平臺中,第三方的軟件安裝位置通常是:/usr/local/    /srv ,隨着咱們的應用漸漸增多。萬一這些目錄所在的分區使用完了。可是,這時候咱們又須要安裝新的應用軟件,怎麼辦呢?node

Linux 系統中 /usr/share目錄是存放幫助手冊的,一般該目錄所佔用的磁盤空間比較大,使用rpm包安裝的應用,幫助手冊通常會安裝到 /usr/share 目錄中。分區操做那時沒有作到充分全面地考慮,隨着咱們的應用的增多,該目錄全部的分區日漸用盡的狀況是有可能的。咱們想到最簡單的方法就是擴大該目錄所在的分區。可是磁盤的分區是不能擴展的。在對磁盤進行分區那一刻分區大小就固定下來了。之後不再能改變的了。數據庫

數據是企業的命脈,數據安全由爲重要。RAID保證不會由於磁盤故障而致使業務中斷;備份保證了,因誤操做或******致使數據的損壞丟失。可以從備份中把數據恢復還原回來。安全

咱們的應用服務不少使用到數據庫服務器(MySQL),爲了避免影響業務的正常運行,咱們都要在線備份數據的,也就是熱備份。商業的熱備工具都很貴。有沒有一種廉價的解決方案呢?bash

這時 LVM(邏輯卷),帶來了福音。它能夠動態地縮減邊界的大小;它還有「快照snapshot」的功能,該功能作數據的全備份且是熱備(實際上是類熱備),速度很快。      服務器

LVM (LogicalVolumn Manage)邏輯卷。有兩個版本:LVMLVM2它有三部分組成:app

1PVide

   PV由塊設備組成,能夠是分區、raid.工具

   對空間大小無要求,只要求是塊設備。大數據

2VGui

     做用是把多個PV組合成一體。

     PV加入VG的時候,PV被劃分紅一個個邏輯單元(PE)PageExtend。由於PE的大小是在在建立VG的時候指定的。因此剛建立PV的時候,查看PV的信息的時候顯示PE總數爲0PE大小也爲零。PE的大小默認是4MBPE也就是咱們存儲數據的最小單元,相似於磁盤的block塊,因此設置PE大小的時候,也要根據實際應用:是存儲大數據文件呢仍是存儲小文件數據呢。咱們能夠這樣理解:VG就一塊磁盤。

3LV

   VG能夠理解成整個磁盤,那麼建立LV的過程,能夠理解爲建立分區的過程。建立分區之後要在分區上建立文件系統,並把它掛載纔可使用的。LV也同樣要建立文件系統,且使用的命令都同樣,還要掛載纔可使用。只是在/dev目錄下的設備文件不同。

LVM的邏輯組成結構以下圖:

wKiom1PGAReTSn9EAAE1619qpJc747.jpg

建立邏輯卷的過程是從下到上一層層建立的:PV ---> VG ----à LV


1、建立邏輯卷並掛載使用

一、  先建立PV

操做pv使用到的命令

PV:
pvcreate             建立
pvdisplay             顯示
pvmove              移動數據。在刪除PV的時候,把存放在該PV的數據移動到其它的PV上。
pvremove            移(刪)除卷
pvscan              掃描當前系統全部的PV並顯示。

準備了三個分區用來建立PV

[root@Node1 07.11_job]# fdisk -l /dev/sdb
  Device Boot      Start         End      Blocks  Id  System
/dev/sdb1               1          66      530113+ 8e  Linux LVM
/dev/sdb2              67         198    1060290   8e  Linux LVM
/dev/sdb3             199         460    2104515   8e  Linux LVM

把分區 /dev/sdb1/dev/sdb3建立成pv 

[root@Node1 ~]# pvcreate  /dev/sdb1  /dev/sdb3
 Physical volume "/dev/sdb1" successfully created
 Physical volume "/dev/sdb3" successfully created
[root@Node1 07.11_job]# pvdisplay  /dev/sdb3
 "/dev/sdb3" is a new physical volume of "2.01 GiB"
  ---NEW Physical volume ---
  PVName               /dev/sdb3
  VGName
  PVSize               2.01 GiB
 Allocatable           NO
  PESize               0
 Total PE              0
 Free PE               0
 Allocated PE          0
  PVUUID              cIL2HD-TqAV-6ICp-iCkX-BJrW-JYZd-AoKhJV

說明:

    在PV沒有加入VG以前,PE的各項參數都顯示爲0的。PE的大小,在建立VG的時候設置的。默認是:4M.其實PE就是數據的存儲最小單元。相似於block.


一、  建立VG

命令格式:

Vgcreate  [option]   卷組名稱   指定加入到卷組的pv

建立卷組的時候只把 /dev/sdb3 加入該卷組

[root@Node1 07.11_job]# vgcreate  –s  8M  myvg /dev/sdb3
 Volume group "myvg" successfully created
[root@Node1 07.11_job]# vgdisplay myvg
  ---Volume group ---
  VGName               myvg
 System ID
 Format                lvm2
 Metadata Areas        1
 Metadata Sequence No  1
  VGAccess             read/write
  VGStatus             resizable
  MAXLV                0
  CurLV                0
 Open LV               0
  MaxPV                0
  CurPV                1
  ActPV                1
  VGSize               2.00 GiB
  PESize               8.00 MiB
 Total PE              256
 Alloc PE / Size       0 / 0
 Free  PE / Size       256 / 2.00 GiB
  VGUUID               fG0uMm-ipew-DrQu-oXGI-ssGq-tYZq-0YxNbH
 
[root@Node1 07.11_job]# pvdisplay  /dev/sdb3
  ---Physical volume ---
  PVName               /dev/sdb3
  VGName               myvg
  PVSize               2.01 GiB / not usable7.19 MiB
 Allocatable           yes
  PESize               8.00 MiB
 Total PE              256
 Free PE               256
 Allocated PE          0
  PVUUID              cIL2HD-TqAV-6ICp-iCkX-BJrW-JYZd-AoKhJV

操做VG使用到的命令:

vgcreate            vg的建立
vgdisplay            顯示VG相關的信息
vgextend            vg的擴展。
vgreduce            vg的縮減
vgscan              掃描當前系統上有什麼卷組

3步:建立邏輯卷LV

格式:
Lvcreate  -L  邏輯卷的大小  -n  邏輯卷名稱   在哪一個卷中建立邏輯卷

建立大小爲2G的邏輯卷 mylv

[root@Node1 ~]# lvcreate  -L 2G -n mylv myvg
Logical volume "mylv" created

看看建立的邏輯卷的大小是否是2GB

[root@Node1 ~]# lvscan | grep"mylv\>"
 ACTIVE            '/dev/myvg/mylv' [2.00 GiB] inherit

操做LV 使用的命令:

lvcreate           建立邏輯卷
lvdisplay          顯出邏輯卷的信息,若是想顯示指定的邏輯卷的信息,要指定邏輯卷的設備名稱                    # lvdisplay /dev/myvg/mylv
lvextend           擴展邏輯卷
lvreduce           縮減邏輯卷
lvscan             列出當前系統上全部的邏輯卷

4步:格式化並掛載

一、  格式化邏輯卷 mylv

[root@Node1~]# mke2fs -t ext4 /dev/myvg/mylv
mke2fs1.41.12 (17-May-2010)
Filesystemlabel=
OS type:Linux
Blocksize=4096 (log=2)
Fragmentsize=4096 (log=2)
Stride=0blocks, Stripe width=0 blocks
131072inodes, 524288 blocks
26214blocks (5.00%) reserved for the super user
Firstdata block=0
Maximumfilesystem blocks=536870912
16 blockgroups
32768blocks per group, 32768 fragments per group
8192inodes per group
Superblockbackups stored on blocks:
        32768, 98304, 163840, 229376, 294912
 
Writinginode tables: done
Creatingjournal (16384 blocks): done
Writingsuperblocks and filesystem accounting information: done
 
Thisfilesystem will be automatically checked every 39 mounts or
180 days,whichever comes first.  Use tune2fs -c or-i to override.
[root@Node1~]# echo $?
0

二、  掛載

Linux 的哲學思想之一是:一切皆文件。掛載設備要指定被掛載的設備,而設備在Linux系統中表現爲文件(它是咱們訪問設備的入口)。設備文件存放在 /dev 目錄上。先要找到設備文件而後纔可使用【mount】命令掛載之。

邏輯卷的設備名稱通常是: 

[root@Node1 ~]# ll /dev/dm-
dm-0  dm-1  dm-2 dm-6  dm-7

而表示邏輯卷的設備文件有兩個,因此掛載的時候使用那個設備名稱均可以的

[root@Node1 ~]# ll /dev/myvg/mylv
lrwxrwxrwx. 1 root root 7 Jul 16 13:04 /dev/myvg/mylv ->../dm-2
[root@Node1 ~]# ll /dev/mapper/myvg-mylv
lrwxrwxrwx. 1 root root 7 Jul 16 13:04 /dev/mapper/myvg-mylv-> ../dm-2

掛載邏輯卷 mylv

[root@Node1 ~]# mount -t ext4 /dev/myvg/mylv /mydata/
[root@Node1 ~]# mount | grep "mylv\>"
/dev/mapper/myvg-mylv on /mydata type ext4 (rw)

[root@Node1 ~]# mount -t ext4 /dev/mapper/myvg-mylv  /mydata/
[root@Node1 ~]# mount | grep "mylv\>"
/dev/mapper/myvg-mylv on /mydata type ext4 (rw)

2、假如,邏輯卷 mylv 沒有多少剩餘空間了,怎麼擴展它的大小呢?

擴展條件:

        卷組myvg必需有足夠大的剩餘空間提供給擴展使用
        不然的話就要擴展卷組的大小了。
        作邏輯卷擴展時,要先擴展物理邊界,再擴展邏輯邊界。

擴展邏輯卷的步驟以下圖如示:

wKioL1PGHYHSpCbTAAFHt6asDKA674.jpg

一、  先查看卷組myvg的使用狀況?

root@Node1 ~]# vgdisplay myvg | grep "VG[[:space:]]Size"
VG Size               2.00 GiB
[root@Node1 ~]# lvdisplay /dev/myvg/mylv | grep"LV[[:space:]]Size"
  LV Size                2.00 GiB

二、  假如,咱們要把邏輯卷mylv擴展爲 4GB 大小。

從上面能夠看得出卷組myvg已經使用完了,咱們必需先擴展卷組myvg再擴展邏輯卷 mylv.

先往該卷組中加入PV

[root@Node1 ~]# pvcreate /dev/sdb4
Physical volume "/dev/sdb4" successfully created

把剛建立的pv加入到卷組myvg中來:

未加入前,myvg的大小

[root@Node1 ~]# vgdisplay myvg | grep "VG[[:space:]]Size"
  VG Size               2.00 GiB

/dev/sdb4加入卷組myvg

[root@Node1 ~]# vgextend myvg /dev/sdb4
  Volume group"myvg" successfully extended

加入用戶的PV後,卷組的大小

[root@Node1 ~]# vgdisplay myvg | grep "VG[[:space:]]Size"
VGSize               18.47 GiB

三、  卷組myvg已經有足夠的剩餘空間了。接下來進行邏輯卷的擴展

(1)、首先擴展邏輯卷 mylv的物理邊界

[root@Node1 ~]# lvextend -L 4G/dev/myvg/mylv
 Extending logical volume mylv to 4.00 GiB
 Logical volume mylv successfully resized
[root@Node1 ~]# lvdisplay/dev/myvg/mylv  | grep"LV[[:space:]]Size"
 LVSize                4.00 GiB

可是查看實際可用的磁盤空間仍是2GB.

[root@Node1 ~]# df -h | grep -A 1"mylv\>"
/dev/mapper/myvg-mylv
                      2.0G   67M 1.9G   4% /mydata

(2)、物理邊界擴展成功之後才能夠擴展邏輯卷mylv的邏輯邊界

[root@Node1 ~]# resize2fs -p /dev/myvg/mylv
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv is mounted on/mydata; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of/dev/myvg/mylv to 1048576 (4k) blocks.
The filesystem on /dev/myvg/mylv is now1048576 blocks long.
 
[root@Node1 ~]# echo $?
0

擴展邏輯邊界之後,看看是否擴展成功

[root@Node1 ~]# df -h | grep -A 1"mylv\>"
/dev/mapper/myvg-mylv
                      4.0G  771M 3.0G  21% /mydata

3、使用邏輯卷的「快照」功能進行在線備份

     其實,建立快照的過程就是備份數據的過程。

假如,咱們建立快照耗時 10S, 而咱們的應用每秒鐘會增長100M的數據量。

     那麼,咱們的快照卷大小至少須要:原卷的數據大小 +  10*100M

建立快照卷的條件:

         快照卷必須要和原卷在同一個卷組當中。
          卷組有足夠的剩餘空間使用
          快照卷是隻讀的,爲了保證數據的一致性,在建立快照卷時指定是隻讀的
          掛載快照卷以只讀方式掛載

建立快照卷的方法:

lvcreate   -L  快照卷的大小  -s  -p  r  -n  快照卷名稱  對哪一個邏輯捲進行快照
           -p       指定權限。讀寫
           -n       快照卷的名字
           -s        表示建立的是快照卷
[root@Node1 ~]# mount -o remount,ro /dev/myvg/mylv  /mydata/  \
                lvcreate -L 4G -n back-snap -p r -s/dev/myvg/mylv   \
                mount -oremount,rw  /dev/myvg/mylv /mydata
  Logical volume"back-snap" created

說明:

     建立快照卷要先對原卷施加讀鎖,而後再建立快照卷。等到快照卷建立完成之後再對原卷施加讀寫鎖。建立快照卷的時間很短,對在線業務幾乎沒有影響。咱們稱這種備份數據的方法爲:溫備。


  掛載並查看,快照卷的數據大小和原卷是否是同樣?

[root@Node1 ~]# mount -r/dev/mapper/myvg-back--snap /backup/
[root@Node1 ~]# df -h | grep -A 1"myvg"
/dev/mapper/myvg-mylv
                      4.0G  1.8G 2.1G  47% /mydata
/dev/mapper/myvg-back--snap
                      4.0G  1.8G 2.1G  47% /backup
相關文章
相關標籤/搜索