LVM的創建、擴展、收縮及快照功能的介紹

  • 2019 年 10 月 5 日
  • 筆記

LVM技術說明:

LVM是logical Volume Manager(邏輯卷管理)的簡稱。

LVM機制使得我們安裝系統時候不用太擔心分區大小對後期擴展帶來的不便。

LVM是在物理卷(Physical Volume)上再建立了一層邏輯層。可以將多塊磁碟組成卷組,再劃分為多個邏輯卷。

首先,說下幾個名詞:

PV     # 物理卷Physical Volume

VG     # 卷組Volume Group

LV     # 邏輯卷Logical Volume

PE     # 物理塊Physical Extents

LE     # 邏輯塊Logical Extent。

邏輯卷LV也被劃分為可被定址的基本單位,稱為LE。在同一個卷組中,LE的大小和PE是相同的,並且一一對應

1.LVM的創建

大致流程如下:

1. 創建分區(fdisk 命令,分區類型fd)

2. 創建PV

3. 創建VG

4. 創建LV

5. 掛載測試

下面我們來一一說明:

# 創建分區

fdisk /dev/sda

我這裡以虛擬機的/dev/sda{5,6,7}為例,

# 創建PV(物理卷)

pvcreate /dev/sda{5,6,7} # 創建物理卷physical volume

pvs  # 查看PV資訊 ,或者用pvdisplay 顯示PV的詳細資訊

# 創建VG(卷組)

# 設置PE大小為16M,vg名稱為testvg,加入的磁碟有/dev/sda{5,6,7}

vgcreate –s 16M testvg /dev/sda{5,6,7}

vgdisplay /dev/testvg    # 查看VG詳細資訊 ,或者直接用vgs命令查看VG資訊

# 創建LV(邏輯卷)

# 創建邏輯卷logical volumes,大小為4G,-n 接的是LV名稱,最後跟的是VG名稱

lvcreate -L 4G -n testlv testvg

lvdisplay /dev/testvg/testlv    # 查看LV詳細資訊,或者直接用pvs命令查看LV資訊

# 格式化邏輯卷

mke2fs -t ext4 /dev/testvg/testlv

# 掛載LVM文件系統做測試

mkdir /test

mount /dev/testvg/testlv /test

df –lhP   # 查看掛載情況

cp –a /etc/ /test       # 拷貝/etc/目錄到/test目錄下做測試用

vi /etc/fstab ,添加一行內容:/dev/testvg/testlv /test ext4 defaults 0 0

2.LVM的擴展與收縮

這裡我們要引入兩個概念:物理邊界和邏輯邊界。

物理邊界:我們對一個磁碟進行分區的分區邊界

邏輯邊界:我們格式化分區,建立文件系統後形成的分區邊界

在我們對LVM擴展的時候,我們要先擴展物理邊界,然後再擴展邏輯邊界;縮減LVM的時候則相反。

# 2.1 LVM的擴展

# 擴展LV大小為7GB

umount /dev/testvg/testlv              # 先卸載分區

lvextend -L 7G /dev/testvg/testlv      # 擴展物理邊界

df -lhP       # 可以看到/dev/testvg/testlv的大小還是原來的數值,並沒有變成7G

resize2fs /dev/testvg/testlv    # 擴展邏輯邊界(調整文件系統的大小)

df -lhP       # 這時候發現lvm1的大小已經變成了7G,表明擴展成功

# 2.2 LVM的收縮

# 縮小LV大小為3GB

注意:縮減需要移動文件,存在一定的風險,一般生產環境中不縮減LVM的大小。

umount /dev/testvg/testlv              # 先卸載分區

e2fsck -f /dev/testvg/testlv           # 檢查邏輯卷的數據,確保其一致性

resize2fs /dev/testvg/testlv 3G    # 縮減邏輯卷大小為3G(縮減的是邏輯邊界)

lvreduce -L 3G /dev/testvg/testlv      # 縮減邏輯卷大小為3G(縮減的是物理邊界)

mount /dev/testvg/testlv  /test/       # 掛載LVM測試

ll /test                           # 檢查數據是否丟失或損壞

3.LVM的快照功能:

快照(snapshot)是LVM所提供的一個非常有用的特性。它的原理是複製 Origin 原始卷的元數據(metadata)來創建一個邏輯卷,並沒有複製物理卷上的任何數據,因此它的創建過程是實時瞬間完成的。快照是特殊類型的邏輯卷,它含有創建時刻所指定的原始邏輯卷的完整數據,您可以操作快照而無需擔心數據的變更令備份失效。

當一個 snapshot創建的時候,僅拷貝原始卷里的源數據,這不是物理上的數據拷貝,因此snapshot的創建特別快,當原始卷里的數據有寫入時,備份卷開始記錄原始卷哪些數據發生了變化,然後在原始卷新數據覆蓋舊數據時,將舊數據拷貝到snapshot的預留空間里,起到備份數據的作用,就保證了所有數據和創建備份卷之前的數據一致性。

而對於snapshot的讀操作,如果是讀取數據塊是沒有修改過的,那麼會將讀操作直接重定向到原始卷上,如果是要讀取已經修改過的塊,那麼就讀取拷貝到snapshot中的塊。所以當原始卷破壞了之後還能用snapshot備份的數據還原

介紹幾個概念,關於數據的備份:

冷備份:卸載掉文件系統,不能讀不能寫

溫備份:不卸載文件系統,能讀取文件系統內容但是不能寫

熱備份:不卸載文件系統,既能讀取文件系統內容又能寫入

注意兩點:

1) 快照其實也是一個邏輯卷

2) 快照只能對邏輯卷LVM進行備份,並且只能對同一個卷組的邏輯卷進行備份

# 創建快照

lvcreate -L 3G -p r -s -n testlv_bak  /dev/testvg/testlv

Note:快照的存放創建到路徑/dev/testvg/ 下面,文件名為testlv_bak

# 修改系統參數

現執行些刪除、添加的操作

useradd –m –d /test/lee lee

cp –a /boot/grub/* /test/

# 開始恢復快照

lvconvert –merge /dev/testvg/testlv_bak # 恢復到快照

# 檢查是否恢復到快照前的狀態

tail /etc/passwd | grep 「lee」 # 查看用戶lee是否已經不存在

ls –l /test # 查看/test目錄下是否還存在grub文件