天天看點

建立LV磁盤并擴容

基本的邏輯卷管理概念: PV(Physical Volume)- 實體卷

實體卷在邏輯卷管理中處于最底層,它可以是實際實體硬碟上的分區,也可以是整個實體硬碟,也可以是raid裝置。 VG(Volumne Group)- 卷組

卷組建立在實體卷之上,一個卷組中至少要包括一個實體卷,在卷組建立之後可動态添加實體卷到卷組中。一個邏輯卷管理系統工程中可以隻有一個卷組,也可以擁有多個卷組。 LV(Logical Volume)- 邏輯卷

邏輯卷建立在卷組之上,卷組中的未配置設定空間可以用于建立新的邏輯卷,邏輯卷建立後可以動态地擴充和縮小空間。系統中的多個邏輯卷可以屬于同一個卷組,也可以屬于不同的多個卷組。

關系圖如下:

建立LV磁盤并擴容

PE(Physical Extent)- 實體塊

LVM 預設使用4MB的PE區塊,而LVM的LV最多僅能含有65534個PE (lvm1 的格式),是以預設的LVM的LV最大容量為4M*65534/(1024M/G)=256G。PE是整個LVM 最小的儲存區塊,也就是說,其實我們的資料都是由寫入PE 來處理的。簡單的說,這個PE 就有點像檔案系統裡面的block 大小。是以調整PE 會影響到LVM 的最大容量!不過,在 CentOS 6.x 以後,由于直接使用 lvm2 的各項格式功能,是以這個限制已經不存在了。

建立LV磁盤并擴容

建立LVM系統分區方式的主要步驟如下:

1. 添加新的實體磁盤 2. 建立新的分區,最多可配置設定【3個主分區,1個擴充分區】 或 【4個主分區】,擴充分區又可以有多個分區; window常見的配置設定方式: 方式1:[1個主分區(C槽)+1個擴充分區(包括3個分區,D,E,F盤)] 方式2:[4個主分區,分别作為:C、D、E、F盤] 若是使用LVM方式分區,分區時最好選擇LVM分區方式; 3. 建立PV; 4. 建立VG; 5. 建立LV; 6. 格式化LV,ext3,ext4等格式; 7. 挂載LV到指定目錄; 8. 将挂載資訊寫入:/etc/fstab; 9. LVM擴容操作 9.1 LV的擴容; (1) 使用VG的Free空間,對LV擴容; (2) 完成後需要在對檔案系統擴容; 9.2 VG的擴容 方式1: 通過增加PV來實作 方式2: 通過擴充raid(磁盤陣列)裝置的容量來間接對VG擴容 10. LVM縮減操作 10.1 LV的縮減 10.2 VG的縮減 11. 删除LVM

其他說明:

凡是以“#”開頭的行,都表示linux指令,如:

# fdisk -l           

複制

表示的是:

[root@localhost ~]# fdisk -l           

複制

如下是最初的系統基本資訊:

作業系統:Centos7;

[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   50G  1.8G   45G   4% /
devtmpfs                  16G     0   16G   0% /dev
tmpfs                     16G     0   16G   0% /dev/shm
tmpfs                     16G  1.6G   15G  11% /run
tmpfs                     16G     0   16G   0% /sys/fs/cgroup
/dev/vda1                976M  115M  795M  13% /boot
/dev/mapper/centos-home  139G   38G   95G  29% /home
tmpfs                    3.2G     0  3.2G   0% /run/user/0           

複制

[root@localhost ~]# fdisk -l
Disk /dev/vda: 214.7 GB, 214748364800 bytes, 419430400 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: 0x000a9e75

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     2099199     1048576   83  Linux
/dev/vda2         2099200   419430399   208665600   8e  Linux LVM

Disk /dev/mapper/centos-root: 53.7 GB, 53687091200 bytes, 104857600 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 /dev/mapper/centos-swap: 8455 MB, 8455716864 bytes, 16515072 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 /dev/mapper/centos-home: 151.5 GB, 151523426304 bytes, 295944192 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 /dev/vdb: 536.9 GB, 536870912000 bytes, 1048576000 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           

複制

說明:

上面這些是安裝完系統時就存在的,為友善後續的描述,在進行“df -h”時,省略掉了這些,其他指令也有部分省略。

一、建立系統分區

選擇/dev/sdb建立分區;

将整個vdb磁盤劃分為一個vdb1分區,格式為Linux LVM;

由于顯示資訊過長,這裡省略了部分不重要的顯示資訊。

# fdisk /dev/vdb
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 (分區号選擇1)
First sector (2048-31457279, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-31457279, default 31457279): 
Using default value 31457279
Partition 1 of type Linux and of size 15 GiB is set
 
Command (m for help): p (檢視已經建立的分區)
Disk /dev/sdb: 16.1 GB, 16106127360 bytes, 31457280 sectors
   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    31457279    15727616   83  Linux (系統預設為83,即:Linux)
 
Command (m for help): t (修改分區格式)
Selected partition 1
Hex code (type L to list all codes): 8e (8e為Linux LVM格式)
Changed type of partition 'Linux' to 'Linux LVM'
 
Command (m for help): p
Disk /dev/sdb: 16.1 GB, 16106127360 bytes, 31457280 sectors
   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048    31457279    15727616   8e  Linux LVM
 
Command (m for help): w           

複制

二、建立PV

首先說明一些簡單指令,常見的檢視指令包括如下三種:

  1. pv相關:pvdisplay、pvs、pvscan,pvcreate
  2. vg相關:vgdisplay、vgs、vgscan,vgcreate
  3. lv相關:lvdisplay、lvs、lvscan,lvcreate
# pvcreate /dev/vdb1 (建立PV)
# pvdisplay
"/dev/vdb1" 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               dZRM2W-X2Lz-I3Jz-i4S4-E8fN-BF4K-oZqhd3
# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/vdb1         lvm2 ---  10.00g 10.00g

# pvscan
  PV /dev/vdb1               lvm2 [10.00 GiB]           

複制

三、建立VG

建立VG時,可以使用如下幾種方式來建立

  1. raid:磁盤陣列;
  2. 分區,如:/dev/vdb1;
  3. 整個磁盤,如:/dev/vdc;
#vgcreate vgextdata /dev/vdb1
   Volume group "vgextdata" successfully created

使用分區/dev/sdb1 和 磁盤/dev/sdc 來建立vg,并設定PE大小為64M


# pvs
VG        #PV #LV #SN Attr   VSize    VFree   
  centos      1   3   0 wz--n- <199.00g    4.00m
  vgextdata   1   0   0 wz--n- <500.00g <500.00g



# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  vg0      2   0   0 wz--n- 19.99g 19.99g
上面知道:/dev/sdb1和/dev/sdb都是10G,是以vg0的大小為19.99G;
 
--- Volume group ---
  --- Volume group ---
  VG Name               vgextdata
  System ID             
  Format                lvm2
  Metadata Areas        1
  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                1
  Act PV                1
  VG Size               <500.00 GiB
  PE Size               4.00 MiB
  Total PE              127999
  Alloc PE / Size       0 / 0   
  Free  PE / Size       127999 / <500.00 GiB
  VG UUID               KDysf3-BRv7-2X5O-RoMq-PyTy-Oz5n-8nWX29           

複制

四、建立LV-->格式化LV-->挂載LV

關于LV的操作主要有3個步驟,分别為:

  1. 建立LV;
  2. 格式化LV,如:ext3,ext4等;
  3. 挂載LV到指定目錄下;

使用vg0建立lv1,初始大小設定為8G

# lvcreate -l 100%free -n  lvextdata vgextdata

 Logical volume "lvextdata" created.

#lvcreate -l 數字%free -n lv名 卷名:根據百分比自動配置設定剩餘空間,如配置設定剩餘空間的30%:lvcreate -l 30%free -n lv2 vg0:

#lvcreate -L 8G -n lv1 vg0
#  Logical volume "lv1" created.
#  從vg0中分出8G的空間給lv1使用
 
# vgs
  centos      1   3   0 wz--n- <199.00g 4.00m
  vgextdata   1   1   0 wz--n- <500.00g    0 

 
# lvs
  LV        VG        Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home      centos    -wi-ao---- <141.12g                                                    
  root      centos    -wi-ao----   50.00g                                                    
  swap      centos    -wi-ao----   <7.88g                                                    
  lvextdata vgextdata -wi-a----- <500.00g   

# lvdisplay
 --- Logical volume ---
  LV Path                /dev/vgextdata/lvextdata
  LV Name                lvextdata
  VG Name                vgextdata
  LV UUID                3kLHjR-jJUe-BmCo-Fajn-7Gdh-QI7Q-TD8cMN
  LV Write Access        read/write
  LV Creation host, time hngc-svr-mwd04, 2021-12-13 11:14:03 +0800
  LV Status              available
  # open                 0
  LV Size                <500.00 GiB
  Current LE             127999
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3           

複制

使用ext3檔案系統對LV進行格式化

# mkfs.ext4 /dev/vgextdata/lvextdata

 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
32768000 inodes, 131070976 blocks
6553548 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2279604224
4000 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, 
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
	102400000

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

複制

将lvextdata挂載到/data目錄下

# mkdir /data
# mount /dev/vgextdata/lvextdata /data
# df -Th
  Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/vgextdata-lvextdata ext4      493G   73M  467G   1% /data

開機啟動
# echo '/dev/vgextdata/lvextdata /data                  ext4    defaults        0 0' >> /etc/fstab           

複制

五、LV擴容

LV的擴容主要分2個步驟:

  1. 使用VG的Free空間,對LV擴容;
  2. 完成後需要在對檔案系統擴容;

檢視vg的容量,考慮從vg中再配置設定一些空間給LV

# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  vg0      2   1   0 wz--n- 19.99g 11.99g
  現在還有11.99G可用
 
# lvextend -L +3G /dev/vg0/lv1
  Size of logical volume vg0/lv1 changed from 8.00 GiB (2048 extents) to 11.00 GiB (2816 extents).
  Logical volume lv1 successfully resized.
将lv1添加3G容量
 
# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  centos   1   3   0 wz--n- 99.45g 4.00m
  vg0      2   1   0 wz--n- 19.99g 8.99g
由原先的11.99G可用變為8.99G可用
 
# lvs
  LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg0    -wi-ao---- 11.00g 
由原先的8G增加到了11G           

複制

對檔案系統進行擴容

# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv1     ext3      7.8G   19M  7.4G   1% /mnt/lv1
可是發現實際容量并沒有變化,還是7.8G
這時需要對檔案系統進行擴容           

複制

下面是擴容指令:

# resize2fs /dev/vg0/lv1
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg0/lv1 is mounted on /mnt/lv1; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg0/lv1 is now 2883584 blocks long.
對檔案系統擴容
 
# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv1     ext3       11G   21M   11G   1% /mnt/lv1
發現此時lv1的容量變為了11G           

複制

六、VG擴容

主要有兩種擴容方式:

  • 方式1: 通過增加PV來實作
  • 方式2: 通過擴充RAID(磁盤陣列)裝置的容量來間接對VG擴容(這裡不進行展示)

<方式1>: 通過增加PV來實作

使用/dev/sdd來建立一個PV

# pvcreate /dev/sdd
  Physical volume "/dev/sdd" successfully created
建立PV
 
# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sdb1  vg0    lvm2 a--  10.00g     0
  /dev/sdc   vg0    lvm2 a--  10.00g  8.99g
  /dev/sdd          lvm2 ---  15.00g 15.00g
新增加的PV有15G
 
# vgextend vg0 /dev/sdd
  Volume group "vg0" successfully extended
使用PV對VG擴容
 
# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  vg0      3   1   0 wz--n- 34.99g 23.99g
擴容後的vg0由19.99G變為了34.99G           

複制

<方式2>: 通過擴充raid(磁盤陣列)裝置的容量來間接對VG擴容

這裡不進行闡述