Linux 邏輯卷邏輯卷的創建,擴展,縮減
在生活中會遇到磁盤空間不足的情況,為了不影響Linux系統的正常使用,我們需要在線擴展和縮減邏輯卷大小。首先需要先了解一下LVM(Logical Volume Manager),它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。
LVM的工作原理其實很簡單,它就是通過將底層的物理硬盤抽象的封裝起來,然後以邏輯卷的方式呈現給上層應用。在傳統的磁盤管理機制中,我們的上層應用是直接訪問文件系統,從而對底層的物理硬盤進行讀取,而在LVM中,其通過對底層的硬盤進行封裝,當我們對底層的物理硬盤進行操作時,其不再是針對於分區進行操作,而是通過一個叫做邏輯卷的東西來對其進行底層的磁盤管理操作。
基本的邏輯卷管理概念:
PE(Physical Extent)- 物理擴展塊,是LVM的最小的存儲塊,也就是說我們的文件系統都是由寫入PE來處理,有點類似於文件系統裏的block。LVM默認使用4M的PE塊,而LVM的VG最多僅能有65534個PE,因此默認LVNMVG會有4M*65534/(1024M/G)=256G,
PV(Physical Volume)- 物理卷,在邏輯卷管理中處於最底層,它可以是實際物理硬盤上的分區,也可以是整個物理硬盤,也可以是raid設備。
LV(Logical Volume)- 邏輯卷,建立在卷組之上,卷組中的未分配空間可以用於建立新的邏輯卷,邏輯卷建立後可以動態地擴展和縮小空間。系統中的多個邏輯卷可以屬於同一個卷組,也可以屬於不同的多個卷組。
關系如下:
寫在最前
本文演示環境為centos 7.5,準備兩塊磁盤分別是5G、10G
一、LVM的制作過程
1.分區或增加新的硬盤
如果是分區,註意分區的ID設置為8e
#手動增加兩塊虛擬硬盤 [root@localhost(yuaning) ~]# echo '- - -' > /sys/class/scsi_host/host2/scan [root@localhost(yuaning) ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdk 8:160 0 10G 0 disk sdl 8:176 0 5G 0 disk sr0 11:0 1 1024M 0 rom #磁盤分區及轉換為8e [root@localhost(yuaning) ~]# fdisk /dev/sdk 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 0x3d3051d3. 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): +1G Partition 1 of type Linux and of size 1 GiB is set Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 8e WARNING: If you have created or modified any DOS 6.xpartitions, please see the fdisk manual page for additionalinformation. Changed type of partition 'FAT12' to 'Linux LVM' Command (m for help): p Disk /dev/sdk: 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: 0x3d3051d3 Device Boot Start End Blocks Id System /dev/sdk1 2048 2099199 1048576 8e Linux LVM Command (m for help): w [root@localhost(yuaning) ~]# partprobe #激活分區
2.創建物理卷pv
先說說有關pv的命令:
pvcreate 將物理分區新建為pv
pvs/pvscan 查看系統裏有pv的磁盤
pvdisplay 顯示系統上面的pv狀態
pvremove 刪除pv
[root@localhost(yuaning) ~]# pvcreate /dev/sdk #此處可以添加多個磁盤,和raid設備 Physical volume "/dev/sdk" successfully created. [root@localhost(yuaning) ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- 32.00g 4.00m /dev/sdj1 testvg lvm2 a-- 4.98g 0 /dev/sdj2 testvg lvm2 a-- 4.98g 0 /dev/sdj3 testvg lvm2 a-- 4.98g 4.95g /dev/sdk lvm2 --- 10.00g 10.00g
3.創建卷組vg
有關vg的命令:
vgcreate [-s xM] vgName /dev/sd …… 新建vg,-s後面接pe的大小(可選),單位是M,G,可以放多塊pv
vgextend 擴展vg,就是增加pv
vgs/vgscan 查看系統裏有vg的磁盤
vgdisplay 顯示系統上面的vg狀態
vgremove 刪除vg
vgreduce 在vg裏刪除pv
[root@localhost(yuaning) ~]# vgcreate -s 16M vgcyn /dev/sdk Volume group "vgcyn" successfully created [root@localhost(yuaning) ~]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 3 0 wz--n- 32.00g 4.00m testvg 3 1 0 wz--n- 14.95g 4.95g vgcyn 1 0 0 wz--n- 9.98g 9.98g
4.創建邏輯卷lv
有關lv的命令:
lvcreate -l pe num /-L size -n lvname vgName 新建lv,-l指定pe的個數!!!這裏不是數量,-L指定容量,M,G
lvextend 增加容量
lvs/lvscan 查看系統裏有lv的磁盤
lvdisplay 顯示系統上面的lv狀態
lvremove 刪除lv
lvreduce 在lv裏減少容量
[root@localhost(yuaning) ~]# lvcreate -l 630 -n lvcyn vgcyn #lv的大小是630*16M=10080M Logical volume "lvcyn" created. [root@localhost(yuaning) ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert app centos -wi-ao---- 20.00g root centos -wi-ao---- 10.00g swap centos -wi-ao---- 2.00g testlv testvg -wi-a----- 10.00g lvcyn vgcyn -wi-a----- 9.84g [root@localhost(yuaning) ~]# mkfs.ext4 /dev/vgcyn/lvcyn #格式化 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 917504 inodes, 3670016 blocks 183500 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2151677952 112 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
二、LVM的在線擴展
分為兩種情況:
第一種情況,需要擴展的pe數量,vg可以提供
[root@localhost(yuaning) ~]# lvextend -L +100M /dev/vgcyn/lvcyn #將之前準備的vg裏的剩余pe加進去 Rounding size to boundary between physical extents: 112.00 MiB. Size of logical volume vgcyn/lvcyn changed from 9.84 GiB (630 extents) to 9.95 GiB (637 extents). Logical volume vgcyn/lvcyn successfully resized. [root@localhost(yuaning) ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert app centos -wi-ao---- 20.00g root centos -wi-ao---- 10.00g swap centos -wi-ao---- 2.00g testlv testvg -wi-a----- 10.00g lvcyn vgcyn -wi-a----- 9.95g [root@localhost(yuaning) ~]# resize2fs /dev/vgcyn/lvcyn #更新文件系統的大小,即激活 [root@localhost(yuaning) ~]# resize2fs -f /dev/vgcyn/lvcyn 500M #強制設置大小 [root@localhost(yuaning) ~]# dump2fs /dev/vgcyn/lvcyn #查看ext系列文件系統
第二種情況,vg空間不夠,需先擴展vg,擴展vg就是往vg中加pv
[root@localhost(yuaning) ~]# vgextend vgcyn /dev/sdl #事先準備兩塊磁盤,現在將另一塊加進去 Physical volume "/dev/sdl" successfully created. Volume group "vgcyn" successfully extended [root@localhost(yuaning) ~]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 3 0 wz--n- 32.00g 4.00m testvg 3 1 0 wz--n- 14.95g 4.95g vgcyn 2 1 0 wz--n- <14.97g <5.02g [root@localhost(yuaning) ~]# lvextend -L 14G /dev/vgcyn/lvcyn Size of logical volume vgcyn/lvcyn changed from 9.95 GiB (637 extents) to 14.00 GiB (896 extents). Logical volume vgcyn/lvcyn successfully resized. [root@localhost(yuaning) ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert app centos -wi-ao---- 20.00g root centos -wi-ao---- 10.00g swap centos -wi-ao---- 2.00g testlv testvg -wi-a----- 10.00g lvcyn vgcyn -wi-a----- 14.00g
三、減小邏輯卷
縮減邏輯卷的時候,要事先卸載掛載的文件系統,然後減少邏輯卷的容量,然後重新掛載
#事先自行 umount [root@localhost(yuaning) ~]# e2fsck -f /dev/vgcyn/lvcyn #強行檢查文件系統 e2fsck 1.42.9 (28-Dec-2013) 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/vgcyn/lvcyn: 11/917504 files (0.0% non-contiguous), 100612/3670016 blocks [root@localhost(yuaning) ~]# resize2fs /dev/vgcyn/lvcyn 10G #縮減邏輯空間到10G resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/vgcyn/lvcyn to 2621440 (4k) blocks. The filesystem on /dev/vgcyn/lvcyn is now 2621440 blocks long. [root@localhost(yuaning) ~]# lvreduce -L 10G /dev/vgcyn/lvcyn #縮減邏輯空間到10G WARNING: Reducing active logical volume to 10.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce vgcyn/lvcyn? [y/n]: y Size of logical volume vgcyn/lvcyn changed from 14.00 GiB (896 extents) to 10.00 GiB (640 extents). Logical volume vgcyn/lvcyn successfully resized. [root@localhost(yuaning) ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert app centos -wi-ao---- 20.00g root centos -wi-ao---- 10.00g swap centos -wi-ao---- 2.00g testlv testvg -wi-a----- 10.00g lvcyn vgcyn -wi-a----- 10.00g #成功縮減 [root@localhost(yuaning) ~]# ls #最後檢查一下,文件又沒丟失。
至此,Linux的邏輯卷的創建,擴展,縮減都已完成。
Linux 邏輯卷邏輯卷的創建,擴展,縮減