Linux 物理卷(PV)、邏輯卷(LV)、卷組(VG)管理
邏輯卷是使用邏輯卷組管理(Logic Volume Manager)創建出來的裝置,如果要了解邏輯卷,那麼首先需要了解邏輯卷管理中的一些概念。
- 物理卷(Physical Volume,PV):也就是物理磁碟分割槽,如果想要使用LVM來管理這個分割槽,可以使用fdisk將其ID改為LVM可以識別的值,即8e。
- 卷組(Volume Group,VG):PV的集合
- 邏輯卷(Logic Volume,LV):VG中畫出來的一塊邏輯磁碟
瞭解概念之後,邏輯卷是如何產生的就很清晰了:物理磁碟或者磁碟分割槽轉換為物理卷,一個或多個物理卷聚集形成一個或多個卷組,而邏輯卷就是從某個卷組裡面抽象出來的一塊磁碟空間。具體架構如下:
(二)為什麼要使用邏輯卷
對於物理磁碟,我們直接分割槽、格式化為檔案系統之後就可以使用,那為什麼還需要使用邏輯卷的方式來管理磁碟呢?我認為主要有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,才能建立物理卷。
分割槽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,最終結果如下:
接著進行建立物理卷(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容量都發生了變化
(五)建立、擴容邏輯卷
(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 ~]# df –h 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。
擴容前檔案磁碟大小如下:
進行擴容操作:
# 對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.
之後檢視磁碟大小,未發生改變:
調整檔案系統的大小:
# 使用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.
確認磁碟大小已經發生了改變
【