Linux LVM入門

LVM是Logical Volume Manager(邏輯卷管理器)的簡稱,它可使管理員在Linux系統上更加靈活的規劃和使用磁盤空間。

爲何使用LVM
對於傳統的分區類型,其尺寸是固定的,不可以動態擴展。所以在使用以前,管理員須要提早規劃分區的用途和須要的尺寸。一旦某個分區的尺寸不能知足需求了,管理員將不得不從新分區,或者將包含足夠空間的新磁盤分區掛載到原有文件系統上。使用LVM處理這樣的問題將得到更大的靈活性。
在LVM中,分區對應物理磁盤上一系列連續數據塊的概念已經演變了。如今經過LVM能夠將物理磁盤的空間分解爲不少單元,而後將多個物理磁盤的存儲單元匯聚爲一個可供用戶使用的邏輯單元。用戶再也不直接使用物理磁盤,而是一個通過邏輯劃分的虛擬磁盤。邏輯單元的空間能夠來自於多個物理磁盤,同時管理員也能夠經過擴展邏輯單元動態增長可用的磁盤空間。
例如,有一個10GB的磁盤,建立「/home」分區使用了2GB。如今「home」沒有足夠的可用空間了,因而決定將「/home」擴展到3GB。用傳統的分區方式,管理員將不得不建立一個3GB大小的分區,並備份「/home」的所有內容;將創建的新分區掛載到「/home」,而後將備份的「/home」數據恢復上去。
或者,也可使用Partition Magic之類的分區工具,在不從新分區的狀況下調整分區的尺寸。可是使用Partition Magic工具進行分區操做,須要從新引導機器,這每每是服務器管理員須要儘可能避免的。而使用LVM配置,管理員無需從新引導機器,只要增長1GB(或更大)的磁盤,並將它的存儲單元添加到「/home」中就能夠了。
LVM的基本概念和術語
在LVM中最終面向用戶的是通過邏輯劃分的磁盤空間,它創建在具體的物理介質上,這個物理介質能夠是一個磁盤或一個磁盤分區。
物理卷Physical Volume(PV)
一個物理卷只不過是一個有LVM管理數據添加在裏面的物理存儲介質。要使用LVM系統,首先對要用於LVM的磁盤進行初始化,初始化的目的就是將磁盤或分區標識爲LVM 的物理卷。使用pvcreate 命令能夠將一個磁盤標記爲 LVM 物理卷。
物理分區Physical Extents(PE)
LVM將每一個物理卷分爲叫作物理分區的可尋址存儲單元,存儲單元的大小一般爲幾MB。磁盤的開頭部分爲LVM元數據,以後從索引爲零開始,每一個物理分區的索引依次遞增一,按順序進行分配。
卷組Volume Group(VG)
物理卷能夠組織爲卷組。卷組能夠由一個或多個物理卷組成,同時系統中能夠有多個卷組。建立了卷組以後,該卷組(而不是磁盤)即是表示數據存儲的實體。所以,儘管之前是將磁盤從一個系統移動到另外一個系統,使用了 LVM 以後,會將卷組從一個系統移動到另外一個系統。出於這種緣由,一般在一個系統上建立多個卷組會比較方便。
邏輯卷Logical Volume(LV)
卷組所表明的磁盤空間能夠分配給不一樣大小的邏輯卷。建立邏輯卷以後,就能夠將其視爲傳統的磁盤分區來處理。經過設備專用文件可訪問邏輯卷。一個邏輯卷能夠跨越一個卷組中的多個物理卷,也能夠僅表明物理卷中的一個分區。就像使用傳統的分區同樣,在邏輯捲上能夠建立一個文件系統。
邏輯分區Logical Extents(LE)
邏輯卷的基本分配單元稱爲邏輯分區。邏輯分區映射到物理分區,所以,若是物理分區的尺寸小爲4MB,那麼邏輯分區的尺寸也將爲4MB。邏輯卷的大小取決於所分配的邏輯分區數量。

當LVM將磁盤空間分配給邏輯卷時,會自動建立邏輯盤區到物理盤區的映射。此映射取決於建立邏輯卷時所選擇的策略。對於每一個邏輯卷,邏輯盤區從零開始按順序進行分配。LVM將使用此映射來訪問數據,而不考慮數據的物理位置。
除了鏡像邏輯卷、條帶化邏輯卷或條帶化的鏡像邏輯卷外,每一個邏輯分區均映射到一個物理分區。對於鏡像邏輯卷,每一個邏輯分區映射到多個物理分區。
圖說明了卷組內物理分區和邏輯分區之間的幾種映射類型。如圖所示,第一個邏輯卷的內容包含在卷組中全部三個物理卷中。因爲第二個邏輯卷使用了鏡像,每一個邏輯分區映射到多個物理分區。在這個例子中,包含鏡像數據的物理分區有兩個,分別位於卷組內的第二個物理卷和第三個物理捲上。 服務器


 

 



  •  

2樓 工具

默認狀況下,LVM按照LVM配置文件/etc/lvmtab中的出現的順序,從物理卷中選擇可用的物理分區,將這些物理分區分配給邏輯卷。管理員也能夠忽略這種默認分配,直接決定邏輯卷將使用哪一個物理捲上的物理分區。


配置和管理LVM
要創建LVM,首先須要爲LVM準備磁盤或分區。使用磁盤分區做爲物理卷的話,須要將分區標識爲「Linux LVM」,其分區ID爲「0x8e」。
假設如今有三個磁盤,分別爲/dev/sda、/dev/sdb、/dev/sdc,磁盤/dev/sda和/dev/sdb已經進行了磁盤分區,磁盤/dev/sdc還沒有進行分區操做。可使用fdisk -l命令查看現有分區狀況,以下所示:
# fdisk   -l

Disk /dev/sda: 255 heads, 63 sectors, 1044 cylinders
Units = cylinders of 16065 * 512 bytes

    Device Boot     Start        End     Blocks    Id   System
/dev/sda1              1         13     104391    83   Linux
/dev/sda2             14        804    6353707+   83   Linux
/dev/sda3            805        843     313267+   82   Linux swap
/dev/sda4            844       1044    1614532+   83   Linux

Disk /dev/sdb: 128 heads, 32 sectors, 512 cylinders
Units = cylinders of 4096 * 512 bytes

    Device Boot     Start        End     Blocks    Id   System
/dev/sdb1              1        100     204784    83   Linux
/dev/sdb2            101        200     204800    83   Linux

Disk /dev/sdc: 128 heads, 32 sectors, 512 cylinders
Units = cylinders of 4096 * 512 bytes

Disk /dev/sdc doesn't contain a valid partition table
如今決定要使用磁盤分區/dev/sda四、/dev/sdb一、/dev/sdb2以及磁盤/dev/sdc創建卷組,須要先創建相應的物理卷。使用fdisk工具能夠將分區指定爲「Linux LVM」類型,具體操做以下:
# fdisk   /dev/sda

The number of cylinders for this disk is set to 1044.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
    (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): t
Partition number (1-4): 4 this


 



  •  

3樓 spa

Hex code (type L to list codes): 8e
Changed system type of partition 4 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sda: 255 heads, 63 sectors, 1044 cylinders
Units = cylinders of 16065 * 512 bytes

    Device Boot     Start        End     Blocks    Id   System
/dev/sda1              1         13     104391    83   Linux
/dev/sda2             14        804    6353707+   83   Linux
/dev/sda3            805        843     313267+   82   Linux swap
/dev/sda4            844       1044    1614532+   8e   Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Re-read table failed with error 16: Device or resource busy.
Reboot your system to ensure the partition table is updated.

WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.
對分區/dev/sdb一、/dev/sdb2作一樣的操做後,就能夠創建物理捲了。創建物理卷的命令是pvcreate,該命令的基本用法爲:
pvcreate   [-d]   [-f[f]]   [-h]   [-y]   [-v]   PhysicalVolumePath
各個選項的含義以下:
-d:啓用附加的調試輸出。
-f:強制選項,對於已經屬於某個卷組的物理卷,可使用-ff選項進行重建。
-h:獲取該命令的幫助信息。
-y:對於全部提問都以「yes」應答。
-v:顯示詳細的執行過程。
PhysicalVolumePath表示物理卷的設備路徑。
例如要在以前準備的設備上創建物理卷,能夠執行如下操做:
# pvcreate   /dev/sda4   /dev/sdb1   /dev/sdb2   /dev/sdc
pvcreate -- physical volume "/dev/sda4" successfully created
pvcreate -- physical volume "/dev/sdb1" successfully created
pvcreate -- physical volume "/dev/sdb2" successfully created
pvcreate -- physical volume "/dev/sdc" successfully created
接下來須要將這些物理卷添加到一個卷組中,卷組名爲vg01,具體操做以下:
# vgcreate   vg01   /dev/sda4   /dev/sdb1   /dev/sdb2   /dev/sdc
vgcreate -- INFO: using default physical extent size 4 MB
vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte
vgcreate -- doing automatic backup of volume group "vg01"
vgcreate -- volume group "vg01" successfully created and activated
從上面的命令輸出中能夠看出,卷組vg01已經創建而且激活,物理分區的尺寸爲4MB,單個邏輯卷的尺寸能夠達到255.99GB。此外還能夠經過vgdisplay命令查看卷組的信息,具體操做以下: 調試


 



  •  

4樓 code

# vgdisplay   /dev/vg01
--- Volume group ---
VG Name                 g01
VG Access                 read/write
VG Status                 available/resizable
VG #                     0
MAX LV                     256
Cur LV                     0
Open LV                     0
MAX LV Size                 255.99 GB
Max PV                     256
Cur PV                     4
Act PV                     4
VG Size                     2.92 GB
PE Size                     4 MB
Total PE                     747
Alloc PE / Size             0 / 0
Free   PE / Size             747 / 2.92 GB
VG UUID                 Cq9FGt-ls34-Jc34-yH9Y-txyj-420P-H97Zhp
從上需信息中能夠看到,卷組vg01中包含4個物理捲成員,能夠容納的物理卷和邏輯卷數量爲256,物理分區尺寸爲4MB,卷組上還沒有創建邏輯卷。若要看到更詳細的信息,可使用vgdisplay   -v   /dev/vg01命令。
因爲沒有創建邏輯卷,所以還不可以使用該卷組進行數據存儲。使用lvcreate命令能夠創建邏輯卷,該命令的基本用法爲:
lvcreate   [-A] [-C] [-d] [-h] [-i[-I]] {-l | -L]} [-n] [-p] [-r] [-v] [-Z] VolumeGroupName
其中經常使用選項的含義以下:
-i:指定條帶化邏輯卷的條帶數,該數字爲條帶化邏輯卷佔用的物理卷數目。
-I:指定條帶化邏輯卷的條帶尺寸,尺寸能夠是2nKB(0<=n<=7)。
-l:指定邏輯捲尺寸,單位是邏輯分區數。
-L:指定邏輯捲尺寸,單位能夠是k、m、g、t等。
-n:指定邏輯卷名稱。
-p:設定邏輯卷的權限,能夠是r(只讀)或rw(讀寫)。
-s:建立鏡像邏輯卷。
例如要在卷組vg01上創建一個尺寸爲500MB的邏輯卷,能夠執行如下操做: orm





  •  

5樓 索引

# lvcreate   -L   500M   -n   lv1   vg01
lvcreate -- doing automatic backup of "vg01"
lvcreate -- logical volume "/dev/vg01/lv1" successfully created
已創建好的邏輯卷,能夠經過lvdisplay命令進行查看。在該命令中使用-v選項,還能夠看到邏輯分區(LE)和物理分區(PE)的映射關係。具體以下:
# lvdisplay   -v   /dev/vg01/lv1
--- Logical volume ---
LV Name                     /dev/vg01/lv1
VG Name                 vg01
LV Write Access             read/write
LV Status                     available
LV #                         1
# open                     0
LV Size                     500 MB
Current LE                 125
Allocated LE                 125
Allocation                 next free
Read ahead sectors             120
Block device                 58:0
    --- Distribution of logical volume on 1 physical volume   ---
    PV Name                   PE on PV      reads       writes
    /dev/sda4                 125           0           2        
    --- logical volume i/o statistic ---
    0 reads   2 writes
    --- Logical extents ---
    LE     PV                         PE      reads       writes
    00000 /dev/sda4                  00000   0           2         ci


 



  •  

6樓 it

    00001 /dev/sda4                  00001   0           0             00002 /dev/sda4                  00002   0           0             00003 /dev/sda4                  00003   0           0             00004 /dev/sda4                  00004   0           0             00005 /dev/sda4                  00005   0           0             00006 /dev/sda4                  00006   0           0             00007 /dev/sda4                  00007   0           0             00008 /dev/sda4                  00008   0           0         ……     00123 /dev/sda4                  00123   0           0             00124 /dev/sda4                  00124   0           0         最後,在創建好的邏輯捲上建立文件系統,而後將文件系統掛載到現有的Linux文件系統中,就可使用邏輯卷存儲數據了。例如要在邏輯卷lv1上創建ext3文件系統,能夠執行如下操做: # mkfs   -t exte   /dev/vg01 /lv1 邏輯卷創建以後,其尺寸能夠動態增長或減小。只要邏輯卷所在的卷組有足夠的剩餘磁盤空間,就可使用lvextend命令擴展邏輯卷,操做實例以下所示: # lvextend   -L   +200M   /dev/vg01/lv1 lvextend -- extending logical volume "/dev/vg01/lv1" to 700 MB lvextend -- doing automatic backup of volume group "vg01" lvextend -- logical volume "/dev/vg01/lv1" successfully extended 也可使用lvreduce命令縮減邏輯卷的尺寸,操做實例以下所示: # lvreduce   -L   -200M   /dev/vg01/lv1 lvreduce -- WARNING: reducing active logical volume to 500 MB lvreduce -- THIS MAY DESTROY YOUR DATA (filesystem etc.) lvreduce -- do you really want to reduce "/dev/vg01/lv1"? [y/n]: y lvreduce -- doing automatic backup of volume group "vg01" lvreduce -- logical volume "/dev/vg01/lv1" successfully reduced 注意:縮減一個活動的邏輯卷可能會破壞捲上的數據,執行時應提早檢查數據存儲狀況。 若是卷組上已經沒有足夠的空間可供邏輯卷擴展,就須要擴展卷組以提供更多的磁盤空間。爲了擴展卷組,須要先增長可用的物理卷,而後將卷組擴展到新的物理捲上。例如增長一個磁盤/dev/sdd,爲了擴展卷組到/dev/sdd,須要執行如下操做: 1)     在新磁盤上創建物理卷: # pvcreate   /dev/sdd pvcreate -- physical volume "/dev/sdd" successfully created 2)     將卷組vg01擴展到新的物理捲上: # vgextend vg01 /dev/sdd vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte vgextend -- doing automatic backup of volume group "vg01" vgextend -- volume group "vg01" successfully extended

相關文章
相關標籤/搜索