Linux系統管理之LVM邏輯卷管理

1、何爲LVMnode

    LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制,它由Heinz Mauelshagen在Linux 2.4內核上實現。Linux用戶安裝Linux操做系統時遇到的一個常見的難以決定的問題就是如何正確地評估各分區大小,以分配合適的硬盤空間。普通的磁盤分區管理方式在邏輯分區劃分好以後就沒法改變其大小,當一個邏輯分區存放不下某個文件時,這個文件由於受上層文件系統的限制,也不能跨越多個分區來存放,因此也不能同時放到別的磁盤上。而遇到出現某個分區空間耗盡時,解決的方法一般是使用符號連接,或者使用調整分區大小的工具,但這只是暫時解決辦法,沒有從根本上解決問題。隨着Linux的邏輯卷管理功能的出現,這些問題都迎刃而解,用戶在無需停機的狀況下能夠方便地調整各個分區大小。bash

    LVM的大小能夠在不卸載的時候隨意擴展和收縮而不損壞裏面存放的數據。
app


2、LVM的組成ide

wKiom1YJW-zwfDURAAFVqFhodiw260.jpg

①、Physical Volume, PV, 物理卷工具

    物理卷在邏輯卷管理系統最底層,可爲整個物理硬盤或實際物理硬盤上的分區,咱們實際的 partition 須要調整系統識別碼 (system ID) 成爲 8e (LVM 的識別碼),而後再通過 pvcreate 的命令將他轉成 LVM 最底層的實體卷軸 (PV) ,以後纔可以將這些 PV 加以利用!佈局

物理卷佈局

LVM 標籤在第二個扇區,接下來是元數據區,以後是設備的可用空間。ui

一、物理卷標籤包含:spa

  • 物理卷 UUID操作系統

  • 以字節爲單位的塊設備大小3d

  • 以 NULL 結尾的數據區域位置列表

  • 以 NULL 結尾的元數據區域位置列表

備註:默認狀況下,pvcreate 命令會在第二個 512 字節扇區放置物理卷標籤。這個標籤可選擇性地放在前四個扇區中的任意一個,由於掃描物理卷標籤的 LVM 工具會檢查前四個扇區。物理卷標籤以字符串 LABELONE 開始。

二、元數據:卷組的配置詳情被稱爲元數據,卷組的每一個物理卷元數據區域中均保存徹底相同的元數據副本。

  • 可使用 pvcreate 命令的 --metadatacopies 0 選項建立沒有任何元數據副本的物理卷。默認狀況下,卷組中的每一個物理卷中都會在其元數據區域保留一個同樣的元數據副本。

  • 可以使用 pvcreate 命令的 --metadatasize 選項指定元數據區域的大小。對於包含數百個物理卷和邏輯卷的卷組來講,默認大小可能過小。

備註:LVM 容許在每一個物理卷中保存 0、1 或者 2 個元數據副本。默認是保存一個副本。一旦設置了在物理卷中保存的元數據備份數目以後就沒法再更改。第一個副本保存在設備的起始位置,緊挨着標籤。若是有第二個副本,會將其放在設備的末尾。若是不當心寫入了不一樣於想要寫入的磁盤,從而覆蓋了磁盤的起始部分,那麼可使用在設備末尾的元數據第二個副本恢復元數據。


②、Volume Group, VG, 卷組

    卷組創建在物理捲上,一卷組中至少要包括一物理卷,卷組創建後可動態的添加捲到卷組中,一個邏輯卷管理系統工程中可有多個卷組。所謂的 LVM 大磁盤就是將許多 PV 整合成這個 VG 的東西!因此 VG 就是 LVM 組合起來的大磁盤!每一個 VG 最多僅能包含 65534 個 PE。 若是使用 LVM 默認的參數,則一個 VG 最大可達 256GB 的容量

③、Physical Extend, PE, 物理擴展單元

    物理區域是物理卷中可用於分配的最小存儲單元,物理區域大小在創建卷組時指定,一旦肯定不能更改,同一卷組全部物理卷的物理區域大小需一致,新的pv加入到vg後,pe的大小自動更改成vg中定義的pe大小。LVM 默認使用 4MB 的 PE 區塊,而 LVM 的 VG 最多僅能含有 65534 個 PE ,所以默認的 LVM VG 會有 4M*65534/(1024M/G)=256G。 這個 PE 頗有趣喔!他是整個 LVM 最小的儲存區塊,也就是說,其實咱們的文件數據都是藉由寫入 PE 來處理的。 簡單的說,這個 PE 就有點像文件系統裏面的 block 大小啦。 因此調整 PE 會影響到 VG 的最大容量!

④、Logical Volume, LV, 邏輯卷

    邏輯卷創建在卷組基礎上,卷組中未分配空間可用於創建新的邏輯卷,邏輯卷創建後能夠動態擴展和縮小空間。最終的 VG 還會被切成 LV,這個 LV 就是最後能夠被格式化掛載使用的!PE 是整個 LVM 的最小儲存單位,那麼 LV 的大小就與在此 LV 內的 PE 總數有關。 爲了方便使用者利用 LVM 來管理其系統,所以 LV 的裝置檔名一般指定爲『 /dev/vgname/lvname 』或『 /dev/mapper/vgname-lvname 』,此兩個檔名都是符號連接,真正的設備名爲『 /dev/dm-#(1,2,3...) 』。

⑤、logical Extent,LE,邏輯擴展單元

    邏輯區域是邏輯卷中可用於分配的最小存儲單元,邏輯區域的大小取決於邏輯卷所在卷組中的物理區域的大小。


    注意:雖然PE是PV的單元。但PV剛剛建立時並無建立PE,只有加入到VG後纔會生產指定大小的PE,全部PE的大小是由VG決定的。LV的大小是由PE決定的,分配多少個PE則LV就爲全部PE的總大小。當PE分配到LV時稱爲LE。


3、LVM的建立及管理

wKioL1YJZPrjxhcyAABBcT0b7xo498.gif

①、PV的建立和管理

[root@wlw ~]# pv [tab][tab]
pvchange   pvcreate   pvmove     pvresize   pvscan     
pvck       pvdisplay  pvremove   pv
#使用pv加兩個tab能夠看到PV的相關命令

    pvcreate /dev/DEVICE : 將 partition 建立成爲 PV 

[root@wlw ~]# pvcreate /dev/sda{6,7,8}
  Physical volume "/dev/sda6" successfully created
  Physical volume "/dev/sda7" successfully created
  Physical volume "/dev/sda8" successfully created

    pvscan :搜尋目前系統中的全部PV

[root@wlw ~]# pvscan 
  PV /dev/sda6         lvm2 [5.01 GiB]
  PV /dev/sda7         lvm2 [8.01 GiB]
  PV /dev/sda8         lvm2 [10.00 GiB]
  Total: 3 [23.02 GiB] / in use: 0 [0   ] / in no VG: 3 [23.02 GiB]

    pvs : 顯示PV的簡要信息

[root@wlw ~]# pvs /dev/sda6
  PV         VG   Fmt  Attr PSize PFree
  /dev/sda6       lvm2 ---  5.01g 5.01g
[root@wlw ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sda6       lvm2 ---   5.01g  5.01g
  /dev/sda7       lvm2 ---   8.01g  8.01g
  /dev/sda8       lvm2 ---  10.00g 10.00g
#不指定設備則列出全部的設備信息

    pvdisplay : 顯示PV的詳細信息

[root@wlw ~]# pvdisplay /dev/sda6
  "/dev/sda6" is a new physical volume of "5.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sda6
  VG Name               
  PV Size               5.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               t522PZ-Rvvy-2kvQ-BiYh-lzdq-RmPJ-fRp74C
#不指定設備則列出全部的設備信息

    pvremove :將 PV 屬性移除,讓該 partition 不具備 PV 屬性

[root@wlw ~]# pvremove /dev/sda6
  Labels on physical volume "/dev/sda6" successfully wiped

    pvmove :將VG中的PV移除,在縮減VG的時候使用。


②、VG的建立和管理

[root@wlw ~]# vg [tab][tab]
vgcfgbackup    vgcreate       vgimport       vgremove
vgcfgrestore   vgdb           vgimportclone  vgrename
vgchange       vgdisplay      vgmerge        vgs
vgck           vgexport       vgmknodes      vgscan
vgconvert      vgextend       vgreduce       vgsplit
#使用vg加兩個tab能夠看到VG的相關命令

    vgcreate  [-s#[mMgGtT]] VolumeGroupName  PhysicalDevicePath : 建立vg

[root@wlw ~]# vgcreate -s 8M myvg /dev/sda6
  Physical volume "/dev/sda6" successfully created
  Volume group "myvg" successfully created
#-s指定PE的大小,單位指定格式爲:kKmMgGtTpPeE

    vgscan :搜尋目前系統中的全部VG

    vgs : 顯示VG的簡要信息

    vgdisplay : 顯示VG的詳細信息

    vgextend :向 VG 中添加額外的 PV 

[root@wlw ~]# vgextend myvg /dev/sda7
  Volume group "myvg" successfully extended

    vgreduce :在 VG 內移除 PV

[root@wlw ~]# vgreduce myvg /dev/sda6
  Removed "/dev/sda6" from volume group "myvg"
#在移除PV時,切記要先執行pvmove /dev/sda6,讓PV中的PE移動到其餘PV中去,以避免數據丟失

    vgremove :刪除 VG 


③、LV的建立和管理

[root@wlw ~]# lv [tab][tab]
lvchange     lvextend     lvmdiskscan  lvmsar       lvresize
lvconvert    lvm          lvmdump      lvreduce     lvs
lvcreate     lvmchange    lvmetad      lvremove     lvscan
lvdisplay    lvmconf      lvmsadc      lvrename  
#使用lv加兩個tab能夠看到LV的相關命令

    lvcreate {-L|-l} #[mMgGtT] -n NAME VolumeGroup : 建立LV

[root@wlw ~]# lvcreate -L 4G -n mylv myvg
  Logical volume "mylv" created.
#-L:指定LV大小,-n:指定LV的名字,-l:指定給LV分配多少個PE,默認PE大小爲4M,這個時候就能夠吧LV格式化並掛載使用了

    lvscan :搜尋目前系統中的全部LV

    lvs : 顯示LV的簡要信息

    lvdisplay : 顯示LV的詳細信息

    lvremove :刪除 LV


添加LV容量

    lvextend {-L|-l} [+]#[mMgGtT]:擴展邏輯卷,向 LV 裏面添加容量

[root@wlw ~]# lvextend -L +2G /dev/myvg/mylv 
  Size of logical volume myvg/mylv changed from 4.00 GiB (512 extents) to 6.00 GiB (768 extents).
  Logical volume mylv successfully resized
#這裏給mylv添加了2G的大小,若是是指定-L 5G的話,則表明把mylv修改成5G。

    注意:這裏咱們修改完LV以後,發現磁盤容量並無變化,這是由於邏輯卷大小確實擴張了,可是文件系統的大小仍是以前的大小並無變化,此時咱們須要從新調整文件系統的大小與邏輯卷大小相同。而無需從新掛載。下面咱們針對ext系統文件系統進行演示,若是是其餘文件系統須要使用其對應的工具。

[root@wlw ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.8G  4.6G  4.7G  50% /
tmpfs                 499M     0  499M   0% /dev/shm
/dev/sda1             976M   36M  890M   4% /boot
/dev/sr0              3.7G  3.7G     0 100% /mnt
/dev/mapper/myvg-mylv
                      3.9G   12M  3.7G   1% /mylvm
[root@wlw ~]# resize2fs /dev/myvg/mylv 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv is mounted on /mylvm; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 3
Performing an on-line resize of /dev/myvg/mylv to 3145728 (2k) blocks.
The filesystem on /dev/myvg/mylv is now 3145728 blocks long.
#resize2fs後面若是沒有指定大小則默認調整爲整個設備的大小
[root@wlw ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             9.8G  4.6G  4.7G  50% /
tmpfs                 499M     0  499M   0% /dev/shm
/dev/sda1             976M   36M  890M   4% /boot
/dev/sr0              3.7G  3.7G     0 100% /mnt
/dev/mapper/myvg-mylv
                      5.9G   12M  5.6G   1% /mylvm
#這裏咱們能夠看到,添加的2G已經添加到設備上了,無需從新掛載


縮減LV容量(縮減有風險,須要謹慎操做)

    一、umount /dev/VG_NAME/LV_NAME:卸載設備

[root@wlw ~]# umount /dev/myvg/mylv

    二、e2fsck -f /dev/VG_NAME/LV_NAME:強制檢測文件系統

[root@wlw ~]# e2fsck -f /dev/myvg/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
MYLV: 13/393216 files (0.0% non-contiguous), 87981/3145728 blocks

    三、resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]:縮減文件系統大小

[root@wlw ~]# resize2fs /dev/myvg/mylv 3G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mylv to 1572864 (2k) blocks.
The filesystem on /dev/myvg/mylv is now 1572864 blocks long.
#縮減後文件系統的大小必須能容納當前全部文件的大小,否則文件會損壞

    四、lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME

[root@wlw ~]# lvreduce -L 3G /dev/myvg/mylv 
  WARNING: Reducing active logical volume to 3.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
  Size of logical volume myvg/mylv changed from 6.00 GiB (768 extents) to 3.00 GiB (384 extents).
  Logical volume mylv successfully resized


④、快照:snapshot

快照卷的原理:

    對原卷(邏輯卷)作快照就是某一刻當即建立對方的元數據的監視器,隨時監視對方的元數據,而快照卷剛建立後是沒有任何數據的,當咱們把快照卷掛載後是能夠看到原卷的全部文件的,由於快照卷是原卷的另外一個訪問路徑而已,由於快照卷監視了全部的原卷的元數據,當原卷數據沒有發生改變時,兩個卷的數據是同樣的,因爲快照卷的監視器一直在監視原卷的全部文件,當監控原卷的某個文件要發生改變時,會先把原卷中即將修改的文件複製一份到快照卷中,當咱們須要恢復快照的時候,沒有變化的數據是在原卷中存放的,變化的數據纔在目標卷中恢復,因此只有修改過的文件纔會複製到快照卷中,因此快照卷體積是很小的。快照卷和原卷必須在同一卷組中。


    lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name:快照卷的建立

[root@wlw ~]# lvcreate -s -L 512M -p r -n mylv-snapshot /dev/myvg/mylv
  Logical volume "mylv-snapshot" created.
[root@wlw ~]# lvs
  LV            VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv          myvg owi-aos---   3.00g                                                    
  mylv-snapshot myvg swi-a-s--- 512.00m      mylv   0.00 
#-s指定此卷爲快照卷,-p以只讀的格式建立,-n指定快照卷名字。

    lvremove original_lv_name:快照卷的刪除

[root@wlw /]# lvremove /dev/myvg/mylv-snapshot 
Do you really want to remove active logical volume mylv-snapshot? [y/n]: y
  Logical volume "mylv-snapshot" successfully removed


⑤、當肯定邏輯卷中數據已經備份,打算刪除LVM拆除磁盤時

    一、umount /dev/VG_NAME/LV_NAME:卸載設備

[root@wlw /]# umount /dev/myvg/mylv

    二、lvremove lv_name:刪除 LV

[root@wlw /]# lvremove /dev/myvg/mylv 
Do you really want to remove active logical volume mylv? [y/n]: y
  Logical volume "mylv" successfully removed

    三、vgremove vg_name:刪除 VG

[root@wlw /]# vgremove myvg
  Volume group "myvg" successfully removed

    四、pvremove pv_name:刪除 PE

[root@wlw /]# pvremove /dev/sda{6,7,8}
  Labels on physical volume "/dev/sda6" successfully wiped
  Labels on physical volume "/dev/sda7" successfully wiped
  Labels on physical volume "/dev/sda8" successfully wiped

    五、拆除磁盤或用於其餘用途

相關文章
相關標籤/搜索