1. 程式人生 > >Linux 邏輯卷邏輯卷的創建,擴展,縮減

Linux 邏輯卷邏輯卷的創建,擴展,縮減

pan clas them 工程 就是 ttr 完成 2.0 使用

Linux 邏輯卷邏輯卷的創建,擴展,縮減


在生活中會遇到磁盤空間不足的情況,為了不影響Linux系統的正常使用,我們需要在線擴展和縮減邏輯卷大小。首先需要先了解一下LVM(Logical Volume Manager),它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。

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設備。

VG(Volumne Group)- 卷用戶組,建立在物理卷之上,一個卷組中至少要包括一個物理卷,在卷組建立之後可動態添加物理卷到卷組中。一個邏輯卷管理 系統工程中可以只有一個卷組,也可以擁有多個卷組。

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 邏輯卷邏輯卷的創建,擴展,縮減