一、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.
圖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),
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 磁碟分區或整個磁碟
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中可用的卷組空間
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.
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
本文出自 「技術成就夢想」 博客,請務必保留此出處http://ixdba.blog.51cto.com/2895551/562111
[火星人 ] 淺談Linux磁碟存儲管理續【邏輯卷管理(LVM)】已經有1011次圍觀