歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux的邏輯卷管理(LVM)

Linux的邏輯卷管理(LVM)

日期:2017/3/3 16:22:20   编辑:關於Linux

一、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

Copyright © Linux教程網 All Rights Reserved