Linux 物理卷(PV)、邏輯卷(LV)、卷組(VG)管理


image


(一)相關概念

邏輯卷是使用邏輯卷組管理(Logic Volume Manager)創建出來的設備,如果要了解邏輯卷,那么首先需要了解邏輯卷管理中的一些概念。

  • 物理卷(Physical Volume,PV):也就是物理磁盤分區,如果想要使用LVM來管理這個分區,可以使用fdisk將其ID改為LVM可以識別的值,即8e。
  • 卷組(Volume Group,VG):PV的集合
  • 邏輯卷(Logic Volume,LV):VG中畫出來的一塊邏輯磁盤

了解概念之后,邏輯卷是如何產生的就很清晰了:物理磁盤或者磁盤分區轉換為物理卷,一個或多個物理卷聚集形成一個或多個卷組,而邏輯卷就是從某個卷組里面抽象出來的一塊磁盤空間。具體架構如下:

clipboard


(二)為什么要使用邏輯卷

對於物理磁盤,我們直接分區、格式化為文件系統之后就可以使用,那為什么還需要使用邏輯卷的方式來管理磁盤呢?我認為主要有2個原因:

  • 業務上使用大容量的磁盤。舉個例子,我們需要在/data下掛載30TB的存儲,對於單個磁盤,是無法滿足要求的,因為市面上沒有那么大的單塊磁盤。但是如果我們使用邏輯卷,將多個小容量的磁盤聚合為一個大的邏輯磁盤,就能滿足需求。
  • 擴展和收縮磁盤。在業務初期規划磁盤時,我們並不能完全知道需要分配多少磁盤空間是合理的,如果使用物理卷,后期無法擴展和收縮,如果使用邏輯卷,可以根據后期的需求量,手動擴展或收縮。


(三)創建物理卷(PV)

通過上面的邏輯卷架構圖,可以知道,如果要創建邏輯卷,需要先有物理磁盤或者磁盤分區,然后使用物理磁盤或磁盤分區創建物理卷,再使用物理卷創建卷組,最后使用卷組創建邏輯卷。接下來一步一步創建邏輯卷。

創建物理卷是創建邏輯卷的第一步,創建物理卷相關命令有:

# pvcreate用於創建物理卷
pvcreate /dev/sdb

# pvdisplay、pvsca、pvs用於查看物理卷
pvdisplay
pvs
pvscan

可以使用磁盤直接創建物理卷,也可以使用磁盤分區創建物理卷。兩種方法稍微有些差距,下面進行說明。

(3.1)使用磁盤直接創建物理卷

直接使用物理磁盤創建物理卷沒有什么需要特別注意的,直接創建即可。

# 使用fdisk -l確認磁盤,可以看到/dev/sdb未做分區處理
[root@masterdb ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 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

# 使用pvcreate將sdb磁盤創建為物理卷
[root@masterdb ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.

# 使用pvdisplay確認物理卷信息
[root@masterdb ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sda3
  VG Name               centos
  PV Size               <68.73 GiB / not usable 4.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              17593
  Free PE               0
  Allocated PE          17593
  PV UUID               FRxq7G-1XWu-dPeW-wEwO-322y-M9XR-0ExebA
   
  "/dev/sdb" is a new physical volume of "2.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               2.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               nsL75f-o3fD-apyz-SSY0-miUi-4RYf-zVLIT6
   
# 也可以使用pvs確認物理卷信息,不過能夠看到的信息比pvdisplay少
[root@masterdb ~]# pvs 
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sda3  centos lvm2 a--  68.72g    0 
  /dev/sdb          lvm2 ---   2.00g 2.00g
[root@masterdb ~]#


(3.2)使用磁盤分區創建物理卷

磁盤分區之后,磁盤id為83,如果要使用邏輯卷管理,需要將id改為8e,才能創建物理卷。

image

分區1修改id過程如下:

[root@masterdb ~]# fdisk /dev/sdc 
 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.


 Command (m for help): t  #t可以修改分區代碼
 Partition number (1,2, default 2): 1            #選擇1分區進行修改
 Hex code (type L to list all codes): L         #如果不知道類型,可以用”L”列出可以選擇的修改代碼

  0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
  1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
  2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
  3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
  4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx         
  5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data    
  6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
  7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility   
  8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt         
  9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access     
  a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
  b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
  c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs        
  e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
  f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
 10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
 11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
 12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
 14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary  
 16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
 17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
 18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
 1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep        
 1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT            
 1e  Hidden W95 FAT1 80  Old Minix      
 Hex code (type L to list all codes): 8e         #選擇8e
 Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): w             # 保存
 The partition table has been altered!

Calling ioctl() to re-read partition table.
 Syncing disks.
 [root@masterdb ~]#

按照上面的過程,修改分區2,最終結果如下:

image

接着進行創建物理卷(PV)即可

[root@masterdb ~]# pvcreate /dev/sdc1 
  Physical volume "/dev/sdc1" successfully created.
[root@masterdb ~]# pvcreate /dev/sdc2 
  Physical volume "/dev/sdc2" successfully created.


(四)創建、擴容卷組

(4.1)創建卷組

有了PV就可以創建卷組了,創建卷組相關命令有:

# 使用vgcreate創建卷組
vgcreate VG_NAME device1 ... devicen

# 使用vgdosplay、vgscan、vgs命令查看卷組
vgdisplay
vgscan
vgs

接下來演示使用sdb和sdc1創建一個卷組VG_TEST。

# 使用vgcreate創建卷組VG_TEST,包含物理卷:/dev/sdb和/dev/sdc1
[root@masterdb ~]# vgcreate VG_TEST /dev/sdb /dev/sdc1
  Volume group "VG_TEST" successfully created

# 查看方法一:使用vgdisplay查看卷組信息
[root@masterdb ~]# vgdisplay
  --- Volume group ---
  VG Name               VG_TEST
  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               2.99 GiB
  PE Size               4.00 MiB
  Total PE              766
  Alloc PE / Size       0 / 0   
  Free  PE / Size       766 / 2.99 GiB
  VG UUID               DmY2Nz-ietc-2Y8Y-7A1b-1cpT-qEeV-XrgURn
...  
   
# 查看方法二:使用vgscan查看卷組信息
[root@masterdb ~]# vgscan
  Reading volume groups from cache.
  Found volume group "VG_TEST" using metadata type lvm2
  Found volume group "centos" using metadata type lvm2

# 查看方法三:使用vgs查看卷組信息
[root@masterdb ~]# vgs 
  VG      #PV #LV #SN Attr   VSize  VFree
  VG_TEST   2   0   0 wz--n-  2.99g 2.99g
  centos    1   4   0 wz--n- 68.72g    0


(4.2)擴容卷組

如果在使用過程中,發現要使用的空間大於卷組的空間,可以對卷組進行擴容,把新的物理卷(PV)加入到卷組中,語法為

vgextend VG_NAME device1 ... devicen

接下來演示將sdc2加入到卷組VG_TEST中。

# 使用vgextend擴容卷組VG_TEST
[root@masterdb ~]# vgextend VG_TEST /dev/sdc2  
  Volume group "VG_TEST" successfully extended

最終結果如下,發現PV數量和VG容量都發生了變化

image


(五)創建、擴容邏輯卷

(5.1)創建邏輯卷

有了卷組,就可以創建邏輯卷(LV)了,創建邏輯卷相關命令有:

# 使用lvcreate創建邏輯卷
lvcreate –L SIZE –n LV_NAME VG_NAME

使用lvdisplay、lvscan、lvs查看邏輯卷
lvdisplay
lvscan
lvs

接下來演示使用VG_TEST創建邏輯卷lv_test

# 使用lvcreate創建邏輯卷lv_test
[root@masterdb ~]# lvcreate -L 1g -n lv_test VG_TEST
  Logical volume "lv_test" created.

# 查看方法一:使用lvdisplay查看邏輯卷
[root@masterdb ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/VG_TEST/lv_test
  LV Name                lv_test
  VG Name                VG_TEST
  LV UUID                RqWMOG-wCJJ-deu4-dIgv-c5hI-Bsqa-FHgh4E
  LV Write Access        read/write
  LV Creation host, time masterdb, 2020-05-13 22:42:45 +0800
  LV Status              available
  # open                 0
  LV Size                1.00 GiB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:4
...
   
# 查看方法二:使用lvscan查看邏輯卷  
[root@masterdb ~]# lvscan 
  ACTIVE            '/dev/VG_TEST/lv_test' [1.00 GiB] inherit
  ACTIVE            '/dev/centos/mysql' [<45.00 GiB] inherit
  ACTIVE            '/dev/centos/swap' [<3.73 GiB] inherit
  ACTIVE            '/dev/centos/home' [10.00 GiB] inherit
  ACTIVE            '/dev/centos/root' [10.00 GiB] inherit
  
# 查看方法三:使用lvs查看邏輯卷  
[root@masterdb ~]# lvs 
  LV      VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_test VG_TEST -wi-a-----   1.00g                                                    
  home    centos  -wi-ao----  10.00g                                                    
  mysql   centos  -wi-ao---- <45.00g                                                    
  root    centos  -wi-ao----  10.00g                                                    
  swap    centos  -wi-ao----  <3.73g

創建完lv之后,格式化掛載即可使用

# 創建文件系統
[root@masterdb ~]# mkfs.ext3 /dev/VG_TEST/lv_test 
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
 65536 inodes, 262144 blocks
 13107 blocks (5.00%) reserved for the super user
 First data block=0
 Maximum filesystem blocks=268435456
 8 block groups
 32768 blocks per group, 32768 fragments per group
 8192 inodes per group
 Superblock backups stored on blocks: 
     32768, 98304, 163840, 229376

Allocating group tables: done                            
 Writing inode tables: done                            
 Creating journal (8192 blocks): done
 Writing superblocks and filesystem accounting information: done

# 創建掛載點
[root@masterdb ~]# mkdir /test 

# 掛載文件系統
[root@masterdb ~]# mount /dev/VG_TEST/lv_test /test 

# 確認結果
[root@masterdb ~]# dfh 
 Filesystem                   Size  Used Avail Use% Mounted on
 /dev/mapper/centos-root       10G  4.1G  5.9G  42% /
 ...
 /dev/mapper/VG_TEST-lv_test  976M  1.3M  924M   1% /test


(5.2)擴容邏輯卷

使用如下命令進行擴容

# 使用lvextend擴容lv,+SIZE代表增加的空間
lvextend -L +SIZE lv_device

# 調整文件系統的大小
resize2fs device lv_device

接下來演示使用對邏輯卷lv_test擴容500M。

擴容前文件磁盤大小如下:

image

進行擴容操作:

# 對lv進行擴容,增加500M空間
[root@masterdb ~]# lvextend -L +500M /dev/VG_TEST/lv_test 
  Size of logical volume VG_TEST/lv_test changed from 1.00 GiB (256 extents) to <1.49 GiB (381 extents).
  Logical volume VG_TEST/lv_test successfully resized.

之后查看磁盤大小,未發生改變:

image

調整文件系統的大小:

# 使用resize2fs調整文件系統的大小
[root@masterdb ~]# resize2fs /dev/VG_TEST/lv_test 
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/VG_TEST/lv_test is mounted on /test; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/VG_TEST/lv_test is now 390144 blocks long.

確認磁盤大小已經發生了改變

image



【完】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM