lvm(邏輯卷管理)的魅力

近來,隨着課程的深入,開始接觸到lvm邏輯卷。由開始的不懂,到現在的半知半懂,慢慢的感受到了lvm邏輯卷由內而外散發出的魅力。作爲一個小白,爲了能更好地學習和理解lvm邏輯卷的知識,特趁着難得的休息時間,總結一下自己所學的關於lvm邏輯卷的知識,有錯誤的地方,請各位大神指正,共同學習!


本人認爲lvm邏輯卷主要有兩大魅力:

    1、邏輯卷的邊界是可變化的。

    2、lvm支持快照(snapshot)。


各位看官彆着急,且聽小生慢慢說來:


前言

首先,讓我們思考一個問題:爲什麼會出現LVM技術?

本人是這樣認爲的:對於我們常用PC的人來說,我們總是不得不對磁盤執行分區。硬盤分區是一種令人厭煩,但公認是使操作系統設置和運行進程不可或缺的一部分。因爲要做好工作,就要精確地估計每個分區需要的空間,所以硬盤分區很煩人。如果估計失誤了,分得太大,會浪費空間;分得太少了,空間又不夠用。爲了解決這個問題,你甚至可能需要執行整個系統備份、將硬盤清除乾淨,然後將所有數據恢復到新的(可能比原來好一些)分區佈局中。對於服務器來說,也是如此。傳統的這種方法極爲不便,不能動態地擴展或縮減分區的大小,所以就有了後來的lvm的出現。


一、lvm、相關概念以及兩大魅力簡介

 1、lvm簡介   

            LVM: Logical Volumn Manager (邏輯卷管理器),它是Linux環境下對磁盤分區進行管理的一種機制,它由Heinz Mauelshagen在Linux 2.4內核上實現,目前最新版本爲:穩定版1.0.5,開發版 1.1.0-rc2,以及LVM2開發版。它於1998年發佈到Linux社區中,它允許你在Linux系統上用簡單的命令行管理一個完整的邏輯卷管理環境。

            LVM實質上是將一個或多個底層塊設備組織一個邏輯的工具。

        2、lvm重要概念

        重要的概念有:Physical volume (PV):物理卷, Physical extent (PE):盤區,Volume group (VG):卷組,Logical volume(LV) :邏輯卷

        以下是概念的詳細解釋:

            物理存儲介質(The physical media):這裏指系統的存儲設備,如硬盤/分區,是存儲系統最低層的存儲單元。

           物理卷(PV) :  LVM的基本存儲邏輯塊,一般會把硬盤/分區做成物理卷,甚至底層塊設備是raid也能被做成物理卷。PV不同於基本的物理存儲介質(如分區、磁盤等),它包含有與LVM相關的管理參數。(物理卷不能被格式化,它沒有文件系統的概念。)

            物理盤區(PE)  :  就是一塊磁盤空間,物理卷被劃分成多個同等大小的PE。大小固定,一般爲4M8M(一個PE只能屬於一個邏輯卷)。


            卷組(VG):LVM卷組完全類似於擴展分區,不能被直接使用必須進行再次劃分。可以在卷組上創建一個或多個“LVM分區”(邏輯卷),卷組由多個物理卷(PV)組成。


       邏輯卷(LV):LVM的邏輯卷類似於非LVM系統中的硬盤分區,在邏輯卷之上可以建立文件系統,也就是從VG中劃分的邏輯分區。

       

        下面以一個簡單的圖說明一下物理卷、卷組、邏輯卷之間的關係:

        wKiom1PHuYqi_JZrAAGn8kvVrFg219.jpg

    創建邏輯卷的過程說明:

        (1)先把磁盤/分區轉換爲pv(物理卷)。由於物理卷沒有文件系統的概念,不能被格式化,所以轉換爲物理卷後,原磁盤/分區的文件系統不能被保留。

        (2)創建卷組,把多個物理卷添加到卷組中。實質上,創建卷組會默認或可指定PE的大小,物理卷加入卷組後,會被分割成一個個固定大小的PE。

        (3)卷組相當於擴展分區,不能被直接使用,於是要在卷組中創建邏輯卷。實質上,創建指定大小的邏輯卷是在卷組中把可用的多個PE分配給邏輯卷,由於PE的大小是固定的,所以創建出的邏輯卷的大小會有偏差。由此可知,邏輯卷只能看到卷組中的PE,而無法看不到底層中有多少塊物理卷。邏輯卷相當於LVM系統中的硬盤分區,在邏輯卷之上可以建立文件系統。

    3、lvm的兩大魅力簡介

    到這裏,我們可以知道:

        (1)由於lvm可把物理卷分割成PE和劃分邏輯卷的特性,可知lvm邏輯卷的邊界是可以動態擴展和縮減的。實質上,邏輯卷邊界的動態擴展和縮減是分爲兩層的:物理邊界和邏輯邊界各自的擴展和縮減。這裏不細講,以下會有詳細事例進一步說明。

        (2)lvm如果僅有邏輯卷這麼一個功能,就不可能那麼受歡迎了。lvm令人興奮的是,它還支持快照的功能。有了快照後,我們對於數據庫的備份就會變得非常簡單+easy了。這裏也不細說,以下會進一步說明。


    二、lvm邏輯卷創建過程詳解

   lvm邏輯卷創建的整個過程大致如下:

        分區 --> PV --> VG --> LV  --> 將分區格式化(爲分區創建文件系統)--> 掛載邏輯分區

    

    下面,用一個實例來加深各位對lvm的理解。

    1、分區

        使用分區工具fdisk分區,爲了使其能被lvm支持,需要把分區的系統ID改爲8e(注:不把分區的系統ID設爲8e也能將其轉換爲物理卷)。

    wKiom1PLhi-wp_ONAAA9krVNrgQ492.jpg

    wKioL1PLh1_CgqAXAAPyS7O2Q5Y480.jpg

    wKioL1PLiSCDuIHkAALmIa2ANyI168.jpg

    另一個分區的創建就不貼圖了,各位小夥伴可以去嘗試一下,很好玩的!-_-

    wKioL1PLjZ6yyS1-AABCHmtPLtM684.jpg

    2、創建物理卷(PV)   

    [root@localhost ~]# pvcreate /dev/sda3 /dev/sdb1     
      Physical volume "/dev/sda3" successfully created
      Physical volume "/dev/sdb1" successfully created

    物理卷(pv)相關命令介紹:

         pvcreate : 創建pv(物理卷)

                pvs, pvdisplay : 查看pv

                pvremove : 移除pv

                pvmove : 移動pv(把該物理捲上的數據移到卷組的其他物理捲上)

                pvscan : 掃描有哪些pv

        3、創建卷組(VG)   

    [root@localhost ~]# vgcreate -s 8 myvg /dev/sda3 /dev/sdb1   
      Volume group "myvg" successfully created
    [root@localhost ~]# vgs
      VG   #PV #LV #SN Attr   VSize  VFree 
      myvg   2   0   0 wz--n- 10.02g 10.02g
      vg0    1   4   0 wz--n- 59.99g  7.99g
    [root@localhost ~]# vgdisplay
      --- Volume group ---
      VG Name               myvg
      System ID             
      Format                lvm2
      Metadata Areas        2
      Metadata Sequence No  6
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                1
      Open LV               1
      Max PV                0
      Cur PV                2
      Act PV                2
      VG Size               10.02 GiB
      PE Size               8.00 MiB      #指定PE的大小爲8M
      Total PE              1282
      Alloc PE / Size       640 / 5.00 GiB
      Free  PE / Size       642 / 5.02 GiB
      VG UUID               5cHXI4-WSz9-ACFQ-IiQj-iUIW-vcxd-gahSK8

    卷組(VG)相關命令介紹:

          vgcreate : 創建卷組,-s 選項可以指定PE的大小

                  vgs, vgdisplay :查看卷組的信息

                  vgremove : 移除卷組

                  vgextend : 擴展卷組的空間

                  vgreduce : 縮減卷組的空間

                        縮減卷組中的空間,一般都是通過移除某一個物理捲來完成的。

                        需要注意的是:

                            移除卷組中的某一物理卷時,應該先使用pvmove命令把該物理捲上的數據移到卷組上別的分區,然後才用vgreduce命令指定移除該物理卷

                             wKiom1PLpPGifZWjAAI1mrgl4LY986.jpg

                  vgscan:掃描有哪些卷組

        4、創建邏輯卷(LV)

    wKioL1PLkZehf4mNAAGsz82KgeU777.jpg

    wKiom1PLkUWSWZT7AAJoXQ_3ik8794.jpg

    邏輯卷(LV)相關命令介紹:

        lvcreate : 創建邏輯卷(lv)

             -n lv_name (指定邏輯卷的名稱)

            -L #UNIT{mMgGtT}  (指定邏輯卷的大小)

        lvs,lvdisplay :查看邏輯卷的信息

        lvremove : 移除指定的邏輯卷

        lvextend : 擴展邏輯卷

        lvreduce : 縮減邏輯卷

        lvscan :掃描有哪些邏輯卷

    5、格式化邏輯卷

     wKiom1PLmeyBFnJTAAGKCGfIXgw929.jpg

         mke2fs:用來格式化分區(爲分區創建文件系統)

            -t 指定文件系統類型

   6、掛載分區

        wKioL1PLnRqhgSdoAAEQiYAcbnQ125.jpg

        mount :用於掛載分區

        掛載mylv邏輯分區後,就能在該邏輯分區上存儲數據了!


    怎樣?是不是很簡單啊!好了,下面讓我們進一步深入lvm 吧!

    以下所講的是我們高級班的內容,要學請轉入我們的高級班,只要999元!!! 

    -_- ,說笑的~

   三、邏輯卷的擴展與縮減

    lvm存儲空間邊界分爲兩類:

            物理邊界:物理磁盤的存儲大小

            邏輯邊界:邏輯卷的空間大小

        如下圖所示:

       wKiom1PLlP7zswtHAABcOn139vA895.jpg

    內圓範圍是文件系統(邏輯),外圓範圍是存儲空間(物理)。

        文件系統是在存儲空間上抹上一層軟件級別的管理方案。因而文件系統空間大小不能大於存儲空間的大小。

     

    因此我們知道邏輯卷擴展和縮減是有要求的:

            擴展:物理 --> 邏輯(先擴展物理卷,然後才擴展邏輯卷。)

            縮減:邏輯 --> 物理(先縮減邏輯卷,然後才縮減物理卷。)

                縮減不能少於已經存儲的所有數據空間的大小!!!(縮減須謹慎!!!)


    1、擴展邏輯卷

        (1)先確定擴展的目標大小;並確保對應的卷組中有足夠的空閒空間可用;             

             [root@localhost ~]# vgs
             VG   #PV #LV #SN Attr   VSize  VFree
             myvg   2   1   0 wz--n- 10.02g 5.02g
             vg0    1   4   0 wz--n- 59.99g 7.99g

            (2)擴展物理邊界

            增加新的分區:

            wKiom1PLmCLB9K2rAADLO84KnCU387.jpg

            把分區轉換成PV:

            wKiom1PLmIDwZkHjAACHdm-Rz88595.jpg

            把新的物理卷加入卷組:     

            [root@localhost ~]# vgextend myvg /dev/sdb2 # vgextend擴展邏輯卷的大小
              Volume group "myvg" successfully extended
            [root@localhost ~]# vgs
              VG   #PV #LV #SN Attr   VSize  VFree 
              myvg   3   1   0 wz--n- 15.02g 10.02g
              vg0    1   4   0 wz--n- 59.99g  7.99g

            擴展物理邊界:                 

            [root@localhost ~]# lvs
              LV   VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
              mylv myvg -wi-ao----  5.00g                                             
              root vg0  -wi-ao---- 20.00g                                             
              swap vg0  -wi-ao----  2.00g                                             
              usr  vg0  -wi-ao---- 10.00g                                             
              var  vg0  -wi-ao---- 20.00g                                             
            [root@localhost ~]# lvextend -L 10G /dev/myvg/mylv     # 注意:-L 10G 是指定擴展後的邏輯卷大小爲10G,並不是+10G的意思
              Extending logical volume mylv to 10.00 GiB           #       -L指定的擴展後的邏輯卷大小不能比原來邏輯卷的大小還小
              Logical volume mylv successfully resized
            [root@localhost ~]# lvs
              LV   VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
              mylv myvg -wi-ao---- 10.00g                                             
              root vg0  -wi-ao---- 20.00g                                             
              swap vg0  -wi-ao----  2.00g                                             
              usr  vg0  -wi-ao---- 10.00g                                             
              var  vg0  -wi-ao---- 20.00g

            (3)擴展邏輯邊界               

        [root@localhost ~]# blkid /dev/myvg/mylv    # blkid命令可以查看塊設備的UUID號,也可以查看該塊設備的文件系統類型    
         /dev/myvg/mylv: UUID="b9301aad-ca3b-497a-88e2-22e121247914" TYPE="ext4" 
        [root@localhost ~]# resize2fs /dev/myvg/mylv  # resize2fs命令表示重新調整文件系統的大小(根據物理邊界的大小,自動調整)
         resize2fs 1.41.12 (17-May-2010)
         Filesystem at /dev/myvg/mylv is mounted on /mnt; on-line resizing required
         old desc_blocks = 1, new_desc_blocks = 1
         Performing an on-line resize of /dev/myvg/mylv to 2621440 (4k) blocks.
         The filesystem on /dev/myvg/mylv is now 2621440 blocks long. 
        [root@localhost ~]# blkid /dev/myvg/mylv
         /dev/myvg/mylv: UUID="b9301aad-ca3b-497a-88e2-22e121247914" TYPE="ext4" 
        [root@localhost ~]# ls /mnt   # 擴展邏輯卷mylv後,數據沒丟失
         fstab  lost+found

    2、縮減邏輯卷

       注意:a、縮減邏輯卷的操作是很危險的,操作不當,很有可能會使得數據丟失。請慎重!!!

                       b、縮減邏輯卷時,邏輯卷要離線,不能處在掛載當中!

           

        (1)先確定縮減後的目標大小;並確保對應的目標邏輯卷大小中有足夠的空間可容納原有所有數據;                

        [root@localhost ~]# lvs /dev/myvg/mylv        
        LV   VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
        mylv myvg -wi-a----- 10.00g

            (2)先卸載文件系統,並要執行強制檢測

        [root@localhost ~]# mount  # mount命令能查看當前系統中掛載的設備
        /dev/mapper/myvg-mylv on /mnt type ext4 (rw)
        [root@localhost ~]# umount /dev/myvg/mylv    # umount命令可卸載所指定的已掛載的設備
        [root@localhost ~]# e2fsck -f /dev/myvg/mylv  # e2fsck -f ,強制檢測邏輯卷mylv的文件系統
        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/myvg/mylv: 12/655360 files (0.0% non-contiguous), 76784/2621440 blocks

            (3)縮減邏輯邊界           

        [root@localhost ~]# resize2fs /dev/myvg/mylv 5G  # 這表示自動調整邏輯卷mylv的文件系統大小到5G
        resize2fs 1.41.12 (17-May-2010)
        Resizing the filesystem on /dev/myvg/mylv to 1310720 (4k) blocks.
        The filesystem on /dev/myvg/mylv is now 1310720 blocks long.

           (4)縮減物理邊界                

        [root@localhost ~]# lvreduce -L 5G /dev/myvg/mylv    # 這表示縮減邏輯卷mylv的存儲空間到5G
        WARNING: Reducing active logical volume to 5.00 GiB
        THIS MAY DESTROY YOUR DATA (filesystem etc.)
        Do you really want to reduce mylv? [y/n]: y    # 注意:這裏會提示你當前的操作有可能會使得數據丟失,問你是否要繼續?(想清楚額,後果自付!!!)
        Reducing logical volume mylv to 5.00 GiB
        Logical volume mylv successfully resized

        (5)重新把邏輯卷掛載上去,查看數據是否丟失      

         wKioL1PLv2fR76GDAAShhrENGI4117.jpg

    

        呼!!!看到這裏,各位看官是不是都有點視覺疲勞了?

        革命尚未成功,同志仍須繼續!

        不過,寫到這裏篇幅已經不夠了,本人決定另起一篇博客(是這篇博客的續寫)繼續寫下去。

        欲知後事如何,且聽下回分解!

            

        


            

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