Linux之LVM創建、擴容、縮減-2015082701

LVM是什麼?

    LVM是 Logical Volume Manager(邏輯卷管理)的簡寫。它基於linux內核中的dm模塊,將一個或多個硬盤的分區在邏輯上進行組合在磁盤分區和文件系統之間添加的一個邏輯層,來爲文件系統屏蔽下層磁盤分區佈局,提供一個抽象的存儲卷,在存儲捲上建立文件系統並且在容量不夠或容量太大時可隨意進行擴容和縮減。相對於普通硬盤來講,其具有很大的靈活性。CentOS6及以前的版本上,LVM應用比較廣泛;CentOS7上新增了btrfs格式文件系統,btrfs也比較靈活,可隨意擴容獲縮減容量,所以,CentOS7上已經逐漸丟棄了LVM。



LVM的相關術語:

物理卷(Physical Volume,PV)

指磁盤分區或從邏輯上與磁盤分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有與LVM相關的管理參數。


卷組(Volume Group,VG)

類似於非LVM系統中的物理磁盤,其由一個或多個物理卷PV組成。可以在卷組上創建一個或多個LV(邏輯卷)。



邏輯卷(Logical Volume,LV)

類似於非LVM系統中的磁盤分區,邏輯卷建立在卷組VG之上。在邏輯卷LV之上可以建立文件系統(比如/home或者/usr等)。


物理塊(Physical Extent,PE)

    每一個物理卷PV被劃分爲稱爲PE(Physical Extents)的基本單元,具有唯一編號的PE是可以被LVM尋址的最小單元。PE的大小是可配置的,默認爲4MB。所以物理卷(PV)由大小等同的基本單元PE組成。

    PE的大小在PV加入到VG以後決定的。因此,建立在相同PV上的不同VG中的PE有可能大小不等。


邏輯塊(Logical Extent,LE)

邏輯卷LV也被劃分爲可被尋址的基本單位,稱爲LE。在同一個卷組中,LE的大小和PE是相同的,並且一一對應。 wKiom1Xef3KhN7I9AAF4aMMsjew972.jpg

綜行所述:要創建lv需要進行如下步驟:

1、硬盤分區

2、創建PV

3、創建VG

4、創建LV


例如:創建一個至少可容納20G數據的LV,可經過如下步驟:

實驗所需硬盤容量爲:20G以上,由於之前創建虛擬機時沒有進行合理的分區劃分,所以我在虛擬機上新增了一塊120G的硬盤

[root@localhost ~]# fdisk -l       ##查看當前系統所識別出的硬盤

wKiom1Xef4KgDvc-AAIR80g0v_g889.jpg

1、磁盤分區:

[root@localhost ~]# fdisk /dev/sdb          ##對硬盤sdb進行管理
Command (m for help): n        #創建一個新分區
Command action
   e   extended
   p   primary partition (1-4)
p                ##創建一個標準分區
Partition number (1-4): 1                ##分區編號
First cylinder (1-15665, default 1):         ##起始柱面;默認即可(回車)
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-15665, default 15665): +10G            ##結束柱面,或直接用"+"指定分區容量即可
Command (m for help): t                        ##調整分區類型
Partition number (1-4): 1                        ##指定分區編號
Hex code (type L to list codes): 8e            ##調整分區類型爲 Linux LVM)
Command (m for help): w            ##保存退出
[root@localhost ~]# partx -a /dev/sdb        ##通知內核讀取新創建的分區

這裏我只演示了1個10G的分區,本次實驗需要至少20G分區容量,請按照如上步驟創建。

****接下來先演示創建過程,具體命令總結見文檔尾部:


創建PV

[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2    ##創建PV
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created

[root@localhost ~]# pvdisplay                     ##顯示當前系統已有的PV
  "/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               xBH83J-IOi1-Bgr7-rs1f-1XWW-iYbW-9QIsWQ
   
  "/dev/sdb2" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               tD2HgH-i0N8-vDDd-15v4-sNk6-eWZ5-G6zoNH


創建VG:

[root@localhost ~]# vgcreate -s 8M testvg /dev/sdb1 /dev/sdb2   ##意爲將sdb1和sdb2創建爲PE爲8M,名爲testvg的VG
  Volume group "testvg" successfully created
[root@localhost ~]# vgdisplay 
  --- Volume group ---
  VG Name               testvg
  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               20.00 GiB    ##2個10G分區組合成了1個20G的VG
  PE Size               8.00 MiB       ##創建時-s指定了PEsize爲8M
  Total PE              2560
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2560 / 20.00 GiB
  VG UUID               UeoGuC-79gO-lxLa-bpcO-EXTO-uJPI-cc9vt4

   


創建LV :****因爲LV是在VG上劃分的,所以LV的容量必須小於等於VG的容量

[root@localhost ~]# lvcreate -L 20G -n testlv testvg    ##意爲在testvg的VG中創建名爲testlv,容量爲20G的LV
  Logical volume "testlv" created
[root@localhost ~]# lvdisplay            ##顯示已創建的LV屬性
  --- Logical volume ---
  LV Path                /dev/testvg/testlv
  LV Name                testlv
  VG Name                testvg
  LV UUID                uxVd7w-X7tI-1zpP-hORA-3igb-hCM0-Lm2y8M
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2015-08-27 07:24:39 +0800
  LV Status              available
  # open                 0
  LV Size                20.00 GiB
  Current LE             2560        ##由於LE與PE大小相等且一一對應,所以20480M(20G)/8M=2560
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

  

爲LV創建文件系統,並掛載使用:

[root@localhost ~]# mke2fs -t ext4  -b 2048 -m 3 /dev/testvg/testlv   ##意爲創建ext4格式文件系統,blocksize=2048Bytes,預留管理空間爲%3
[root@localhost ~]# mkdir /testdir            ###在根下創建testdir目錄
[root@localhost ~]# mount /dev/testvg/testlv /testdir/    ##將LV掛載至testdir使用
[root@localhost ~]# ls /testdir/
lost+found

至此,20G的LV已創建完成,並已掛載使用,若此時我們發現20G容量已達不到我們的業務需求,我們可以隨意對其進行擴容,步驟如下:

首先添加PV:————————————————————

我在創建分區的時候已劃分好了3個10GB的分區(/dev/sdb1  /dev/sdb2  /dev/sdb3 ),若您不知道如何操作,請見文檔前半部分磁盤分區:

1、首先新增PV

[root@localhost ~]# pvcreate /dev/sdb3


2、擴展VG:

[root@localhost ~]# vgextend testvg /dev/sdb3    ##意爲將sdb3添加至testvg中
  Physical volume "/dev/sdb3" successfully created
  Volume group "testvg" successfully extended
[root@localhost ~]# vgdisplay 
  --- Volume group ---
  VG Name               testvg
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               30.00 GiB            ##已擴展至30G
  PE Size               8.00 MiB
  Total PE              3840
  Alloc PE / Size       2560 / 20.00 GiB
  Free  PE / Size       1280 / 10.00 GiB
  VG UUID               UeoGuC-79gO-lxLa-bpcO-EXTO-uJPI-cc9vt4


3、擴展LV

[root@localhost ~]# lvextend -L +10G -v /dev/testvg/testlv   ##意爲爲testlv添加10G;或-L 30G,意爲擴展到30G
    DEGRADED MODE. Incomplete RAID LVs will be processed.
    Finding volume group testvg
    Archiving volume group "testvg" metadata (seqno 3).
    Extending logical volume testvg/testlv to 30.00 GiB
  Size of logical volume testvg/testlv changed from 20.00 GiB (2560 extents) to 30.00 GiB (3840 extents).
    Loading testvg-testlv table (253:0)
    Suspending testvg-testlv (253:0) with device flush
    Resuming testvg-testlv (253:0)
    Creating volume group backup "/etc/lvm/backup/testvg" (seqno 4).
  Logical volume testlv successfully resized
[root@localhost ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/testvg/testlv
  LV Name                testlv
  VG Name                testvg
  LV UUID                uxVd7w-X7tI-1zpP-hORA-3igb-hCM0-Lm2y8M
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2015-08-27 07:24:39 +0800
  LV Status              available
  # open                 1
  LV Size                30.00 GiB            ##已擴展至30G
  Current LE             3840
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto
    - currently set to     256
  Block device           253:0



4、擴展文件系統:

wKioL1XegaygLADpAAEaLlfFWEo231.jpg

由圖可見,現在testlv的文件系統容量爲20G

執行如下操作:

[root@localhost ~]# resize2fs /dev/testvg/testlv

wKioL1Xegbawxfe9AAETyFoxg7M483.jpg 

擴展成功。  

由上述可知:對於已在生產環境中使用的LV,無需卸載格式化便可直接對其擴容。

——————————————————————————————————————————————————

LV的容量縮減:****特別注意!!LV縮減到的容量必須能容納的下現在的已有數據!!!!!

1、卸載文件系統

[root@localhost ~]# umount /testdir/

2、強制修復文件系統:

[root@localhost ~]# fsck -f -t ext4 /dev/testvg/testlv 
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
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
/dev/mapper/testvg-testlv: 99/1966080 files (1.0% non-contiguous), 288393/15728640 blocks

3、縮減文件系統

[root@localhost ~]# resize2fs /dev/testvg/testlv 20G   ##意爲將文件系統大小縮減爲20G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/testvg/testlv to 10485760 (2k) blocks.
The filesystem on /dev/testvg/testlv is now 10485760 blocks long.

4、縮減LV

[root@localhost ~]# lvreduce -L -10G -v /dev/testvg/testlv   ##意爲將LV減掉10G 或 -L 20G意爲縮減到20G
    DEGRADED MODE. Incomplete RAID LVs will be processed.
    Finding volume group testvg
  WARNING: Reducing active logical volume to 20.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce testlv? [y/n]: y
    Archiving volume group "testvg" metadata (seqno 10).
    Reducing logical volume testvg/testlv to 20.00 GiB
  Size of logical volume testvg/testlv changed from 30.00 GiB (3840 extents) to 20.00 GiB (2560 extents).
    Loading testvg-testlv table (253:0)
    Suspending testvg-testlv (253:0) with device flush
    Resuming testvg-testlv (253:0)
    Creating volume group backup "/etc/lvm/backup/testvg" (seqno 11).
  Logical volume testlv successfully resized

5、掛載文件系統進行使用

[root@localhost ~]# mount /dev/testvg/testlv  /testdir/

實驗結束。至此我們已經完成了LV的創建、擴容、及縮減實驗。




LVM管理的命令及常用選項總結:

        PV相關:

                    pvmove***

                            若生產環境中對VG容量進行縮減時,硬盤上有數據,則需先使用該命令將原有數據進行轉移!

                            pvmove [源PV] [目標PV] 若目標PV省略,則默認將源PV上的數據移動至VG中。

                                    -n LVname   指明只移動屬於指定LV的數據(PE塊)

                    pvcreate 創建PV

                    pvremove    刪除pv

                    pvs    顯示當前系統已有的PV簡要信息

                    pvdisplay    顯示當前系統已有的PV詳細信息

                    pvresize    更改PV的大小

                        -s size    指明要更改的PV容量大小

       

         VG相關

                    vgcreate   VGname PV     創建VG

                        -s    指明PE大小

                        

                    vgremove    刪除VG

                    vgrename    重命名VG

                    vgreduce    縮減VG ,若存在數據,則需要先pvmove

                    

        LV相關:

           lvcreate創建LV

        -L| --size  邏輯卷大小

        -n|--name邏輯卷名字 卷組 

        -l    指明要擴展或要擴展到的LE的數目

                lvreduce    縮減LV

                        -L    [+]n    指明要擴展或擴展到的LV容量

                

                lvextend   擴展LV

                        -L    [-]n    指明要縮減或縮減到的LV容量


        創建LVM快照 (關於LVM的快照特性,還請各位自行查閱相關文檔)

lvcreate -L 大小 -p r -s -n 快照卷名字 原卷名字

-p  權限 。 一般是隻讀  r





                    待續。若文檔有欠缺之處,勞煩您在線指出,甚是感激!                              


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