前言
邏輯卷管理器(英語:Logical Volume Manager,縮寫為LVM),又譯為邏輯卷宗管理器姑原、邏輯扇區(qū)管理器、邏輯磁盤管理器呜舒,是Linux核心所提供的邏輯卷管理(Logical volume management)功能锭汛。它在硬盤的硬盤分區(qū)之上,又創(chuàng)建一個邏輯層阴绢,以方便系統(tǒng)管理硬盤分割系統(tǒng)店乐。
最先由IBM開發(fā),在AIX系統(tǒng)上實現(xiàn)呻袭,OS/2 操作系統(tǒng)與 HP-UX也支持這個功能眨八。在1998年,Heinz Mauelshagen 根據(jù)在 HP-UX 上的邏輯卷管理器左电,寫作出第一個 Linux 版本的邏輯卷管理器廉侧。
LVM基本術(shù)語:
- PV:物理卷,PV處于LVM系統(tǒng)最低層篓足,它可以是整個硬盤段誊,或者與磁盤分區(qū)具有相同功能的設(shè)備(如RAID),但和基本的物理存儲介質(zhì)相比較栈拖,多了與LVM相關(guān)管理參數(shù)
- VG:卷組连舍,創(chuàng)建在PV之上,由一個或多個PV組成涩哟,可以在VG上創(chuàng)建一個或多個“LVM分區(qū)”(邏輯卷)索赏,功能類似非LVM系統(tǒng)的物理硬盤
- LV:邏輯卷盼玄,從VG中分割出的一塊空間,創(chuàng)建之后其大小可以伸縮潜腻,在LV上可以創(chuàng)建文件系統(tǒng)(如/var,/home)
- PE:物理區(qū)域埃儿,每一個PV被劃分為基本單元(也被稱為PE),具有唯一編號的PE是可以被LVM尋址的最小存儲單元融涣,默認為4MB
我們可以通過LVM靈活便捷的管理系統(tǒng)中的磁盤童番,并且根據(jù)需求快速、無感得擴容目標磁盤威鹿,并且?guī)缀醪粫绊懶阅堋?/p>
過程
創(chuàng)建lvm分區(qū)的方法其實非常的簡單剃斧,主要分為以下幾個步驟:
1、創(chuàng)建磁盤分區(qū)part
目前做LVM分區(qū)比較推薦的工具還是fdisk专普,不是說parted不能做悯衬,而是fdisk可能更加方便一點。流程如下:
$ fdisk /dev/nvme0n1
Command (m for help): n ## 新建
Command action
e extended
p primary partition (1-4)
p ## 主分區(qū)primary
Partition number (1-4): 1 ## 分區(qū)號
First cylinder (2048-543352123, default 2048): ## 回車用默認的1
Last cylinder, +cylinders or +size{K,M,G} (2048-543352123, default 543352123): ## 回車默認大小大小
Command (m for help): t ## 改變toggle類型
Selected partition 1
Hex code (type L to list codes): 8e ## LVM 的分區(qū)代碼8e
Changed system type of partition 1 to 8e (Linux LVM)
2檀夹、創(chuàng)建物理卷PV
在分區(qū)完成之后需要做的就是創(chuàng)建物理卷筋粗,直接將剛才創(chuàng)建的分區(qū)進行pvcreate:
$ pvcreate /dev/nvme0n1p1
3、創(chuàng)建虛擬卷VG
在創(chuàng)建玩物理卷之后炸渡,需要對該磁盤進行虛擬卷的創(chuàng)建娜亿。需要注意的是一個虛擬卷可以由多個物理卷構(gòu)成。例如:
$ vgcreate nvme /dev/nvme0n1p1 /dev/nvme1n1p1 /dev/nvme2n1p1
該命令的意義就在于創(chuàng)建一個叫做nvme的虛擬卷蚌堵,由/dev/nvme0n1p1
买决、 /dev/nvme1n1p1
、 /dev/nvme2n1p1
三個做了pv的分區(qū)構(gòu)成
4吼畏、創(chuàng)建邏輯卷LG
到了這一步督赤,基本上LVM的創(chuàng)建已經(jīng)到了尾聲了,最后一步就是從虛擬卷中創(chuàng)建一個邏輯卷泻蚊。如下:
$ lvcreate -L 2.91T -n data nvme
這條命令的意思為從虛擬卷nvme中創(chuàng)建一個2.91T的邏輯卷作為lvm分區(qū)并命名為data躲舌,如果想一次性全部用完所有的容量,也可以這樣:
$ lvcreate -l -n data nvme
此時在linux的/dev/
文件夾下面我們可以看到有/nvme/data
的文件結(jié)構(gòu)性雄。
5没卸、掛載并更新文件
在創(chuàng)建完lvm分區(qū)后,我們需要將分區(qū)掛在到系統(tǒng)中的路徑中秒旋。假設(shè)需要掛載的路徑是/data
约计。
$ mkdir /data ##創(chuàng)建該路徑
$ mount /dev/mapper/nvme-data /data ##需要注意的時候這里推薦使用/dev/mapper/nvme-data作為掛載的設(shè)備路徑,而不是/dev/nvme/data
之后通過blkid
命令獲取這個新的lvm分區(qū)的UUID迁筛,然后更新到/etc/fstab
中就可以了
腳本化
上述的LVM實現(xiàn)過程可以直接通過shell腳本進行實現(xiàn):
#!/bin/bash
##本案例中以服務(wù)器的/dev/nvme0n1這塊nvme磁盤為例進行操作
OPTS="noatime,nobarrier,errors=remount-ro,nofail" ##部分寫入/etc/fstab的固定變量
umount /data/ && parted /dev/nvme0n1 rm 1 ## 首先確保目標磁盤沒有殘留的分區(qū)信息煤蚌。
echo "n
p
1
t
8e
w
" | fdisk /dev/nvme0n1 ##通過fdisk工具創(chuàng)建一個分區(qū)
echo "y
" | pvcreate /dev/nvme0n1p1 ##創(chuàng)建一個物理卷
echo "y
y
y
" | vgcreate nvme /dev/nvme0n1 ##創(chuàng)建一個虛擬卷
echo "y
" | lvcreate -L 2.91T -n data nvme && mkfs.ext4 /dev/nvme/data && mount /dev/mapper/nvme-data /data/
##創(chuàng)建一個邏輯卷并進行格式化,然后掛載到目標路徑
sed -i '$d' /etc/fstab ##將UUID等相關(guān)信息更新到/etc/fstab中
#do
if [ $? -eq 0 ]; then
UUID=$(blkid /dev/mapper/nvme-data | sed -e 's/.*\(UUID=.*\) TYPE.*/\1/')
echo -e "${UUID}\t\t/data\t\text4\t\t${OPTS}\t\t0 0" >> /etc/fstab
fi
seq=$(($seq+1))
#done