LVM是什麼?
LVM是 Logical Volume Manager(邏輯卷管理)的簡寫。它基於linux內核中的dm模塊,將一個或多個硬盤的分區在邏輯上進行組合,在磁盤分區和文件系統之間添加的一個邏輯層,來爲文件系統屏蔽下層磁盤分區佈局,提供一個抽象的存儲卷,在存儲捲上建立文件系統並且在容量不夠或容量太大時,可隨意進行擴容和縮減。相對於普通硬盤來講,其具有很大的靈活性。CentOS6及以前的版本上,LVM應用比較廣泛;CentOS7上新增了btrfs格式文件系統,btrfs也比較靈活,可隨意擴容獲縮減容量,所以,CentOS7上已經逐漸丟棄了LVM。
LVM的相關術語:
物理卷(Physical Volume,PV)
指磁盤分區或從邏輯上與磁盤分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有與LVM相關的管理參數。
卷組(Volume Group,VG)
類似於非LVM系統中的物理磁盤,其由一個或多個物理卷PV組成。可以在卷組上創建一個或多個LV(邏輯卷)。
邏輯卷(Logical Volume,LV)
類似於非LVM系統中的磁盤分區,邏輯卷建立在卷組VG之上。在邏輯卷LV之上可以建立文件系統(比如/home或者/usr等)。
物理塊(Physical Extent,PE)
每一個物理卷PV被劃分爲稱爲PE(Physical Extents)的基本單元,具有唯一編號的PE是可以被LVM尋址的最小單元。PE的大小是可配置的,默認爲4MB。所以物理卷(PV)由大小等同的基本單元PE組成。
PE的大小在PV加入到VG以後決定的。因此,建立在相同PV上的不同VG中的PE有可能大小不等。
邏輯塊(Logical Extent,LE)
邏輯卷LV也被劃分爲可被尋址的基本單位,稱爲LE。在同一個卷組中,LE的大小和PE是相同的,並且一一對應。
綜行所述:要創建lv需要進行如下步驟:
1、硬盤分區
2、創建PV
3、創建VG
4、創建LV
例如:創建一個至少可容納20G數據的LV,可經過如下步驟:
實驗所需硬盤容量爲:20G以上,由於之前創建虛擬機時沒有進行合理的分區劃分,所以我在虛擬機上新增了一塊120G的硬盤
[root@localhost ~]# fdisk -l ##查看當前系統所識別出的硬盤
1、磁盤分區:
[root@localhost ~]# fdisk /dev/sdb ##對硬盤sdb進行管理 Command (m for help): n #創建一個新分區 Command action e extended p primary partition (1-4) p ##創建一個標準分區 Partition number (1-4): 1 ##分區編號 First cylinder (1-15665, default 1): ##起始柱面;默認即可(回車) Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-15665, default 15665): +10G ##結束柱面,或直接用"+"指定分區容量即可 Command (m for help): t ##調整分區類型 Partition number (1-4): 1 ##指定分區編號 Hex code (type L to list codes): 8e ##調整分區類型爲 Linux LVM) Command (m for help): w ##保存退出 [root@localhost ~]# partx -a /dev/sdb ##通知內核讀取新創建的分區
這裏我只演示了1個10G的分區,本次實驗需要至少20G分區容量,請按照如上步驟創建。
****接下來先演示創建過程,具體命令總結見文檔尾部:
創建PV
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2 ##創建PV Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created [root@localhost ~]# pvdisplay ##顯示當前系統已有的PV "/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 Total PE 0 Free PE 0 Allocated PE 0 PV UUID xBH83J-IOi1-Bgr7-rs1f-1XWW-iYbW-9QIsWQ "/dev/sdb2" is a new physical volume of "10.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb2 VG Name PV Size 10.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID tD2HgH-i0N8-vDDd-15v4-sNk6-eWZ5-G6zoNH
創建VG:
[root@localhost ~]# vgcreate -s 8M testvg /dev/sdb1 /dev/sdb2 ##意爲將sdb1和sdb2創建爲PE爲8M,名爲testvg的VG Volume group "testvg" successfully created [root@localhost ~]# vgdisplay --- Volume group --- VG Name testvg 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 20.00 GiB ##2個10G分區組合成了1個20G的VG PE Size 8.00 MiB ##創建時-s指定了PEsize爲8M Total PE 2560 Alloc PE / Size 0 / 0 Free PE / Size 2560 / 20.00 GiB VG UUID UeoGuC-79gO-lxLa-bpcO-EXTO-uJPI-cc9vt4
創建LV :****因爲LV是在VG上劃分的,所以LV的容量必須小於等於VG的容量
[root@localhost ~]# lvcreate -L 20G -n testlv testvg ##意爲在testvg的VG中創建名爲testlv,容量爲20G的LV Logical volume "testlv" created [root@localhost ~]# lvdisplay ##顯示已創建的LV屬性 --- Logical volume --- LV Path /dev/testvg/testlv LV Name testlv VG Name testvg LV UUID uxVd7w-X7tI-1zpP-hORA-3igb-hCM0-Lm2y8M LV Write Access read/write LV Creation host, time localhost.localdomain, 2015-08-27 07:24:39 +0800 LV Status available # open 0 LV Size 20.00 GiB Current LE 2560 ##由於LE與PE大小相等且一一對應,所以20480M(20G)/8M=2560 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0
爲LV創建文件系統,並掛載使用:
[root@localhost ~]# mke2fs -t ext4 -b 2048 -m 3 /dev/testvg/testlv ##意爲創建ext4格式文件系統,blocksize=2048Bytes,預留管理空間爲%3 [root@localhost ~]# mkdir /testdir ###在根下創建testdir目錄 [root@localhost ~]# mount /dev/testvg/testlv /testdir/ ##將LV掛載至testdir使用 [root@localhost ~]# ls /testdir/ lost+found
至此,20G的LV已創建完成,並已掛載使用,若此時我們發現20G容量已達不到我們的業務需求,我們可以隨意對其進行擴容,步驟如下:
首先添加PV:————————————————————
我在創建分區的時候已劃分好了3個10GB的分區(/dev/sdb1 /dev/sdb2 /dev/sdb3 ),若您不知道如何操作,請見文檔前半部分磁盤分區:
1、首先新增PV
[root@localhost ~]# pvcreate /dev/sdb3
2、擴展VG:
[root@localhost ~]# vgextend testvg /dev/sdb3 ##意爲將sdb3添加至testvg中 Physical volume "/dev/sdb3" successfully created Volume group "testvg" successfully extended [root@localhost ~]# vgdisplay --- Volume group --- VG Name testvg System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 3 Act PV 3 VG Size 30.00 GiB ##已擴展至30G PE Size 8.00 MiB Total PE 3840 Alloc PE / Size 2560 / 20.00 GiB Free PE / Size 1280 / 10.00 GiB VG UUID UeoGuC-79gO-lxLa-bpcO-EXTO-uJPI-cc9vt4
3、擴展LV
[root@localhost ~]# lvextend -L +10G -v /dev/testvg/testlv ##意爲爲testlv添加10G;或-L 30G,意爲擴展到30G DEGRADED MODE. Incomplete RAID LVs will be processed. Finding volume group testvg Archiving volume group "testvg" metadata (seqno 3). Extending logical volume testvg/testlv to 30.00 GiB Size of logical volume testvg/testlv changed from 20.00 GiB (2560 extents) to 30.00 GiB (3840 extents). Loading testvg-testlv table (253:0) Suspending testvg-testlv (253:0) with device flush Resuming testvg-testlv (253:0) Creating volume group backup "/etc/lvm/backup/testvg" (seqno 4). Logical volume testlv successfully resized [root@localhost ~]# lvdisplay --- Logical volume --- LV Path /dev/testvg/testlv LV Name testlv VG Name testvg LV UUID uxVd7w-X7tI-1zpP-hORA-3igb-hCM0-Lm2y8M LV Write Access read/write LV Creation host, time localhost.localdomain, 2015-08-27 07:24:39 +0800 LV Status available # open 1 LV Size 30.00 GiB ##已擴展至30G Current LE 3840 Segments 3 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0
4、擴展文件系統:
由圖可見,現在testlv的文件系統容量爲20G
執行如下操作:
[root@localhost ~]# resize2fs /dev/testvg/testlv
擴展成功。
由上述可知:對於已在生產環境中使用的LV,無需卸載格式化便可直接對其擴容。
——————————————————————————————————————————————————
LV的容量縮減:****特別注意!!LV縮減到的容量必須能容納的下現在的已有數據!!!!!
1、卸載文件系統
[root@localhost ~]# umount /testdir/
2、強制修復文件系統:
[root@localhost ~]# fsck -f -t ext4 /dev/testvg/testlv fsck from util-linux-ng 2.17.2 e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/mapper/testvg-testlv: 99/1966080 files (1.0% non-contiguous), 288393/15728640 blocks
3、縮減文件系統
[root@localhost ~]# resize2fs /dev/testvg/testlv 20G ##意爲將文件系統大小縮減爲20G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/testvg/testlv to 10485760 (2k) blocks. The filesystem on /dev/testvg/testlv is now 10485760 blocks long.
4、縮減LV
[root@localhost ~]# lvreduce -L -10G -v /dev/testvg/testlv ##意爲將LV減掉10G 或 -L 20G意爲縮減到20G DEGRADED MODE. Incomplete RAID LVs will be processed. Finding volume group testvg WARNING: Reducing active logical volume to 20.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce testlv? [y/n]: y Archiving volume group "testvg" metadata (seqno 10). Reducing logical volume testvg/testlv to 20.00 GiB Size of logical volume testvg/testlv changed from 30.00 GiB (3840 extents) to 20.00 GiB (2560 extents). Loading testvg-testlv table (253:0) Suspending testvg-testlv (253:0) with device flush Resuming testvg-testlv (253:0) Creating volume group backup "/etc/lvm/backup/testvg" (seqno 11). Logical volume testlv successfully resized
5、掛載文件系統進行使用
[root@localhost ~]# mount /dev/testvg/testlv /testdir/
實驗結束。至此我們已經完成了LV的創建、擴容、及縮減實驗。
LVM管理的命令及常用選項總結:
PV相關:
pvmove***
若生產環境中對VG容量進行縮減時,硬盤上有數據,則需先使用該命令將原有數據進行轉移!
pvmove [源PV] [目標PV] 若目標PV省略,則默認將源PV上的數據移動至VG中。
-n LVname 指明只移動屬於指定LV的數據(PE塊)
pvcreate 創建PV
pvremove 刪除pv
pvs 顯示當前系統已有的PV簡要信息
pvdisplay 顯示當前系統已有的PV詳細信息
pvresize 更改PV的大小
-s size 指明要更改的PV容量大小
VG相關
vgcreate VGname PV 創建VG
-s 指明PE大小
vgremove 刪除VG
vgrename 重命名VG
vgreduce 縮減VG ,若存在數據,則需要先pvmove
LV相關:
lvcreate創建LV
-L| --size 邏輯卷大小
-n|--name邏輯卷名字 卷組
-l 指明要擴展或要擴展到的LE的數目
lvreduce 縮減LV
-L [+]n 指明要擴展或擴展到的LV容量
lvextend 擴展LV
-L [-]n 指明要縮減或縮減到的LV容量
創建LVM快照 (關於LVM的快照特性,還請各位自行查閱相關文檔)
lvcreate -L 大小 -p r -s -n 快照卷名字 原卷名字
-p 權限 。 一般是隻讀 r
待續。若文檔有欠缺之處,勞煩您在線指出,甚是感激!