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

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

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

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

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

這時 LVM(邏輯卷),帶來了福音。它可以動態地縮減邊界的大小;它還有“快照snapshot”的功能,該功能做數據的全備份且是熱備(其實是類熱備),速度很快。      

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

1PV

   PV由塊設備組成,可以是分區、raid.

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

2VG

     作用是把多個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.


1、  創建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步:格式化並掛載

1、  格式化邏輯卷 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

2、  掛載

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)

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

擴展條件:

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

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

wKioL1PGHYHSpCbTAAFHt6asDKA674.jpg

1、  先查看卷組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

2、  假如,我們要把邏輯卷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

3、  卷組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

三、使用邏輯卷的“快照”功能進行在線備份

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

假如,我們創建快照耗時 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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章