lvm基本應用,擴展及縮減實現

1. 爲什麼要使用LVM?


    每個Linux使用者都經常會遇到這樣的困境:在進行系統分區時,該如何對分區的大小進行精確地評估和分配?Linux使用者不僅要考慮到當前系統分區所需要的容量,還要充分考慮到未來需要的容量的最大值。如果評估不準確,當未來系統分區不夠用時,常常需要對Linux系統分區上的數據進行備份,再刪除分區、重新分區、格式化、掛載和拷貝數據,最後再重新上線。


    之所以需要這麼麻煩,根本原因是傳統的文件系統是基於分區的,一個文件系統對應一個分區,各個分區之間是互相獨立的。


    爲了解決這一問題,雖然可以使用支持跨文件系統的軟鏈接,或者使用可調整分區大小的工具例如PartitionMagic等等,但卻無法從根本上解決問題,因爲一方面再次調整的分區仍然有可能會再次不夠用,另一方面是調整分區大小需要重新引導系統,對於很多關鍵服務器是不能接受停機的,因此問題仍然存在。這時我們或許會覺得如果能在線對系統分區的大小進行調整而又對該分區上的數據無影響的話那該多好?不過,Linux的邏輯卷管理器 (LVM, Logical Volume Manager) 提供了這一解決方案。


2. LVM 工作原理


    LVM是邏輯卷管理(Logical Volume Manager)的簡稱,它是一種更爲靈活的磁盤分區管理機制。LVM是在磁盤分區和文件系統之間添加的一層邏輯層,它爲文件系統屏蔽下層的磁盤分區佈局,向文件系統提供一個抽象的存儲卷。通過LVM,Linux系統管理員可輕鬆地管理磁盤分區,如:既然LVM是建立在硬盤和分區之上的一層邏輯層,那麼可以將多個硬盤、多個分區或RAID組織起來構建成存儲卷組,作爲一個存儲池;然後在這個存儲卷之上再將其劃分出一個或多個邏輯卷,Linux系統管理員可以對這個劃分出來的邏輯捲進行一系列操作(例如格式化、掛載等),可以將邏輯卷當做一個系統分區來對待,更重要的是,這個系統分區的大小還可以在線擴展或縮減。總的來說,LVM使得系統分區獨立於底層硬件。

 

wKioL1ioFHeBrdypAACNoQHXhBY068.png


    那麼LVM是如何做到支持系統分區在線擴容或縮容的?我們再梳理一下LVM的工作原理。要製作邏輯分區,首先需要將多個硬盤、多個分區或RAID製作成爲便於識別的物理卷(PV, Physical Volume),將這些製作好的物理卷再構建成一個存儲池,我們把這個存儲池稱爲卷組(VG, VolumeGroup),這是LVM的第一個邏輯層。在卷組這一層上再邏輯出一層邏輯卷(LV, LogicalVolume),這個邏輯卷LV可供用戶使用,例如格式化、掛載、存儲數據,相當於一個邏輯意義上的系統分區。而這個邏輯分區的空間大小取決於卷組VG的分配,因此邏輯卷LV的存儲空間不能超過其所屬卷組VG的總存儲空間。


spacer.gif

wKiom1ioFHeRhV2cAABiChy8ZbU596.png

    pv --> vg --> lv


    類比塊設備將信息存儲在固定大小的塊(block)中,當一個物理卷PV加入一個卷組VG時會被劃分成多個物理擴展塊(PE, Physical Extent)。VG將PE劃分給LV,在LV中的PE稱爲邏輯擴展塊(LE, Logical Extent)。在同一個卷組中PE和LE大小是相同的,並且一一對應。PE和LE都是LVM識別、尋址的基本單位,其對應的唯一編號分別稱爲PEID和LEID。


    當這個邏輯分區不夠用時,可以從卷組中取出一部分空閒的PE加入這個邏輯卷;當邏輯分區的空閒空間過多時,還可以將將邏輯卷中多餘的LE取出供其所屬卷組中的其他邏輯卷使用,從而實現對系統分區的靈活管理。



3. LVM 元數據


    你可能會好奇有關邏輯卷和卷組的元數據都存放在哪裏?類似於非LVM的系統中,有關分區的信息是存放在分區表中,而分區表是存放於每一個物理卷的起始位置處。在LVM系統中,VGDA(卷組描述符區域)就好像LVM的分區表,其存放於每一個物理卷的起始位置處。


VGDA由以下信息組成:
◆ 一個PV描述符
◆ 一個VG描述符
◆ LV描述符
◆ 一些PE描述符


    當系統啓動LV時,VG會被激活,並且VGDA會被加載至內存中,VGDA幫助識別LV的實際存儲位置。當系統訪問存儲設備時,由VGDA建立起來的映射機制就用於訪問實際的物理位置來執行I/O操作。


4. LVM 基本術語


以下總結一下有關LVM的幾個基本術語。


* 物理存儲介質(PhysicalStorageMedia):

指系統上最底層的物理存儲設備:磁盤,例如:/dev/sda、/dev/sdb等。


* 物理卷(Physical Volume, PV):

指磁盤、磁盤分區或RAID設備,使用LVM前需要先將之製作成便於識別的物理卷PV(添加元數據)。


* 卷組(Volume Group, VG):

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


* 邏輯卷(Logical Volume, LV):

建立在卷組VG之上,相當於邏輯分區,可在邏輯卷LV上進行一系列操作(例如:格式化、掛載等)。
邏輯卷LV類似於非LVM系統的磁盤分區。


* 物理擴展塊(Physical Extent, PE):

當物理卷PV加入某一卷組VG後即被劃分爲基本單元PE,PE是LVM尋址的最小單元。PE的大小是可配置的
,默認爲4M。


* 邏輯擴展塊(Logical Extent, LE):

卷組VG將PE劃分給邏輯卷LV,在邏輯卷LV中的PE稱爲LE。在同一卷組VG中,PE和LE大小相同,且一一
對應。LE也是LVM的最小尋址單位。


5. 快照卷


    前面提到了lvm支持lv邊界動態擴展或收縮的功能,除此之外,lvm還有另一個重要的功能--爲邏輯卷製作快照卷。快照卷主要作用是讓用戶能夠訪問與過去某一時刻的文件系統一致的數據,快照本身不是備份,只是備份的輔助手段。製作好快照後,我們就可以利用快照來進行備份。


    “快照”的重點在於“快”。與備份不同,備份常常需要花很多時間來複制數據流然後進行存儲,尤其是對於單個或多個大文件而言,這有可能會發生數據在複製後一半時,前一半的原數據已經發生變化了,出現文件不一致的情況。所以,備份的問題在於備份速度慢、時間長。“快照”就可以幫助備份解決時間長的問題。一旦對某個文件系統(邏輯卷)創建了快照卷,相當於多了一個可監控該文件系統元數據變化的監視器,只要被監視的文件系統上的某一文件的數據發生變化,就會先拷貝一份原始文件存於快照卷中,再對文件進行修改。因此可以得出這樣的結論:原卷(被監視的文件系統)上發生變化的數據的量不能超過快照卷的存儲空間。我們可以通過快照卷訪問某個文件系統在創建快照前的數據,它只是爲該文件系統提供另一個訪問路徑而已。製作好快照後,我們就可以利用快照來進行備份,而這樣的備份不會出現不一致的情況。


    另外,快照卷與原卷要在同一卷組中,而快照卷不一定要與原卷一樣大,這取決於快照卷要存活多長時間。在快照卷的存活時間內只要在原捲上發生變化的數據的量不超過快照卷的可用空間即可。而一旦在存活時間內原捲上發生變化的數據的量超過快照卷的可用空間,那麼該快照卷會失效。還有,在創建快照卷的那一刻不允許原卷文件系統上的數據發生變化的,必須先確保原卷爲只讀模式或無訪問模式。


    當然,快照卷贏在速度上,但仍然存在缺陷。一方面之前要求原捲上發生變化的數據的量不能超過快照卷的可用空間,另一方面快照卷存放的只是原捲上發生變化的數據,當某一刻整個文件系統被損壞時,即便快照卷的可用空間充足,也同樣來不及備份整個原卷,在快照捲上只有文件系統被損壞之前發生過變化的數據。因此仍然需要增量備份和差異備份。



6. 在CentOS 6上配置安裝LVM


示例:
(1)創建一個至少有兩個PV組成的大小爲20G的名爲testvg的VG;要求PE大小爲16MB,而後在卷組
中創建大小爲5G的邏輯卷testlv;掛載至/users目錄;
(2)新建用戶archlinux,要求其家目錄爲/users/archlinux,而後su切換至archlinux用戶,複製
/etc/pam.d目錄至自己的家目錄;
(3)擴展testlv至7G,要求archlinux用戶的文件不能丟失;
(4)收縮testlv至3G,要求archlinux用戶的文件不能丟失;
(5)對testlv創建快照,並嘗試基於快照備份數據,驗證快照的功能;
(6)對testlv創建快照,並嘗試基於快照備份數據,驗證快照的功能;
(7)從卷組中添加一個物理卷,要求不影響在邏輯捲上創建的文件系統的數據。
(8)從卷組中刪除一個物理卷,要求不影響在邏輯捲上創建的文件系統的數據。


6.1. 分區


對指定磁盤進行分區:

[root@osyunwei ~]# fdisk /dev/sdc


創建新分區/dev/sdc5、/dev/sdc6之後,大小均爲10G,將分區的類型修改爲8e,完成後在fdisk進程中顯示分區表,如下所示:

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1        2610    20964793+   5  Extended
/dev/sdc5               1        1306    10490382   8e  Linux LVM
/dev/sdc6            1307        2610    10490382   8e  Linux LVM
保存後退出:
Command (m for help): w[root@osyunwei ~]# partx -a /dev/sdc    #強制內核重新讀取分區表;


6.2. 製作物理卷


將磁盤分區/dev/sdc5、/dev/sdc6製作爲便於LVM識別的物理卷:

[root@osyunwei ~]# pvcreate /dev/sdc{5,6}
  Physical volume "/dev/sdc5" successfully created
  Physical volume "/dev/sdc6" successfully created


6.3. 創建卷組


創建一個至少有兩個PV組成的大小爲20G的名爲testvg的VG:

[root@osyunwei ~]# vgcreate -s 16M testvg /dev/sdc{5,6}
  Volume group "testvg" successfully created


6.4. 創建邏輯卷


在卷組testvg中創建大小爲5G的邏輯卷testlv:

[root@osyunwei ~]# lvcreate -L 5G -n testlv testvg
  Logical volume "testlv" created.


6.5. 格式化邏輯卷


[root@osyunwei ~]# mkfs.ext4 /dev/mapper/testvg-testlv


6.6. 掛載邏輯卷


將格式化後的邏輯卷掛載至/users目錄:

[root@osyunwei ~]# mkdir /users
[root@osyunwei ~]# mount /dev/mapper/testvg-testlv /users


6.7. 擴展邏輯卷



LVM支持在線擴容,示例如下:

擴展邏輯卷之前,先新建用戶archlinux,其家目錄爲/users/archlinux,而後su切換至archlinux用戶,複製/etc/pam.d目錄至自己的家目錄:

[root@osyunwei ~]# useradd -d /users/archlinux archlinux
[root@osyunwei ~]# su - archlinux
[archlinux@osyunwei ~]$ cp -r /etc/pam.d /users/archlinux
[archlinux@osyunwei ~]$ exit


擴展testlv至7G,要求archlinux用戶的文件不能丟失:

[root@osyunwei ~]# lvextent -L 7G /dev/testvg/testlv
或者:[root@osyunwei ~]# lvextent -L +2G /dev/testvg/testlv


重新調整在邏輯捲上創建的文件系統的大小:

[root@osyunwei ~]# resize2fs /dev/mapper/testvg-testlv

這就完成了對LV的擴展!


6.8. 縮減邏輯卷


在CentOS 6上還不能在線縮容,需要先卸載、檢測修復文件系統、縮減文件系統的大小、縮減邏輯卷LV的空間,最後再重新掛載。

要收縮testlv至3G,且要求archlinux用戶的文件不能丟失,首先要卸載正在掛載的邏輯卷:

[root@osyunwei ~]# umount /dev/mapper/testvg-testlv


檢測文件系統是否有發生錯誤:

[root@osyunwei ~]# e2fsck -f /dev/mapper/testvg-testlv


要縮減邏輯卷LV的空間,必須先把在邏輯捲上創建的文件系統的空間縮減(類比:減少桌子的面積之前要先把桌子上承載的東西減少,總之要要保證桌子有足夠的空間盛放東西。):

[root@osyunwei ~]# resize2fs /dev/mapper/testvg-testlv 3G


承上,縮減邏輯卷的空間:

[root@osyunwei ~]# lvreduce -L 3G /dev/mapper/testvg-testlv


重新掛載:

[root@osyunwei ~]# mount /dev/mapper/testvg-testlv /users

這就完成了對LV的縮減。


6.9. 製作快照卷


對testlv創建快照,設置快照卷權限爲只讀,並嘗試基於快照備份數據,驗證快照的功能:

[root@osyunwei ~]# lvcreate -L 2G -p r -s -n testsnap /dev/mapper/testvg-testlv


掛載快照卷至/snapshot:

[root@osyunwei ~]# mkdir /snapshot
[root@osyunwei ~]# mount /dev/mapper/testvg-testsnap /snapshot

這就完成了快照卷的製作。


6.10. 添加新的物理捲到卷組中


示例:添加/dev/sdb6

[root@osyunwei ~]# vgextend testvg /dev/sdb6
  Physical volume "/dev/sdb6" successfully created
  Volume group "testvg" successfully extended


6.11. 從卷組中刪除一個物理卷


示例:刪除/dev/sdc5


要從卷組中刪除一個物理卷,就需要確認要刪除的物理卷(/dev/sdc5)沒有被任何邏輯卷正在使用,就要使用pvdisplay命令察看一個該物理卷(/dev/sdc5)信息:

[root@osyunwei ~]# pvdisplay /dev/sdc5
  --- Physical volume ---
  PV Name               /dev/sdc5
  VG Name               testvg
  PV Size               10.00 GiB / not usable 4.51 MiB
  Allocatable           yes 
  PE Size               16.00 MiB
  Total PE              640
  Free PE               320
  Allocated PE          320
  PV UUID               PF77Xl-Xj8V-rD2L-c9Px-c60I-s6ey-tg42FA

   

很不湊巧!/dev/sdc5正被某個邏輯卷所使用,於是需要使用pvmove把要移除的PV(/dev/sdc5)上已佔用的PE上的數據移至其他PV未佔用的PE上:

[root@osyunwei ~]# pvmove /dev/sdc5
  /dev/sdc5: Moved: 0.0%
  /dev/sdc5: Moved: 14.4%
  /dev/sdc5: Moved: 29.1%
  /dev/sdc5: Moved: 43.4%
  /dev/sdc5: Moved: 58.1%
  /dev/sdc5: Moved: 60.0%
  /dev/sdc5: Moved: 74.7%
  /dev/sdc5: Moved: 89.4%
  /dev/sdc5: Moved: 100.0%


再查看一下/dev/sdc5的詳細信息:

[root@osyunwei ~]# pvdisplay /dev/sdc5
  --- Physical volume ---
  PV Name               /dev/sdc5
  VG Name               testvg
  PV Size               10.00 GiB / not usable 4.51 MiB
  Allocatable           yes 
  PE Size               16.00 MiB
  Total PE              640
  Free PE               640
  Allocated PE          0
  PV UUID               PF77Xl-Xj8V-rD2L-c9Px-c60I-s6ey-tg42FA

   

不錯~要刪除的物理卷/dev/sdc5已經沒被任何邏輯卷所使用了,所以大膽刪除吧:

[root@osyunwei ~]# vgreduce testvg /dev/sdc5
  Removed "/dev/sdc5" from volume group "testvg"


7. LVM總結


7.1. LVM優點


(1) 支持邏輯卷LV、卷組VG邊界動態擴展或縮減

(2) 支持快照功能;

(3) 文件系統建立在邏輯卷LV之上,因此文件系統可跨分區,尤其是對於大系統需要使用很多塊硬盤來說更能方便管理,並且可隨時根據使用情況對邏輯捲進行在線擴展,而不需要在存儲空間不夠用時重新分區、格式化、掛載和拷貝數據等。對大系統來說,使用LVM主要是方便管理、增加了系統的可拓展性。

(4) 管理員可對卷組VG、邏輯卷LV按照組的方式進行命名、管理和分配,例如根據用途可將VG或LV命名爲:"development"和"sales"等,而不是使用物理磁盤名"sda"和"sdb"等。


7.2. LVM缺點


(1) 相比於傳統的磁盤分區來說,LVM安裝配置略複雜,但影響不大;

(2) 如果誤刪數據的話,做數據恢復難度較大,因爲LVM系統使用的是邏輯分區(邏輯卷),所以Linux使用者並不知道數據在底層硬盤上如何存儲。但從根本上來說,這是用戶自身問題,不是LVM技術本身的問題。



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