linux下LVM相關知識(動態增減LVM,快照功能)的總結

一,什麼是LVM 

  LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。LVM是磁盤分區和文件系統之間添加的一個邏輯層,來爲文件系統屏蔽下層磁盤分區佈局,提供一個抽象的盤卷,在盤捲上建立文件系統。物理卷(physical volume)物理卷就是指硬盤分區或從邏輯上與磁盤分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有與LVM相關的管理參數。

 

二,LVM解決了什麼難題

  每個Linux使用者在安裝Linux時都會遇到這樣的困境:在爲系統分區時,如何精確評估和分配各個硬盤分區的容量,因爲系統管理員不但要考慮到當前某個分區需要的容量,還要預見該分區以後可能需要的容量的最大值。因爲如果估 計不準確,當遇到某個分區不夠用時管理員可能甚至要備份整個系統、清除硬盤、重新對硬盤分區,然後恢復數據到新分區。  雖然現在有 很多動態調整磁盤的工具可以使用,例如PartationMagic等等,但是它並不能完全解決問題,因爲某個分區可能會再次被耗盡;另外一個方面這需要 重新引導系統才能實現,對於很多關鍵的服務器,停機是不可接受的,而且對於添加新硬盤,希望一個能跨越多個硬盤驅動器的文件系統時,分區調整程序就不能解 決問題。  因此完美的解決方法應該是在零停機前提下可以自如對文件系統的大小進行調整,可以方便實現文件系統跨越不同磁盤和分區。幸運的是Linux提供的邏輯盤卷管理(LVM,LogicalVolumeManager)機制就是一個完美的解決方案。  

  歸納來講LVM提供兩種比較厲害的功能:

     1):可以動態的增大或者縮小磁盤的大小而不影響磁盤原有的數據

     2):提供一種實現數據備份的通道--快照功能

 

三,LVM的邏輯結構

24648486_1321935907A07q.png

這裏要說明以下幾點:

  1),pv被創建後是由很多的PE(physical extension物理盤區)組成的,物理盤區就相當於我們說的block,不過通常比一般的block大,可以是4M,8M,16M等,

  2),當VG被創建後,我們才能正常查看PE的數量

  3),其實最後的LV就是由這些PE組成的,不過在LV裏面這些PE叫做LE

  4),一個系統上可以有很多個PV,VG,LV

 

以下是LVM管理的相關命令:

24648486_1321936849vggE.png

 

四,LVM創建過程

   這裏我們在虛擬機裏面創建在底層準備兩個10G的分區作爲PV(兩個分區的大小不一定非得相等)

  1),創建兩個分區sdb1和sdb2         //這裏不再列出創建過程,注意創建分區的ID號爲8e

 

  2),把這兩個分區創建成PV

     #pvcreate /dev/sdb1 /dev/sdb2  //創建成PV

     #pvdisplay                     //查看創建的PV詳細信息

 

  3),把創建的PV做成VG

     #vgcreate vg0 /dev/sdb1 /dev/sdb2 //創建成VG(記得指定創建的VG名字)

     #vgdisplay vg0                  //查看創建好的vg信息

 

  4),創建LV

     #lvcreate -L 5G -n lvm1 vg0    //創建LV (-L指定LV大小,-n指定LV名字,注意要制定要在哪個vg中創建LV,因爲一個磁盤上是可以存在多個卷組vg的)

     #lvdisplay /dev/vg0/lvm1       //查看創建的LV信息(注意這裏不能使用lvdisplay lvm1,需要指定lvm1的路徑或者指定卷組名稱才能顯示出來詳細信息。例如#lvdisplay vg0)

 

     到這裏我們的lv已經創建完畢,它跟我們的基本磁盤分區一樣,要想使用必須先格式化。

 

  5),格式化創建的LV

     #mke2fs -j /dev/vg0/lvm1        //格式化成ext3文件系統

     #mount /dev/vg0/lvm1  /mnt      //掛載新的分區到/mnt

                                     //如果想每次開機自動掛載可以寫到 /etc/fstab下

     #ls /mnt                        //會有lost+found文件,證明磁盤分區建立成功

 

  其他的命令介紹:

     #pvremove  /dev/sdb2            //刪除一個pv

     #vgextend  vg0 /dev/sdb3        //擴展vg的大小(要先創建sdb3作爲pv)

     #vgreduce  vg0 /dev/sdb3        //縮小vg的大小(縮減的時候要先使用pvmove /dev/sdb3,把數據移除)

縮減VG

 想要減小VG的大小,首先確認想刪減的分區是否已經寫上數據:

[root@ax3 ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/hda6
  VG Name               vgtest
  PV Size               964.81 MB / not usable 830.00 KB
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              241  
  Free PE               100  
  Allocated PE             141   #這個說明hda6上已經有141個PE上已經寫上了數據
  Allocated PE          0
  PV UUID               uTYGW9-MKq4-OEdn-FNzV-77DK-j4XI-IeNLtb

--- Physical volume ---
  PV Name               /dev/hdb5
  VG Name               vgtest
  PV Size               1.87 GB / not usable 1.96 MB
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              478
  Free PE               297

  Allocated PE          181
  PV UUID               o4LYXW-fm9v-e4oN-ZSuW-SI6e-pLoW-gMrPKa

  --- Physical volume ---
  PV Name               /dev/hda5
  VG Name               vgtest
  PV Size               1.87 GB / not usable 1.96 MB
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              478
  Free PE               478
  Allocated PE          0
  PV UUID               xD2DkY-G12w-XU7S-a5tB-jEig-4LXB-e0ZK0K

可以直接移出hda5,因爲它完全沒有數據;也可以移出hda6,只需把hda6上的數據移動到其他分區就可以了:
# pvmove /dev/hda6 /dev/hdb5 #把hda6上的數據備份到hdb5上

然後開始減小VG的大小,我們這裏刪去hda5,當然,如刪去hda6,步驟也完全一樣:
[root@ax3 ~]# vgreduce vgtest /dev/hda5
  Removed "/dev/hda5" from volume group "vgtest"
[root@ax3 ~]# pvscan
  PV /dev/hda6   VG vgtest          lvm2 [964.00 MB / 964.00 MB free]
  PV /dev/hdb5   VG vgtest          lvm2 [1.87 GB / 1.16 GB free]
  PV /dev/hda5                      lvm2 [1.87 GB]
  Total: 3 [4.68 GB] / in use: 2 [2.81 GB] / in no VG: 1 [1.87 GB]

#除去hda5的PV屬性
[root@ax3 ~]# pvremove /dev/hda5
  Labels on physical volume "/dev/hda5" successfully wiped
[root@ax3 ~]# pvscan
  PV /dev/hda6   VG vgtest   lvm2 [964.00 MB / 964.00 MB free]
  PV /dev/hdb5   VG vgtest   lvm2 [1.87 GB / 1.16 GB free]
  Total: 2 [2.81 GB] / in use: 2 [2.81 GB]  / in no VG: 0 [0   ]
此時的hda5就恢復到了初始的模式,再將其system id從8e變爲83,則它就完全成爲了一個普通的分區。


五,擴展或者縮減一個LVM的大小

  這裏我們要引入兩個概念:物理邊界和邏輯邊界

  物理邊界:我們對一個磁盤進行分區的分區邊界

  邏輯邊界:我們格式化分區,建立文件系統後形成的分區邊界

在我們對LVM擴展的時候,我們要先擴展物理邊界,然後再擴展邏輯邊界;縮減LVM的時候則相反(讀者這裏可以好好體會下爲什麼這樣做)

其實就是水(邏輯邊界)與水桶(物理邊界)的問題

 

  擴展LVM:

    #lvextend -L +2G /dev/vg0/lvm1   //爲LVM1增加2G的大小(注意這裏是擴展的物理邊界)

    #df -lh                        //顯示發現LVM1的大小沒有變化(因爲我們還沒有擴展邏輯邊界)

    #resize2fs -p /dev/vg0/lvm1      //擴展其邏輯邊界(-p顯示擴展的過程)

    #df -lh                          //這時候發現lvm1的大小已經增加了2G,表明擴展成功

 

  縮減LVM:縮減存在一定的風險,所以在生產環境中我們一般不縮減LVM大小

    #umount  /dev/vg0/lvm1           //必須先卸載掉

    #e2fsck  -f /dev/vg0/lvm1        //對這個邏輯捲進行自檢,保證其數據的一致性

    #resize2fs  /dev/vg0/lvm1 3G     //縮減邏輯捲到3G大小(縮減的是邏輯邊界)

    #lvreduce -L 3G /dev/vg0/lvm1    //縮減的是物理邊界

    #mount  /dev/vg0/lvm1 /mnt       //掛載邏輯捲到/mnt

    #ls /mnt                         //查看數據是否被損壞

   

六,快照snapshot(主要是用作在線備份)

  介紹幾個概念,關於數據的備份

    冷備份:卸載掉文件系統,不能讀不能寫

    溫備份:不卸載文件系統,能讀取文件系統內容但是不能寫

    熱備份:不卸載文件系統,既能讀取文件系統內容又能寫入

  注意兩點:

  1),快照其實也是一個邏輯卷  

  2),快照只能對邏輯卷LVM進行備份,並且只能對同一個卷組的邏輯捲進行備份

 

  創建過程:

    #lvcreate -L 512M -s -n lvm1-snap -p r /dev/vg0/lvm1   //創建一個512M的快照(-s指定這是一個快照,-n指定快照名字,-p指定這個快照的權限) 

    #mkdir /snap                       //創建一個目錄作爲快照卷的掛載點

    #mount /dev/vg0/lvm1-snap /snap          //將快照掛載到 /snap 目錄下

    #tar -jcf /tmp/snap.tar.gz  /snap/* //備份快照卷的內容到/tmp下

  這個時候無論你在邏輯捲上做什麼變化都不用擔心數據丟失了,從備份的快照文件裏面可以恢復之前的文件,這就是快照卷的強大之處了……

   當快照備份完之後我們就可以釋放並刪除這個快照了,以免對系統的負載過大

   #umount /dev/vg0/lvm1-snap

   #lvremove /dev/vg0/lvm1-snap

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