linux中什麼是lvm

2022-02-24 16:00:27

在linux中,LVM全稱「Logical Volume Manager」,中文意思為「邏輯卷管理」,是Linux環境下對磁碟分割區進行管理的一種機制;LVM是建立在硬碟和分割區之上的一個邏輯層,可用來提高磁碟分割區管理的靈活性。

本教學操作環境:linux5.9.8系統、Dell G3電腦。

什麼是LVM

LVM(Logical Volume Manager),即邏輯卷管理,是Linux環境下對磁碟分割區進行管理的一種機制,LVM是建立在硬碟和分割區之上的一個邏輯層,來提高磁碟分割區管理的靈活性。通過LVM系統管理員可以輕鬆管理磁碟分割區,如:將若干個磁碟分割區連線為一個整塊的卷組(volume group),形成一個儲存池。管理員可以在卷組上隨意建立邏輯卷組(logical volumes),並進一步在邏輯卷組上建立檔案系統。管理員通過LVM可以方便的調整儲存卷組的大小,並且可以對磁碟儲存按照組的方式進行命名、管理和分配。當系統新增了新的磁碟,通過LVM管理員就不必將磁碟的檔案移動到新的磁碟上以充分利用新的儲存空間,而是直接擴充套件檔案系統跨越磁碟即可。

一般來說,物理磁碟或分割區之間是分隔的,資料無法跨盤或分割區,而各磁碟或分割區的大小固定,重新調整比較麻煩。LVM可以將這些底層的物理磁碟或分割區整合起來,抽象成容量資源池,以劃分成邏輯卷的方式供上層使用,其最主要的功能即是可以在無需關機無需重新格式化(準確地說,原來的部分無需格式化,只格式化新增的部分)的情況下彈性調整邏輯卷的大小。

LVM的實現過程如下圖:

1.png

LVM名詞解釋

PV(physical volume):物理卷在邏輯卷管理系統最底層,可為整個物理硬碟或實際物理硬碟上的分割區。它只是在物理分割區中劃出了一個特殊的區域,用於記載與LVM相關的管理引數。

VG(volume group):卷組建立在物理捲上,一卷組中至少要包括一物理卷,卷組建立後可動態的新增捲到卷組中,一個邏輯卷管理系統工程中可有多個卷組。

LV(logical volume):邏輯卷建立在卷組基礎上,卷組中未分配空間可用於建立新的邏輯卷,邏輯卷建立後可以動態擴充套件和縮小空間。

PE(physical extent):物理區域是物理卷中可用於分配的最小儲存單元,物理區域大小在建立卷組時指定,一旦確定不能更改,同一卷組所有物理卷的物理區域大小需一致,新的pv加入到vg後,pe的大小自動更改為vg中定義的pe大小。

LE(logical extent):邏輯區域是邏輯卷中可用於分配的最小儲存單元,邏輯區域的大小取決於邏輯卷所在卷組中的物理區域的大小。由於受核心限制的原因,一個邏輯卷(Logic Volume)最多隻能包含65536個PE(Physical Extent),所以一個PE的大小就決定了邏輯卷的最大容量,4 MB(預設) 的PE決定了單個邏輯卷最大容量為 256 GB,若希望使用大於256G的邏輯卷,則建立卷組時需要指定更大的PE。在Red Hat Enterprise Linux AS 4中PE大小範圍為8 KB 到 16GB,並且必須總是 2 的倍數。

LVM的寫入模式

LVM有兩種寫入模式:線性模式和條帶模式。

  • 線性模式即寫完一個裝置後再寫另一個裝置

  • 條帶模式就有點類似於RAID0,即資料是被分散寫入到LVM各成員裝置上的。

    因為條帶模式的資料不具有安全性,且LVM並不強調讀寫效能,故LVM預設為線性模式,這樣即使一個裝置壞了,其它裝置上的資料還在。

LVM的工作原理

LVM在每個物理卷頭部都維護了一個metadata,每個metadata中都包含了整個VG(volume group:卷組)的資訊,包括每個VG的佈局設定,PV(physical volume:物理卷)的編號,LV(logical volume:邏輯卷)的編號,以及每個PE(physical extends:物理擴充套件單元)到LE(logical extends:物理擴充套件單元)的對映關係。同一個VG中的每個PV頭部的資訊都是相同的,這樣有利於故障時進行資料恢復。

LVM對上層檔案系統提供LV層,隱藏了操作細節。對檔案系統而言,對LV的操作與原先對partition的操作沒有差別。當對LV進行寫入操作的時候,LVM定位相應的LE,通過PV頭部的對映表將資料寫入到相應的PE上。LVM最大的特點就是可以對磁碟進行動態管理。因為邏輯卷的大小是可以動態調整的,而且不會丟失現有的資料。我們如果新增加了硬碟,其也不會改變現有上層的邏輯卷。關鍵在於PE和LE之間建立對映關係,不同的對映規則決定了不同的LVM儲存模型。LVM支援多個PV 的stripe和mirror。

LVM的優缺點

優點:

  • 檔案系統可以跨多個磁碟,因此檔案系統大小不會受物理磁碟的限制。

  • 可以在系統執行的狀態下動態的擴充套件檔案系統的大小。

  • 可以增加新的磁碟到LVM的儲存池中。

  • 可以以映象的方式冗餘重要的資料到多個物理磁碟。

  • 可以方便的匯出整個卷組到另外一臺機器。

缺點:

  • 在從卷組中移除一個磁碟的時候必須使用reducevg命令(這個命令要求root許可權,並且不允許在快照卷組中使用)。

  • 當卷組中的一個磁碟損壞時,整個卷組都會受到影響。

  • 因為加入了額外的操作,存貯效能受到影響。

建立PV/VG/LV的方法

1、將各物理磁碟或分割區的系統型別設為Linux LVM,其system ID為8e,通過fdisk工具中的t命令設定

[root@localhost ~]# fdisk /dev/sdb 
...
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): +5G
...
Command (m for help): t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 8e  # 指定system id為8e
Changed type of partition 'Linux' to 'Linux LVM'
...
Command (m for help): p
...
/dev/sdb1            2048    20973567    10485760   8e  Linux LVM
/dev/sdb2        20973568    31459327     5242880   8e  Linux LVM
Command (m for help): w
...

2、將各物理磁碟或分割區初始化為PV(physical volume,物理卷)

這一階段可使用的命令為pvcreate、pvremove、pvscan、pvdisplay(pvs)

1)pvcreate:建立物理卷

用法:pvcreate [option] DEVICE

選項:

  • -f:強制建立邏輯卷,不需使用者確認

  • -u:指定裝置的UUID

  • -y:所有問題都回答yes

pvcreate /dev/sdb1 /dev/sdb2

2)pvscan:掃描當前系統上的所有物理卷

用法:pvscan [option]

選項:

  • -e:僅顯示屬於輸出卷組的物理卷

  • -n:僅顯示不屬於任何卷組的物理卷

  • -u:顯示UUID

3)pvdisplay:顯示物理卷的屬性

用法:pvdisplay [PV_DEVICE]

4)pvremove:將物理卷資訊刪除,使其不再被視為一個物理卷

用法:pvremove [option] PV_DEVICE

選項:

  • -f:強制刪除

  • -y:所有問題都回答yes

pvremove /dev/sdb1

5)pv建立和刪除例子

[root@localhost ~]# pvcreate /dev/sdb{1,2}  # 將兩個分割區初始化為物理卷
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
[root@localhost ~]# pvscan 
  PV /dev/sdb2                      lvm2 [5.00 GiB]
  PV /dev/sdb1                      lvm2 [10.00 GiB]
  Total: 2 [15.00 GiB] / in use: 0 [0   ] / in no VG: 2 [15.00 GiB]
[root@localhost ~]# pvdisplay /dev/sdb1   # 顯示物理卷sdb1的詳細資訊
  "/dev/sdb1" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   # 由於PE是在VG階段才劃分的,所以此處看到的都是0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               GrP9Gi-ubau-UAcb-za3B-vSc3-er2Q-MVt9OO
   
[root@localhost ~]# pvremove /dev/sdb2   # 刪除sdb2的物理卷資訊
  Labels on physical volume "/dev/sdb2" successfully wiped.
[root@localhost ~]# pvscan     # 可以看到PV列表中已無sdb2
  PV /dev/sdb1                      lvm2 [10.00 GiB]
  Total: 1 [10.00 GiB] / in use: 0 [0   ] / in no VG: 1 [10.00 GiB]
[root@localhost ~]# pvcreate /dev/sdb2 
  Physical volume "/dev/sdb2" successfully created.

3、建立VG(volume group,卷組)。

卷組將多個物理卷整合起來(遮蔽了底層細節),並劃分PE(physical extend)

PE是物理卷中的最小儲存單元,有點類似於檔案系統中的block,PE大小可指定,預設為4M。這一階段用到的命令有vgcreate、vgscan、vgdisplay、vgextend、vgreduce

1)vgcreate:建立卷組

用法:vgcreate [option] VG_NAME PV_DEVICE

選項:

  • -s:卷組中的物理卷的PE大小,預設為4M

  • -l:卷組上允許建立的最大邏輯卷數

  • -p:卷級中允許新增的最大物理卷數

vgcreate -s 8M myvg /dev/sdb1 /dev/sdb2

2)vgscan:查詢系統中存在的LVM卷組,並顯示找到的卷組列表

3)vgdisplay:顯示卷組屬性

用法:vgdisplay [option] [VG_NAME]

選項:

  • -A:僅顯示活動卷組的資訊

  • -s:使用短格式輸出資訊

4)vgextend:動態擴充套件LVM卷組,它通過向卷組中新增物理捲來增加捲組的容量

用法:vgextend VG_NAME PV_DEVICE

vgextend myvg /dev/sdb3

5)vgreduce:通過刪除LVM卷組中的物理捲來減少卷組容量,不能刪除LVM卷組中剩餘的最後一個物理卷

用法:vgreduce VG_NAME PV_DEVICE

6)vgremove:刪除卷組,其上的邏輯卷必須處於離線狀態

用法:vgremove [-f] VG_NAME

  • -f:強制刪除

7)vgchange:常用來設定卷組的活動狀態

用法:vgchange -a n/y VG_NAME

  • -a n為休眠狀態,休眠之前要先確保其上的邏輯卷都離線;

  • -a y為活動狀態

8)vg建立例子

[root@localhost ~]# vgcreate -s 8M myvg /dev/sdb{1,2}
  Volume group "myvg" successfully created
[root@localhost ~]# vgscan
  Reading volume groups from cache.
  Found volume group "myvg" using metadata type lvm2
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               myvg
  System ID             
  Format                lvm2
  Metadata Areas        2
  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                2
  Act PV                2
  VG Size               14.98 GiB
  PE Size               8.00 MiB
  Total PE              1918
  Alloc PE / Size       0 / 0   
  Free  PE / Size       1918 / 14.98 GiB
  VG UUID               aM3RND-aUbQ-7RjC-dCci-JiS4-Oj2Z-wv9poA

4、在卷組上建立LV(logical volume,邏輯卷)

為了便於管理,邏輯卷對應的裝置檔案儲存在卷組目錄下,為/dev/VG_NAME/LV_NAME。LV中可以分配的最小儲存單元稱為LE(logical extend),在同一個卷組中,LE的大小和PE是一樣的,且一一對應。這一階段用到的命令有lvcreate、lvscan、lvdisplay、lvextend、lvreduce、lvresize

1)lvcreate:建立邏輯卷或快照

用法:lvcreate [選項] [引數]

選項:

  • -L:指定大小

  • -l:指定大小(LE數)

  • -n:指定名稱

  • -s:建立快照

  • -p r:設定為唯讀(該選項一般用於建立快照中)

注:使用該命令建立邏輯卷時當然必須指明卷組,建立快照時必須指明針對哪個邏輯卷

lvcreate -L 500M -n mylv myvg

2)lvscan:掃描當前系統中的所有邏輯卷,及其對應的裝置檔案

3)lvdisplay:顯示邏輯卷屬性

用法:lvdisplay [/dev/VG_NAME/LV_NAME]

4)lvextend:可線上擴充套件邏輯卷空間

用法:lvextend -L/-l 擴充套件的大小 /dev/VG_NAME/LV_NAME

選項:

  • -L:指定擴充套件(後)的大小。例如,-L +800M表示擴大800M,而-L 800M表示擴大至800M

  • -l:指定擴充套件(後)的大小(LE數)

lvextend -L 200M /dev/myvg/mylv

5)lvreduce:縮減邏輯卷空間,一般離線使用

用法:lvexreduce -L/-l 縮減的大小 /dev/VG_NAME/LV_NAME

選項:

  • -L:指定縮減(後)的大小

  • -l:指定縮減(後)的大小(LE數)

lvreduce -L 200M /dev/myvg/mylv

6)lvremove:刪除邏輯卷,需要處於離線(解除安裝)狀態

用法:lvremove [-f] /dev/VG_NAME/LV_NAME

  • -f:強制刪除

7)lv建立例子

[root@localhost ~]# lvcreate -L 2G -n mylv myvg  
  Logical volume "mylv" created.
[root@localhost ~]# lvscan 
  ACTIVE            '/dev/myvg/mylv' [2.00 GiB] inherit
[root@localhost ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/myvg/mylv
  LV Name                mylv
  VG Name                myvg
  LV UUID                2lfCLR-UEhm-HMiT-ZJil-3EJm-n2H3-ONLaz1
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-07-05 13:42:44 +0800
  LV Status              available
  # open                 0
  LV Size                2.00 GiB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

5、格式化邏輯卷並掛載

[root@localhost ~]# mke2fs -t ext4 /dev/myvg/mylv
...
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
...
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount
mount mountpoint
[root@localhost ~]# mount /dev/myvg/mylv /data
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 1.5G 49G 3% /
devtmpfs 903M 0 903M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 8.6M 904M 1% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
tmpfs 183M 0 183M 0% /run/user/0
/dev/mapper/myvg-mylv 2.0G 6.0M 1.8G 1% /data

相關推薦:《Linux視訊教學

以上就是linux中什麼是lvm的詳細內容,更多請關注TW511.COM其它相關文章!