歡迎您光臨本站 註冊首頁

淺談Linux磁碟存儲管理續【邏輯卷管理(LVM)】

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

一、LVM的基本概念
在對磁碟進行分區大小規劃時,有時往往不能確定這個分區要使用的總空間大小,而用fdisk對磁碟分區后,每個分區的大小已經固定了,如果分區設置的過大,就白白浪費了磁碟空間,而分區設置的過小,就會導致空間不夠用的情形,此時最常見的方法是重新劃分磁碟分區,或者通過軟連接的方式將此分區的目錄鏈接到另一個分區,雖然能臨時解決問題,但是給管理帶來了麻煩.如何能解決這些問題呢,LVM是一個不錯的方法.
LVM,是Logical Volume Manager的縮寫,中文意思是邏輯卷管理,它是linux下對磁碟分區進行管理的一種機制,LVM是建立在磁碟分區和文件系統之間的一個邏輯層,管理員利用LVM可以在磁碟不用重新分區的情況下動態的調整分區的大小.如果系統新增了一塊硬碟,通過LVM就可以將新增的硬碟空間直接擴展到原來的磁碟分區上.

二、 LVM的使用術語
通過LVM技術,屏蔽了磁碟分區的底層差異,在邏輯上給文件系統提供了一個卷的概念,然後在這些卷上建立相應的文件系統,在認識LVM之前,先熟悉下LVM中幾個常用的術語,在LVM中主要涉及以下幾個概念.
 物理存儲設備(physical media):指系統的存儲設備文件,比如:/dev/sda、/dev/hdb等等.
 物理卷(physical volume):簡稱PV,是指硬碟分區或者從邏輯上看起來和硬碟分區類似的設備(比如RAID設備).
 卷組(Volume Group):簡稱VG,類似與非LVM系統中的物理硬碟,一個LVM卷組有一個或者多個物理卷組成.
 邏輯卷(logical volume):簡稱LV,類似與非LVM系統上的硬碟分區,LV建立在VG上,可以在LV上創建文件系統.
 PE(physical extent):PV中可以分配的最小存儲單元稱為PE,PE的大小是可指定的,默認為4M.


 LE(logical extent):LV中可以分配的最小存儲單元稱為LE,在同一個卷組中,LE的大小和PE是一樣的,且一一對應.
圖1清楚的說明了LVM各個組成部分之間的對應關係:

圖1 LVM磁碟組織結構圖

在圖1中:
 有兩塊物理硬碟組成了LVM的底層結構,這兩塊硬碟的大小、型號可以不同.
 PV可以看作是硬碟上的分區,因此,可以說物理硬碟A劃分了兩個分區,物理硬碟B劃分了3個分區.
 然後將前三個PV組成了一個卷組VG1,后兩個PV組成了一個卷組VG2.
 接著在卷組VG1上劃分了兩個邏輯卷LV1和LV2,在卷組VG2上劃分了一個獨立的邏輯卷LV3.
 最后,在邏輯卷LV1、LV2和LV3上創建文件系統,分別用來掛載/usr、/home和/var分區.

三、 安裝LVM工具
通過下面的命令確認LVM是否已經安裝:
[root@localhost ~]# rpm -qa|grep lvm
lvm2-2.02.16-3.el5
system-config-lvm-1.0.22-1.0.el5
如果有類似上面的輸出,就說明系統中已經安裝了LVM,如果沒有任何輸出,則說明系統中還沒有安裝LVM,可以從系統安裝光碟或者網路上找到對應的rpm包安裝即可,安裝方法這裡不在講述.
現在默認的linux發行版本內核一般都支持LVM,因此只要安裝好LVM工具,即可使用LVM提供的強大功能.

四、 LVM的創建與管理
LVM的創建需要經過以下幾個步驟:

1.創建物理分區
在使用LVM之前,需要劃分磁碟分區,也就是用fdisk命令劃分磁碟分區,劃分的方法在上個章節已經介紹過,稍微不同的是,在創建分區的時候,需要指定分區類型為linux LVM,對應的ID為8e(其實LVM也能識別linux默認的分區類型83),


這裡我們將所有分區類型都指定為8e,假定linux下新增了兩塊硬碟,分區后顯示如下:
[root@localhost ~]# fdisk -l /dev/sdb /dev/sdc

Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdb1 1 1044 8385898 5 Extended
/dev/sdb5 1 250 2008062 8e Linux LVM
/dev/sdb6 251 500 2008093 8e Linux LVM
/dev/sdb7 501 750 2008093 8e Linux LVM
/dev/sdb8 751 1044 2361523 8e Linux LVM

Disk /dev/sdc: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sdc1 1 1044 8385898 5 Extended
/dev/sdc5 1 499 4008154 8e Linux LVM
/dev/sdc6 500 1044 4377681 8e Linux LVM
由上面輸出可知,/dev/sdb硬碟劃分了一個擴展分區和四個邏輯分區,分區類型均為Linux LVM,/dev/sdc磁碟劃分了一個擴展分區和兩個邏輯分區,分區類型也都是Linux LVM.
這裡以兩塊硬碟舉例的主要目的是為了突出LVM可以跨磁碟操作的概念.也就是LVM可以操作多塊物理硬碟上的不同分區,通過LVM管理磁碟,屏蔽了底層物理設備的異構性.
注意,這裡僅僅是進行了分區操作,磁碟分區還沒有進行格式化.

2.創建物理卷(PV)
創建物理卷的命令是pvcreate,通過該命令可以將希望添加到卷組(VG)的所有磁碟分區或者整個磁碟創建為物理卷.使用格式為:
pvcreate 磁碟分區或整個磁碟


這裡將第一步中劃分的所有磁碟分區創建為物理卷,操作如下:
[root@localhost ~]# pvcreate /dev/sdb5 /dev/sdb6 /dev/sdb7 /dev/sdb8 /dev/sdc5 /dev/sdc6
Physical volume "/dev/sdb5" successfully created
Physical volume "/dev/sdb6" successfully created
Physical volume "/dev/sdb7" successfully created
Physical volume "/dev/sdb8" successfully created
Physical volume "/dev/sdc5" successfully created
Physical volume "/dev/sdc6" successfully created

3.創建卷組
創建卷組的命令是vgcreate,使用格式為:
vgcreate 卷組名 物理卷
卷組名:就是要創建的卷組的名稱.
物理卷:指定希望添加到此卷組的所有磁碟分區或者整個磁碟.
這裡我們創建兩個卷組myvg1和myvg2,同時兩個卷組都跨越了不同的磁碟,卷組myvg1由/dev/sdb磁碟的/dev/sdb5、/dev/sdb6和/dev/sdc磁碟的/dev/sdc5分區組成.同理,卷組myvg2由/dev/sdb磁碟的/dev/sdb7、/dev/sdb8和/dev/sdc磁碟的/dev/sdc6分區組成.操作如下:
[root@localhost ~]# vgcreate myvg1 /dev/sdb5 /dev/sdb6 /dev/sdc5
Volume group "myvg1" successfully created
[root@localhost ~]# vgcreate myvg2 /dev/sdb7 /dev/sdb8 /dev/sdc6
Volume group "myvg2" successfully created

4.激活卷組
卷組創建完畢后,可以通過vgchange命令激活卷組,而無需重啟系統.Vgchange使用格式如下:
vgchange -a y 卷組名 (激活卷組)
vgchange -a n 卷組名 (停用卷組)
這裡我們激活卷組myvg1和myvg2,使用如下命令:
[root@localhost ~]# vgchange -a y myvg1
0 logical volume(s) in volume group "myvg1" now active
[root@localhost ~]# vgchange -a y myvg2
0 logical volume(s) in volume group "myvg2" now active

5.顯示卷組、物理卷屬性信息
vgdisplay用於顯示創建的卷組信息,同理pvdisplay命令用於顯示物理卷組信息,使用格式為:
vgdisplay 卷組名
pvdisplay 物理卷名
要顯示卷組myvg1的信息,執行操作如下:
[root@localhost ~]# vgdisplay myvg1
--- Volume group ---
VG Name myvg1
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 7.65 GB
PE Size 4.00 MB
Total PE 1958
Alloc PE / Size 0 / 0
Free PE / Size 1958 / 7.65 GB
VG UUID H6RMci-9F2C-QlPw-Bnl2-07AP-J0h7-XPq4FQ
從輸出可以看出此卷組所有信息,例如卷組大小為7.65 GB,每個PE大小為4M,總共的PE數為1958.

6.創建邏輯卷
創建邏輯卷的命令是lvcreate,常用的使用格式為:
lvcreate [-L 邏輯卷大小| -l PE數 ] –n 邏輯卷名稱 所屬的卷組名
其中:
-L:後面接邏輯卷的大小,可以用K、M、G表示.例如100M、10G等
-l:用PE數來計算邏輯卷的大小.
這裡我們在卷組myvg1下創建兩個邏輯卷mylv11和mylv12,在卷組myvg2下創建一個卷組mylv2:
[root@localhost ~]# lvcreate -L 4G -n mylv11 myvg1
#在卷組myvg1中創建一個大小為4G的卷組mylv11
Logical volume "mylv11" created
[root@localhost ~]# vgdisplay myvg1|grep "Free PE"
#檢查卷組myvg1中可用的卷組空間


Free PE / Size 934 / 3.65 GB
[root@localhost ~]# lvcreate -l 934 -n mylv12 myvg1
#將卷組myvg1中剩餘的空間全部分給邏輯卷mylv12
Logical volume "mylv12" created
[root@localhost ~]# vgdisplay myvg1|grep "Free PE"
#檢查卷組myvg1中是否還有剩餘空間,從輸出可知,空間全部利用,沒有浪費.
Free PE / Size 0 / 0
[root@localhost ~]# vgdisplay myvg2|grep "Free PE"
#檢查卷組myvg2的可用空間
Free PE / Size 2134 / 8.34 GB
[root@localhost ~]# lvcreate -l 2134 -n mylv2 myvg2
#將卷組myvg2的所有空間分配給邏輯卷mylv2
Logical volume "mylv2" created

7.格式化邏輯卷,創建文件系統
文件系統是創建在邏輯卷上的,這裡假定使用linux默認的ext3文件系統,接下來的工作是用mkfs.ext3格式化文件系統:
[root@localhost ~]# mkfs.ext3 /dev/myvg1/mylv11
[root@localhost ~]# mkfs.ext3 /dev/myvg1/mylv12
[root@localhost ~]# mkfs.ext3 /dev/myvg2/mylv2
最后,建立掛載目錄,掛載這些邏輯卷即可:
[root@localhost ~]#mkdir /mylv11
[root@localhost ~]#mkdir /mylv12
[root@localhost ~]# mkdir /mylv2
[root@localhost ~]# mount /dev/myvg1/mylv11 /mylv11
[root@localhost ~]# mount /dev/myvg1/mylv12 /mylv12
[root@localhost ~]# mount /dev/myvg2/mylv2 /mylv2
[root@localhost ~]# df -h|grep mylv
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/myvg1-mylv11 4.0G 137M 3.7G 4% /mylv11
/dev/mapper/myvg1-mylv12 3.6G 72M 3.4G 3% /mylv12
/dev/mapper/myvg2-mylv2 8.3G 147M 7.7G 2% /mylv2
到這裡為止,新增的磁碟設備已經可以使用了,如果要開機自動掛載,編輯/etc/fstab文件,加上新增的三個邏輯分區即可.

8.添加新的物理卷到卷組
添加新的物理卷到卷組的命令為vgextend,使用格式為:
vgextend 卷組名 新加入的物理卷
緊接著上面的講解實例,假定系統增加了第四塊硬碟/dev/sdd,大小為4G,同時通過fdisk進行了磁碟分區,對應的分區為/dev/sdd5,現在要把新增的硬碟分區加入到卷組myvg2,操作如下:
[root@localhost ~]# vgdisplay myvg2|grep “Free PE” #檢查myvg2卷是否有空閑空間,由輸出可知,空間全部用完.
Free PE / Size 0 / 0
[root@localhost ~]# pvcreate /dev/sdd5 #先將/dev/sdd5轉換為物理卷
Physical volume "/dev/sdd5" successfully created
[root@localhost ~]# vgextend myvg2 /dev/sdd5 #將新增物理卷添加到卷組myvg2中
Volume group "myvg2" successfully extended
[root@localhost ~]# vgdisplay myvg2|grep "Free PE" #此時剩餘卷組空間還有4G,剛好是新增物理卷的大小
Free PE / Size 1023 / 4.00 GB

9.修改邏輯卷的大小
LVM最主要的功能就是能動態的調整分區的大小,其實也就是修改邏輯卷的大小,修改邏輯卷需要用到的命令有lvextend(擴展邏輯卷)、lvreduce(縮減邏輯卷)以及ext2resize(修改文件系統大小),下面分別進行介紹.
lvextend與lvreduce的使用格式類似,如下所示:
lvextend [-L ( size) –l ( PE數)] 邏輯卷名稱
lvreduce [-L (-size) –l (-PE數)] 邏輯卷名稱
-L:“ size”表示給邏輯卷空間增加指定的大小,“-size”表示給邏輯卷空間縮減指定的大小.size表示將邏輯卷增加(lvextend)或縮減(lvreduce)到指定的空間大小.例如“ 300”表示將邏輯卷空間增大300M,“-2G”表示將邏輯卷的空間縮減2G.


-l:與“-L”用法相同,不同的是“-l”選項用PE數來表示邏輯卷的大小.
ext2resize的使用格式如下:
ext2resize 設備文件或邏輯卷 空間大小
修改邏輯卷分為擴充邏輯卷大小和減小邏輯卷大小兩種情況,下面依次介紹.
(1)擴充邏輯卷空間
擴充邏輯卷大小的一般步驟為:
 利用擴展邏輯卷命令lvextend擴展邏輯卷空間
 卸載已經掛載的邏輯卷分區
 利用ext2resize指令修改文件系統大小以實現空間擴充
 掛載擴充后的邏輯卷分區
在上個小節中,我們給卷組myvg2增加了一個新的物理卷,現在要將新增的物理卷空間擴充到邏輯卷mylv2中,操作如下:
擴充邏輯卷mylv2的大小,執行以下命令:
[root@localhost ~]# lvextend -l 1023 /dev/myvg2/mylv2
Extending logical volume mylv2 to 12.33 GB
Logical volume mylv2 successfully resized
注意,“-l”選項後面的“ 1023”代表的是增加的PE數,這個值是在上個小節中通過命令“vgdisplay myvg2|grep "Free PE"”得到的,當然這裡也可以使用“-L 4G”來代替“-l 1023”.
接下來的工作是卸載/dev/myvg2/mylv2分區,為修改文件系統大小做準備.
[root@localhost ~]#umount /dev/myvg2/mylv2或者執行 umount /mylv2
修改文件系統大小的工具是ext2resize指令,這個指令可能不包含在某些linux發行版中,Redhat Linux就默認沒有這個命令,因此需要先安裝這個指令對應的rpm包,下載類似ext2resize-1.1.19-1.i386.rpm的rpm文件,安裝即可.
[root@localhost ~]# rpm -ivh ext2resize-1.1.19-1.i386.rpm
Preparing... ###########################[100%]
1:ext2resize ##########################[100%]


安裝完畢,系統就會出現一個ext2resize指令,利用這個指令修改文件系統的大小.
第三步,修改文件系統大小,執行如下命令:
[root@localhost ~]# ext2resize /dev/myvg2/mylv2
ext2resize v1.1.18 - 2001/03/18 for EXT2FS 0.5b
由於已經將擴展的分區加入到邏輯卷mylv2中,因此上面的操作其實就是刷新邏輯卷,使更改生效.
最后,掛載邏輯卷到文件系統即可,執行如下命令:
[root@localhost ~]# mount /dev/myvg2/mylv2 /mylv2
[root@localhost ~]# df -h |grep mylv2
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/myvg2-mylv2 13G 147M 12G 2% /mylv2
可以看到,邏輯卷/dev/myvg2/mylv2的空間已經增加到13G,動態擴展邏輯捲成功.
(2)減小邏輯卷的空間
減小邏輯卷的一般步驟為:
 卸載已經掛載的邏輯卷分區
 利用ext2resize指令修改文件系統大小以實現空間縮減
 利用減小邏輯卷命令lvreduce減小邏輯卷空間
 掛載縮減后的邏輯卷分區
假定我們要對上面的邏輯卷/dev/myvg2/mylv2縮減2G的空間,可以這麼操作.
卸載邏輯卷/dev/myvg2/mylv2分區:
umount /mylv2
然後用ext2resize指令縮減文件系統大小:
ext2resize /dev/myvg2/mylv2 11G
接著利用lvreduce指令縮減邏輯卷/dev/myvg2/mylv2到11G,執行此步驟主要目的是將縮減的空間從/dev/myvg2/mylv2釋放,從而可以供其它邏輯卷使用.
[root@localhost ~]# lvreduce -L 11G /dev/myvg2/mylv2 #縮減邏輯卷/dev/myvg2/mylv2到11G
WARNING: Reducing active logical volume to 11.00 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv2? [y/n]: y #這裡輸入y
Reducing logical volume mylv2 to 11.00 GB


Logical volume mylv2 successfully resized
[root@localhost ~]# ext2resize /dev/myvg2/mylv2 #將修改結果載入到文件系統
ext2resize v1.1.18 - 2001/03/18 for EXT2FS 0.5b
ext2resize: new size is same as current (2883584)
最后,重新掛載邏輯卷/dev/myvg2/mylv2
[root@localhost ~]# mount /dev/myvg2/mylv2 /mylv2 #掛載邏輯卷分區到/mylv2目錄
[root@localhost ~]# df -h|grep mylv2 #查看掛載情況,可以看到,邏輯卷分區已經縮減到11G
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/myvg2-mylv2 11G 147M 11G 2% /mylv2

10.如何刪除物理卷、卷組和邏輯卷
刪除物理卷的命令是pvremove,將物理卷從卷組移除的命令是vgreduce,刪除卷組的命令是vgremove,同理,刪除邏輯卷的命令是lvremove.
在刪除一個卷組之前需要了解卷組與邏輯卷之間的組成關係,例如要刪除卷組myvg1,需要知道的關係是:卷組myvg1有/dev/sdb5、/dev/sdb6和/dev/sdc5三個物理卷組成,然後在卷組myvg1下分了兩個邏輯卷mylv11和mylv12.
由此可知,刪除一個卷組的順序是:卸載邏輯卷分區-->刪除卷組上所有邏輯卷-->刪除卷組,刪除卷組myvg1的示例如下:
[root@localhost ~]# umount /dev/myvg1/mylv11 #卸載邏輯卷mylv11對應的分區
[root@localhost ~]# lvremove /dev/myvg1/mylv11 #刪除邏輯卷mylv11
Do you really want to remove active logical volume "mylv11"? [y/n]: y
Logical volume "mylv11" successfully removed
[root@localhost ~]# lvremove /dev/myvg1/mylv12 #由於沒有卸載邏輯卷mylv12對應的分區,刪除邏輯卷失敗
Can't remove open logical volume "mylv12"
[root@localhost ~]# umount /dev/myvg1/mylv12 #卸載邏輯卷mylv12對應的分區
[root@localhost ~]# lvremove /dev/myvg1/mylv12 #成功刪除邏輯卷mylv12


Do you really want to remove active logical volume "mylv12"? [y/n]: y
Logical volume "mylv12" successfully removed
[root@localhost ~]# vgreduce myvg1 /dev/sdb5 #這裡是從卷組myvg1中移除一個物理卷
Removed "/dev/sdb5" from volume group "myvg1"
[root@localhost ~]# pvremove /dev/sdb5 #這裡是刪除物理卷/dev/sdb5
Labels on physical volume "/dev/sdb5" successfully wiped
[root@localhost ~]# vgremove myvg1 #這裡是刪除卷組myvg1
Volume group "myvg1" successfully removed

本文出自 「技術成就夢想」 博客,請務必保留此出處http://ixdba.blog.51cto.com/2895551/562111


[火星人 ] 淺談Linux磁碟存儲管理續【邏輯卷管理(LVM)】已經有1011次圍觀

http://coctec.com/docs/linux/show-post-48262.html