LVM 邏輯卷管理

probe發表於2020-08-03

宣告 :本文有一大部分內容屬於參考別人部落格,一小部分為自己所寫


LVM是Linux環境中對磁碟分割槽進行管理的一種機制,是建立在硬碟和分割槽之上、檔案系統之下的一個邏輯層,可提高磁碟分割槽管理的靈活性。RHEL5預設安裝的分割槽格式就是LVM邏輯卷的格式,需要注意的是/boot分割槽不能基於LVM建立,必須獨立出來。


一.LVM原理

要想理解好LVM的原理,我們必須首先要掌握4個基本的邏輯卷概念。

1) PE  (Physical Extend)  物理擴充  , 也就是LVM的最小儲存單位,預設大小為4M;可以透過調整PE塊的數量來定義LV的容量。

2) PV  (Physical Volume)  物理卷  , 物理卷是LVM的最底層的元素,組成LVM的物理分割槽就是PV

3) VG  (Volume Group)  卷組  , 將各個獨立的PV組合起來,所形成的一個儲存空間稱為VG;VG的大小就是整個LVM的空間大小。

4) LV  (Logical Volume)  邏輯卷  , 最終可以被使用者格式化、掛載、儲存資料的操作物件就是LV;LV與分割槽相類似,只不過LV可以更加靈活的調整容量。

5) snapshot     快照   ,快照用於儲存原捲上有變化的資料。快照剛剛被建立時其內容與原卷是一模一樣的,只有在原卷中的資料發生變化時,快照才會將被改動的資料的原資料儲存起來。

我們知道在使用LVM對磁碟進行動態管理以後,我們是以邏輯卷的方式呈現給上層的服務的。所以我們所有的操作目的,其實就是去建立一個 LV(Logical Volume),邏輯卷就是用來取代我們之前的分割槽,我們透過對邏輯捲進行格式化,然後進行掛載操作就可以使用了。那麼LVM的工作原理是什麼呢?所謂無圖無真相,我們們下面透過圖來對邏輯卷的原理進行解釋

LVM 邏輯卷管理

1.將我們的物理硬碟格式化成PV(Physical Volume)

我們看到,這裡有兩塊硬碟,一塊是sda,另一塊是sdb,在LVM磁碟管理裡,我首先要將這兩塊硬碟格式化為我們的 PV(Physical Volume),也就是我們的物理卷,其實格式化物理卷的過程中LVM是將底層的硬碟劃分為了一個一個的 PE(Physical Extend), 我們的LVM磁碟管理中PE的預設大小是4M大小,其實PE就是我們邏輯卷管理的最基本單位。比如說我有一個400M的硬碟,那麼在將其格式化成PV的時候,其實際就是將這塊物理硬碟劃分成了100個的PE,因為PE預設的大小就是4M。這個就是我們的第一步操作。

2.建立一個VG(Volume Group)

在將硬碟格式化成PV以後,我們第二步操作就是建立一個卷組,也就是 VG(Volume Group),卷組在這裡我們可以將其抽象化成一個空間池,VG的作用就是用來裝PE的,我們可以把一個或者多個PV加到VG當中,因為在第一步操作時就已經將該硬碟劃分成了多個PE,所以將多個PV加到VG裡面後,VG裡面就存放了許許多多來自不同PV中的PE,我們透過上面的圖片就可以看到,我們格式化了兩塊硬碟,每個硬碟分別格式化成了3個PE,然後將兩塊硬碟的PE都加到了我們的VG當中,那麼我們的VG當中就包含了6個PE,這6個PE就是兩個硬碟的PE之和。通常建立一個卷組的時候我們會為其取一個名字,也就是該VG的名字。

3.基於VG建立我們最後要使用的LV(Logical Volume)

注意】PV以及VG建立好以後我們是不能夠直接使用的,因為PV、VG是我們邏輯卷底層的東西,我們其實最後使用的是在VG基礎上建立的 LV(Logical Volume),所以第三步操作就是基於VG來建立我們最終要使用的LV。

當我們建立好我們的VG以後,這個時候我們建立LV其實就是從VG中拿出我們指定數量的PE,還是拿上圖來說,我們看到我們此時的VG裡面已經擁有了6個PE,這時候我們建立了我們的第一個邏輯卷,它的大小是4個PE的大小,也就是16M(因為一個PE的預設大小是4M),而這4個PE有三個是來自於第一塊硬碟,而另外一個PE則是來自第二塊硬碟。當我們建立第二個邏輯卷時,它的大小就最多隻有兩個PE的大小了,因為其中的4個PE已經分配給了我們的第一個邏輯卷。

所以建立邏輯卷其實就是我們從VG中拿出我們指定數量的PE,VG中的PE可以來自不同的PV,我們可以建立的邏輯卷的大小取決於VG當中PE存在的數量,並且我們建立的邏輯卷其大小一定是PE的整數倍(即邏輯卷的大小一定要是4M的整數倍)。

4.將我們建立好的LV進行檔案系統的格式化,然後掛載使用

在建立好LV以後,這個時候我們就能夠對其進行檔案系統的格式化了,我們最終使用的就是我們剛建立好的LV,其就相當於傳統的檔案管理的分割槽,我們首先要對其進行檔案系統的格式化操作,然後透過mount命令對其進行掛載,這個時候我們就能夠像使用平常的分割槽一樣來使用我們的邏輯捲了。

我們在建立好LV以後,我們會在 /dev 目錄下看到我們的LV資訊,例如 /dev/vgname/lvname, 我們每建立一個VG,其會在/dev目錄下建立一個以該VG名字命名的資料夾,在該VG的基礎上建立好LV以後,我們會在這個VG目錄下多出一個以LV名字命名的邏輯卷。

下面我們來對整個LVM的工作原理進行一個總結:

(1) 物理磁碟被格式化為PV,空間被劃分為一個個的PE

(2) 不同的PV加入到同一個VG中,不同PV的PE全部進入到了VG的PE池內

(3) LV基於PE建立,大小為PE的整數倍,組成LV的PE可能來自不同的物理磁碟

(4) LV直接可以格式化後掛載使用

(5) LV的擴充縮減實際上就是增加或減少組成該LV的PE數量,其過程不會丟失原始資料

LVM 邏輯卷管理

我們看到,我們這裡如果要對LV進行擴充,直接加進來一塊sdc硬碟,然後將其格式化成PE,然後將該PV加入到了VG當中,這個時候我們就可以透過增加LV中PE的數量來動態的對LV進行擴充了,只要我們的LV的大小不要超過我們VG空餘空間的大小就行


二、建立LVM邏輯卷

LVM 邏輯卷管理

熟悉了LVM的工作原理,首先是要將我們的物理硬碟格式化成PV,然後將多個PV加入到建立好的VG中,最後透過VG建立我們的LV。


三、拉伸一個邏輯卷

我們知道相比於傳統磁碟管理方式的各種問題,使用LVM邏輯捲來管理我們的磁碟,我們可以對其進行動態的管理。在傳統的磁碟管理方式中,我們如果出現分割槽大小不足的情況下,我們此時只能透過加入一塊物理硬碟,然後對其進行分割槽,因為加入的硬碟作為獨立的檔案系統存在,所以對原有分割槽並沒有影響,如果此時我們需要擴大分割槽,就只能先將之前的分割槽先解除安裝掉,然後將所有的資訊轉移到新的分割槽下,最後再將新的分割槽掛載上去,如果是在生產環境下,這樣是非常麻煩的。正因為如此,我們才出現了LVM的磁碟管理方式,可以動態的對我們的磁碟進行管理。

我們首先來看下動態拉伸一個邏輯卷的示意圖:

LVM 邏輯卷管理

我們從上圖可以看到,我們在對邏輯捲進行拉伸時,其實質就是向邏輯卷中增加PE的數量,而PE的數量是由VG中剩餘PE的數量所決定的。

注意: 邏輯卷的拉伸操作可以線上進行,不需要解除安裝掉我們的邏輯卷

這樣的好處就是當我們的邏輯卷的大小不夠用時,我們不需要對其進行解除安裝,就可以動態的增加我們的邏輯卷的大小,並不會對我們的系統產生任何影響。例如如果我們的伺服器上執行著一個重要的服務或者資料庫,並要求我們7*24小時不間斷保持線上,那麼這樣的動態增加邏輯卷的大小就非常的有必要了。


四、邏輯卷常用命令

命令總結:

PV:

pvcreate,pvs,pvdisplay,pvremove,pvmove,pvscan


VG:

vgcreate,vgs,vgdisplay,vgremove,vgscan,vgextend,vgreduce


LV:

lvcreate,lvs,lvdisplay,lvremove,lvextend,lvreduce,lvresize,lvscan


五、操作案例

1. 先檢視系統當前的分割槽情況

[root@shell ~]# 

[root@shell ~]# lsblk    

[root@shell ~]# 

[root@shell ~]# fdisk  -l

[root@shell ~]# 

[root@shell ~]# pvdisplay 


[root@shell ~]# 

[root@shell ~]# vgdisplay 

[root@shell ~]# 

[root@shell ~]# lvdisplay 



2. 關機並給該虛擬機器新增兩塊30G的磁碟


3. 開機檢視新新增的磁碟是否被識別

[root@shell ~]# 

[root@shell ~]# lsblk 

[root@shell ~]# 

[root@shell ~]# fdisk  -l


4. 首先建立4個磁碟分割槽,且分割槽型別要改為8e

[root@shell ~]# 

[root@shell ~]# fdisk  /dev/sdb

Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xe2dba289.
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-62914559, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-62914559, default 62914559): +10G
Partition 1 of type Linux and of size 10 GiB is set
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): p
Disk /dev/sdb: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xe2dba289
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   8e  Linux LVM
Command (m for help): 
Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (2-4, default 2): 2
First sector (20973568-62914559, default 20973568): 
Using default value 20973568
Last sector, +sectors or +size{K,M,G} (20973568-62914559, default 62914559): +10G
Partition 2 of type Linux and of size 10 GiB is set
Command (m for help): t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): 
Command (m for help): p
Disk /dev/sdb: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xe2dba289
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   8e  Linux LVM
/dev/sdb2        20973568    41945087    10485760   8e  Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

[root@shell ~]# 

[root@shell ~]# partprobe  /dev/sdb

[root@shell ~]# 

[root@shell ~]# lsblk 

[root@shell ~]# 

[root@shell ~]# fdisk  -l

[root@shell ~]# 

[root@shell ~]# fdisk  /dev/sdc

Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x2b464b1e.
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-62914559, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-62914559, default 62914559): +10G
Partition 1 of type Linux and of size 10 GiB is set
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): p
Disk /dev/sdc: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x2b464b1e
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    20973567    10485760   8e  Linux LVM
Command (m for help): 
Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (2-4, default 2): 2
First sector (20973568-62914559, default 20973568): 
Using default value 20973568
Last sector, +sectors or +size{K,M,G} (20973568-62914559, default 62914559): +10G
Partition 2 of type Linux and of size 10 GiB is set
Command (m for help): t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): p
Disk /dev/sdc: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x2b464b1e
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    20973567    10485760   8e  Linux LVM
/dev/sdc2        20973568    41945087    10485760   8e  Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

[root@shell ~]# 

[root@shell ~]# partprobe  /dev/sdc

[root@shell ~]# 

[root@shell ~]# lsblk 

[root@shell ~]# 

[root@shell ~]# fdisk  -l

[root@shell ~]# 

[root@shell ~]# ls  -l  /dev/sdb*  /dev/sdc*


5. 將上面劃分出來的4個分割槽建立成4個PV

[root@shell ~]# 

[root@shell ~]# pvcreate  /dev/sdb{1,2}

[root@shell ~]# 

[root@shell ~]# pvcreate  /dev/sdc{1,2}

[root@shell ~]# 

[root@shell ~]# pvs

[root@shell ~]# 

[root@shell ~]# pvscan 

[root@shell ~]# 

[root@shell ~]# pvdisplay         #檢視pv的詳細資訊


6. 建立vg

[root@shell ~]# 

[root@shell ~]# vgcreate  vg1  /dev/sdb{1,2}

  Volume group "vg1" successfully created

[root@shell ~]# 

[root@shell ~]# vgcreate  vg2  /dev/sdc{1,2}

  Volume group "vg2" successfully created

[root@shell ~]# 

[root@shell ~]# vgs

[root@shell ~]# 

[root@shell ~]# vgscan 

[root@shell ~]# 

[root@shell ~]# vgdisplay 


7.建立lv

[root@shell ~]# 

[root@shell ~]# vgs           #檢視當前可用的vg資訊

由上圖可以看出,剛剛建立了個兩個VG,容量分別為20G和20G,下面我們就在這兩個VG上分別建立lv

[root@shell ~]# 

[root@shell ~]# lvcreate  -L  5G  -n  lv01  vg1              #在卷組1中建立一個名為“lv01”的邏輯卷

    Logical volume "lv01" created. 

[root@shell ~]# 

[root@shell ~]# lvs        #簡單檢視一下邏輯卷

[root@shell ~]# 

[root@shell ~]# lvscan 

[root@shell ~]# 

[root@shell ~]# lvdisplay 

[root@shell ~]# 

[root@shell ~]# lvcreate  -L  7G  -n  lv02  vg2              #在卷組2中建立一個名為“lv02”的邏輯卷

  Logical volume "lv02" created.

[root@shell ~]# 

[root@shell ~]# lvs

[root@shell ~]# 

[root@shell ~]# lvscan 

[root@shell ~]# 

[root@shell ~]# lvdisplay 


8.lv的掛載

在對LV進行格式化、掛載之前,先來說明下lv的訪問路徑問題。

我們 可以使用兩種路徑來訪問lv:

(1) /dev/VG_NAME/LV_NAME

如:

/dev/vg1/lv01

/dev/vg2/lv02 

  (2) /dev/mapper/VG_NAME-LV_NAME

如:

/dev/mapper/vg1-lv01 

/dev/mapper/vg2-lv02


以上兩路徑均為符號連結,指向的檔案為/dev/dm-#,如下圖所示:

[root@shell ~]# 

[root@shell ~]# ll /dev/vg1/lv01

lrwxrwxrwx. 1 root root 7 Aug  5 00:40 /dev/vg1/lv01 -> ../dm-2

[root@shell ~]#

[root@shell ~]# ll /dev/mapper/vg1-lv01 

lrwxrwxrwx. 1 root root 7 Aug  5 00:40 /dev/mapper/vg1-lv01 -> ../dm-2 

[root@shell ~]#

[root@shell ~]# mkfs.xfs  /dev/vg1/lv01           #格式化邏輯卷lv01

[root@shell ~]# 

[root@shell ~]# mkfs.xfs  /dev/vg2/lv02          #格式化邏輯卷lv02

[root@shell ~]# 

[root@shell ~]# mkdir  /data01

[root@shell ~]# mkdir  /data02

[root@shell ~]# 

[root@shell ~]# mount  /dev/vg1/lv01  /data01             #將邏輯卷lv01掛載到/data01目錄

[root@shell ~]# mount  /dev/vg2/lv02  /data02             #將邏輯卷lv02掛載到/data02目錄 

[root@shell ~]# 

[root@shell ~]# df  -hT             #檢視磁碟分割槽掛載情況

[root@shell ~]# 

[root@shell ~]# vi  /etc/fstab          #設定磁碟分割槽實現開機自動掛載

#在配置檔案最末尾增加需要自動掛載的磁碟分割槽即可

/dev/vg1/lv01 /data01 xfs    defaults 0 0

/dev/vg2/lv02         /data02                    xfs       defaults        0 0

[root@shell ~]# 

[root@shell ~]# cat  /etc/fstab         #檢視寫入的內容


9.邏輯卷的擴充套件

擴充套件前需要思考的問題:

1)先確定擴充套件的目標大小,並確保對應的卷組中有足夠的空間;

2)擴充套件物理邊界,使用lvextend命令;

3)擴充套件邏輯邊界,使用resize2fs命令


操作案例:

將邏輯卷lv01擴充套件到8G

[root@shell ~]# 

[root@shell ~]# lvextend  -L  8G  /dev/vg1/lv01

[root@shell ~]# 

[root@shell ~]# lvs  /dev/vg1/lv01 

引數說明:

-L  [+]8G:指定擴充套件的容量    

如果帶+號的話,表示擴充套件的容量是在原來的基礎上加上8G的容量;

如果不帶+號的話,表示直接擴充套件容量到8G

-l  [+] #:指定擴充套件的容量

如果帶+號,表示擴充套件的容量是在原來的基礎上加上#個PE的容量;

如果不帶+號,表示直接擴充套件到#個PE的容量


[root@shell ~]#

[root@shell ~]# df  -hT          #檢視檔案系統的掛載情況

由上圖得知,在執行完邏輯卷擴容的操作以後,發現lv01的檔案系統空間並沒有增加,依然是擴容之前的5G,這是為什麼呢?難道說之前的擴容沒有成功嘛?

原因是執行完擴容操作後,還缺少以下一個操作:

[root@shell ~]# 

[root@shell ~]# xfs_growfs  /dev/vg1/lv01        #調整邏輯卷分割槽 /dev/vg1/lv01 的大小

[root@shell ~]# 

[root@shell ~]# df  -hT             #再次檢視,發現果然擴容成功了


特別注意的是:

resize2fs       命令         針對的是ext2、ext3、ext4檔案系統

ext2/ext3/ext4檔案系統的調整命令是resize2fs (增大和減小都支援)

xfs_growfs  命令          針對的是xfs檔案系統

xfs檔案系統的調整命令是xfs_growfs (只支援增大)

就是說:xfs檔案系統只支援增大分割槽空間的情況,不支援減小的情況(切記!!)

如果硬要減小的話,只能在減小後將邏輯分割槽重新透過mkfs.xfs命令重新格式化才能掛載上,這樣的話這個邏輯分割槽上原來的資料就丟失了。如果有重要檔案,那就歇菜嘍~~~


[root@shell ~]# 

[root@shell ~]# lvextend  -L  +11G  /dev/vg1/lv01       #將邏輯卷lv01在原來8G大的基礎上,再增加11G,即擴容到19G

[root@shell ~]# lvs  /dev/vg1/lv01 

[root@shell ~]# 

[root@shell ~]# df  -hT

[root@shell ~]# 

[root@shell ~]# xfs_growfs   /dev/vg1/lv01        #執行調整

[root@shell ~]# 

[root@shell ~]# df  -hT


上面的例項中是在VG中還有剩餘空間的情況下進行的LV擴充套件,那麼如果VG空間已經全部用完,這時再想增加擴充套件邏輯卷應該將新的PV加入到VG中以獲得更多的空間

[root@shell ~]# 

[root@shell ~]# vgs       #由圖可知,所剩VG空間已經不足1024M,急需擴容

 先執行關機,給系統新增1塊10G大小的磁碟

開機,檢視新增加的磁碟是否被識別

[root@shell ~]# 

[root@shell ~]# lsblk

[root@shell ~]# 

[root@shell ~]# fdisk  -l

[root@shell ~]# 

[root@shell ~]# fdisk  /dev/sdd          #建立新分割槽

Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xc7cfb7dd.
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +9G
Partition 1 of type Linux and of size 9 GiB is set
Command (m for help): p
Disk /dev/sdd: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xc7cfb7dd
   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1            2048    18876415     9437184   83  Linux
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

[root@shell ~]# 

[root@shell ~]# lsblk 

[root@shell ~]# 

[root@shell ~]# fdisk  -l

[root@shell ~]# 

[root@shell ~]# pvcreate   /dev/sdd1

[root@shell ~]# pvs  /dev/sdd1

[root@shell ~]# 

[root@shell ~]# vgextend  vg1  /dev/sdd1        #將pv“ /dev/sdd1”加入到vg “vg1”中,實現對vg1的擴容

[root@shell ~]# 

[root@shell ~]# vgs

這樣就可以再對LV進行擴充套件了……


10.邏輯卷的縮減(減小)

縮減前需要思考的問題:

1)先確定縮減後的目標大小,並確保目標邏輯卷中有足夠的空間可用;

2)解除安裝邏輯卷,並要執行強制檢測,使用e2fsck -f命令;

3)縮減邏輯邊界,使用resize2fs命令;

4)縮減物理邊界,使用lvreduce命令


注意:

xfs型別的邏輯卷不支援縮減


接下來演示使用ext4型別的lvm來演示邏輯卷的縮減:



11.卷的移除

1)移除邏輯卷

[root@shell ~]# 

[root@shell ~]# umount  /dev/vg1/lv01         #先解除安裝邏輯卷

[root@shell ~]# lvremove  /dev/vg1/lv01       #移除邏輯卷

[root@shell ~]# lvs

[root@shell ~]# vgs

  2)移除卷組

[root@shell ~]# 

[root@shell ~]# vgremove  vg1         #移除卷組

[root@shell ~]# vgs

[root@shell ~]# pvs

  3)移除物理卷

[root@shell ~]# 

[root@shell ~]# pvremove   /dev/sd{b1,b2,d1}          #一條命令移除3個物理卷

[root@shell ~]# pvs

上面的例項中我們將擁有3個PV的VG整個移除,如果我們只想移除VG中的個別PV可以進行如下操作:

[root@shell ~]# 

[root@shell ~]# vgreduce   vg2    /dev/sdc2        #從vg2中移除1個pv“/dev/sdc2” 

[root@shell ~]# vgs

[root@shell ~]# pvs

再來看一種情況,如下圖,卷組vg2中擁有一個邏輯卷lv02,現在要求在不對lv02進行任何操作的情況下移動物理卷/dev/sdc1

[root@shell ~]# 

[root@shell ~]# vgs

[root@shell ~]# lvs

我們先來直接移除/dev/sdc1:

[root@shell ~]# 

[root@shell ~]# vgreduce  vg2  /dev/sdc1           #從卷組“vg2”中移除pv“/dev/sdc1”

結果提示此PV正在使用,此時我們來看一下PV的資訊:

[root@shell ~]# 

[root@shell ~]# pvdisplay   /dev/sdc1

由於/dev/sdc1有被佔用的PE,如果想要移除此PV,需要先將PE塊的空間移動到其它的PV上:

[root@shell ~]# 

[root@shell ~]# vgextend  vg2  /dev/sdc2       #將物理卷/dev/sdc2加入到卷組vg2中

[root@shell ~]# pvs

[root@shell ~]# 

[root@shell ~]# pvmove  /dev/sdc1  /dev/sdc2         #將/dev/sdc1上的PE塊移動到/dev/sdc2上

再來移除/dev/sdc1:

[root@shell ~]# 

[root@shell ~]# vgreduce  vg2  /dev/sdc1        #從卷組“vg2”中移除pv“/dev/sdc1”

[root@shell ~]# pvremove  /dev/sdc1            #移除物理卷

[root@shell ~]# pvs

12.建立卷快照

原理:系統快照(snapshot)是 lvm的另外一種重要的功能,快照就是將當時的資料記錄下來,就好像照相記錄一樣,以後資料有任何改動,原資料會被移動到快照區,沒有被改變的區域則由快照區與檔案系統共享。

由於快照區和原本的 LV共享很多 PE,所以快照區與被快照的區域必須在同一個 VG上


建立快照與建立邏輯卷類似,使用-s選項,後面指明是對哪個邏輯卷做操作即可。

操作案例:

以上面建立的lv02為例進行演示

[root@shell ~]# 

[root@shell ~]# lvs  |  grep  lv02

1)掛載lv

[root@shell ~]# 

[root@shell ~]# mount  /dev/vg2/lv02  /data02

[root@shell ~]# df  -h

[root@shell ~]# 

[root@shell ~]# cd  /data02       #切換到該目錄

[root@shell data02]# touch  {1,2,3}          #建立3個檔案

[root@shell data02]# ls

1  2  3

[root@shell data02]#

2)為  /dev/vg2/lv02 建立快照

[root@shell data02]# 

[root@shell data02]# lvcreate  -L  1G  -s  -n  lv02_snap01  /dev/vg2/lv02          #為邏輯卷“ /dev/vg2/lv02 ”建立一個大小為1G的名叫 lv02_snap01 的快照

[root@shell data02]# lvs

[root@shell data02]# lvscan 

[root@shell data02]# 

[root@shell data02]# mount  /dev/vg2/lv02_snap01  /lv_snap  -onouuid,ro       #將卷快照以只讀的方式掛載到   /lv_snap

[root@shell data02]# 

注意:

如果快照源邏輯卷使用的是xfs 的檔案系統,掛載的時候需要加入 -onouuid,ro  選項;

且建立快照的時候不能指定-p r  選項,快照不需要格式化

[root@shell lv_snap]# 

[root@shell lv_snap]# diff /data02   /lv_snap         #經比較發現兩個檔案一摸一樣

[root@shell ~]# ls /data02

1  2  3

[root@shell ~]# 

[root@shell ~]# ls /lv_snap

1  2  3

[root@shell ~]# 























 




 
 
 
 


 
 











 









 





 











  


 



 


 



















LVM 邏輯卷管理

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69980869/viewspace-2708974/,如需轉載,請註明出處,否則將追究法律責任。

相關文章