本文环境:CentOS7
1.什么是逻辑卷(Logical Volume)?
逻辑卷是系统的一种磁盘管理方式,目的是把硬盘空间从物理硬盘的管理方式中跳出来,进行更方便的统一管理分配。
逻辑卷是由逻辑磁盘形成的虚拟盘,也可称为磁盘分区。每个卷可以看作一个逻辑盘,可以是一个物理硬盘的逻辑盘。
图片是网上引用的,
2.逻辑卷的特点和作用
逻辑卷由下层卷组(Physical Volume),物理卷(Volume Group)格式化组成
物理卷是将底层的硬盘划分为了一个一个的PE(Physical Extend),我们的LVM磁盘管理中PE的默认大小是4M大小,PE就是我们逻辑卷管理的最基本单位
允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小
允许在多个物理设备间重新组织文件系统
将设备指定为物理卷
物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的
可以在逻辑卷上创建文件系统
3 .创建逻辑卷
3.1 创建逻辑卷,刚刚讲了,逻辑卷是由下层的卷组和物理卷格式化组成,所以先创建物理卷和卷组
3.1.1 创建物理卷(PV)使用pvcreate
我的磁盘情况如下
1 sda 8:0 0 200G 0 disk 2 ├─sda1 8:1 0 1G 0 part /boot 3 ├─sda2 8:2 0 100G 0 part / 4 ├─sda3 8:3 0 50G 0 part /data 5 ├─sda4 8:4 0 1K 0 part 6 └─sda5 8:5 0 2M 0 part [SWAP] 7 sdb 8:16 0 20G 0 disk 8 sdc 8:32 0 20G 0 disk 9 sdd 8:48 0 200G 0 disk 10 sde 8:64 0 10G 0 disk 11 sr0 11:0 1 10.3G 0 rom
物理卷可以使用磁盘和分区来创建,如果时间分区来创建,对磁盘分区之后在创建物理卷(PV)。
下面我使用sdb和sde两块磁盘来创建物理卷
pvcreate /dev/sd{b,e} #这样写就是两块一起创建了
1 [root@CentOS-7-64 ~]# pvcreate /dev/sd{b,e} 2 Physical volume "/dev/sdb" successfully created. 3 Physical volume "/dev/sde" successfully created. 4 [root@CentOS-7-64 ~]#
然后使用 pvs和lvdisplay 来查看创建好的(物理卷)PV
2 [root@CentOS-7-64 ~]# pvs #查看简单的信息 3 PV VG Fmt Attr PSize PFree 4 /dev/sdb lvm2 --- 20.00g 20.00g 5 /dev/sde lvm2 --- 10.00g 10.00g 6 [root@CentOS-7-64 ~]#
1 [root@CentOS-7-64 ~]# pvdisplay #查看详细的PV各个信息 2 "/dev/sdb" is a new physical volume of "20.00 GiB" 3 --- NEW Physical volume --- 4 PV Name /dev/sdb 5 VG Name 6 PV Size 20.00 GiB 7 Allocatable NO 8 PE Size 0 9 Total PE 0 10 Free PE 0 11 Allocated PE 0 12 PV UUID YW3kNy-jMFI-fTW0-2DmX-7KrK-NBP4-kYA0U8 13 14 "/dev/sde" is a new physical volume of "10.00 GiB" 15 --- NEW Physical volume --- 16 PV Name /dev/sde 17 VG Name 18 PV Size 10.00 GiB 19 Allocatable NO 20 PE Size 0 21 Total PE 0 22 Free PE 0 23 Allocated PE 0 24 PV UUID 1uiW6y-JQDQ-uA3q-Mryc-kG7R-NX1c-4P96AT 25 26 [root@CentOS-7-64 ~]#
3.2 如上物理卷创建成功了,下面把物理卷组成卷组(vg)使用命令 vgcreate
vgcreate 部分帮助信息如下
1 vgcreate - Create a volume group
2
3 vgcreate VG_new PV ...
4 [ -A|--autobackup y|n ]
5 [ -c|--clustered y|n ]
6 [ -l|--maxlogicalvolumes Number ]
7 [ -p|--maxphysicalvolumes Number ]
8 [ -M|--metadatatype lvm2|lvm1 ]
9 [ -s|--physicalextentsize Size[m|UNIT] ]
10 [ -f|--force ]
11 [ -Z|--zero y|n ]
创建vg
1 [root@CentOS-7-64 ~]# vgcreate -s 16M vg /dev/sdb #-s 指定每个PE(Physical Extend)的大小 默认为4M 2 Volume group "vg" successfully created
查看vg
vgs 和 vgdisplay 命令
1 [root@CentOS-7-64 ~]# vgs #vgs 查看的显示 2 VG #PV #LV #SN Attr VSize VFree 3 vg 1 0 0 wz--n- 19.98g 19.98g
1 [root@CentOS-7-64 ~]# vgdisplay #vgdisplay 查看的显示 2 --- Volume group --- 3 VG Name vg 4 System ID 5 Format lvm2 6 Metadata Areas 1 7 Metadata Sequence No 1 8 VG Access read/write 9 VG Status resizable 10 MAX LV 0 11 Cur LV 0 12 Open LV 0 13 Max PV 0 14 Cur PV 1 15 Act PV 1 16 VG Size 19.98 GiB 17 PE Size 16.00 MiB 18 Total PE 1279 19 Alloc PE / Size 0 / 0 20 Free PE / Size 1279 / 19.98 GiB 21 VG UUID OB7OIp-HK6l-VsN9-YmB0-vk10-vE0M-aL6CWR 22
3.3 扩展卷组的大小 vgextend
下面我把另一个磁盘sde也加入卷组vg中
1 [root@CentOS-7-64 ~]# vgextend vg /dev/sde 2 Volume group "vg" successfully extended
再次查看卷组vg的信息
1 [root@CentOS-7-64 ~]# vgdisplay 2 --- Volume group --- 3 VG Name vg 4 System ID 5 Format lvm2 6 Metadata Areas 2 7 Metadata Sequence No 2 8 VG Access read/write 9 VG Status resizable 10 MAX LV 0 11 Cur LV 0 12 Open LV 0 13 Max PV 0 14 Cur PV 2 15 Act PV 2 16 VG Size <29.97 GiB 17 PE Size 16.00 MiB 18 Total PE 1918 19 Alloc PE / Size 0 / 0 20 Free PE / Size 1918 / <29.97 GiB 21 VG UUID OB7OIp-HK6l-VsN9-YmB0-vk10-vE0M-aL6CWR
VG Size 已经改变了 说明已经扩展完成了
3.5 前面准备工作创建了物理卷(PV),卷组(VG),下面创建逻辑卷(LV)
使用lvcreate 命令
1 1 lvcreate - Create a logical volume 2 2 3 3 Create a linear LV. 4 4 lvcreate -L|--size Size[m|UNIT] VG 5 5 [ -l|--extents Number[PERCENT] ] 6 6 [ --type linear ] 7 7 [ COMMON_OPTIONS ] 8 8 [ PV ... ] 9 -------------------------常用选项--------------- 10 Common options for command: 11 147 [ -a|--activate y|n|ay ] 12 148 [ -A|--autobackup y|n ] 13 149 [ -C|--contiguous y|n ] 14 150 [ -M|--persistent y|n ] 15 151 [ -j|--major Number ] 16 152 [ -k|--setactivationskip y|n ] 17 153 [ -K|--ignoreactivationskip ] 18 154 [ -n|--name String ] 19 155 [ -p|--permission rw|r ] 20 156 [ -r|--readahead auto|none|Number ] 21 157 [ -W|--wipesignatures y|n ] 22 158 [ -Z|--zero y|n ]
lvcreate -n lv -L 5G vg
1 [root@CentOS-7-64 ~]# lvcreate -n lv -L 5G vg 2 WARNING: xfs signature detected on /dev/vg/lv at offset 0. Wipe it? [y/n]: y 3 Wiping xfs signature on /dev/vg/lv. 4 Logical volume "lv" created. 5 [root@CentOS-7-64 ~]#
使用 lvs 和lvdisplay查看
1 [root@CentOS-7-64 ~]# lvdisplay # lvdisplay 显示如下 2 --- Logical volume --- 3 LV Path /dev/vg/lv 4 LV Name lv 5 VG Name vg 6 LV UUID BFWlJL-qcFU-OWJk-A3Yb-xTLf-c3cg-utCrnl 7 LV Write Access read/write 8 LV Creation host, time CentOS-7-64, 2019-10-20 10:42:04 +0800 9 LV Status available 10 # open 0 11 LV Size 5.00 GiB 12 Current LE 320 13 Segments 1 14 Allocation inherit 15 Read ahead sectors auto 16 - currently set to 8192 17 Block device 253:0
3.6 既然逻辑卷做完了,下面需要个逻辑卷创建文件系统
我使用的是xte4 因为ext4创建的逻辑卷可以使用 resize2fs 缩减,而xfs文件系统不可缩减
1 [root@CentOS-7-64 ~]# mkfs -t ext4 /dev/vg/lv
2 mke2fs 1.42.9 (28-Dec-2013)
3 Filesystem label=
4 OS type: Linux
5 Block size=4096 (log=2)
6 Fragment size=4096 (log=2)
7 Stride=0 blocks, Stripe width=0 blocks
8 327680 inodes, 1310720 blocks
9 65536 blocks (5.00%) reserved for the super user
10 First data block=0
11 Maximum filesystem blocks=1342177280
12 40 block groups
13 32768 blocks per group, 32768 fragments per group
14 8192 inodes per group
15 Superblock backups stored on blocks:
16 32768, 98304, 163840, 229376, 294912, 819200, 884736
17
18 Allocating group tables: done
19 Writing inode tables: done
20 Creating journal (32768 blocks): done
21 Writing superblocks and filesystem accounting information: done
1 [root@CentOS-7-64 ~]# blkid -s TYPE #查看文件系统
2 /dev/sda1: TYPE="xfs"
3 /dev/sda2: TYPE="xfs"
4 /dev/sda3: TYPE="xfs"
5 /dev/sda5: TYPE="swap"
6 /dev/sde: TYPE="LVM2_member"
7 /dev/sdb: TYPE="LVM2_member"
8 /dev/mapper/vg-lv: TYPE="ext4" #文件系统创建成功了
9 [root@CentOS-7-64 ~]#
3.7 问价系统创建成功了挂载就能使用了
1 [root@CentOS-7-64 ~]# mount /dev/mapper/vg-lv /mnt # 挂载到/mnt
3.8 扩展逻辑卷
我的逻辑卷只分配5G,空间不大,和分区不一样的是逻辑卷可以扩展 使用 lvextent 或者 lvresize
扩展逻辑卷不需要取消挂载,可以在挂载状态扩展,而减少逻辑卷必须先取消挂载,不然直接取消挂载再去缩小会有莫名其实的错误。我已经趟过坑了
1 lvresize -L +5G /dev/vg/lv 2 Size of logical volume vg/lv changed from 5.00 GiB (64 extents) to 10.00 GiB (384 extents). 3 Logical volume vg/lv successfully resized.
1 [root@CentOS-7-64 ~]# lvdisplay 2 --- Logical volume --- 3 LV Path /dev/vg/lv 4 LV Name lv 5 VG Name vg 6 LV UUID BFWlJL-qcFU-OWJk-A3Yb-xTLf-c3cg-utCrnl 7 LV Write Access read/write 8 LV Creation host, time CentOS-7-64, 2019-10-20 10:42:04 +0800 9 LV Status available 10 # open 0 11 LV Size 10.00 GiB 12 Current LE 3840 13 Segments 2 14 Allocation inherit 15 Read ahead sectors auto 16 - currently set to 8192 17 Block device 253:0
这样逻辑卷的扩展就完成了 ,但是还有一个问题,那刚刚扩展的5G没有文件系统,所以还需要一个命令 resize2fs /dev/vg/lv (此命令只针对ext文件系统),如果扩展的是xfs文件系统需使用 xfs_growfs /dev/vg/lv
在刚刚扩展时 lvextend -r 选项可以自动同步文件系统。部分文件系统类型。
注意:文件系统大小和逻辑卷大小一定要保持一致才行。如果逻辑卷大于文件系统,由于部分区域未格式化成文件系统会造成空间的浪费。如果逻辑卷小于文件系统,哪数据就出问题了。
4.总结
逻辑卷相比分区可扩展,缩减,读取性能貌似还还好,而且linux系统中逻辑卷可以使用raid
逻辑卷可以做快照,可以移除,迁移(需要先禁用逻辑卷lvchange,然后导出lvexport)
假若硬盘或分区出现故障,逻辑卷还可以移动到相同的卷组中(使用pvmove移动空间,但是卷组中的空间必须不小于被移动的空间),
逻辑卷很方便灵活,可以自由扩展,但是/boot不可以使用逻辑卷。因为这里面是系统中的启动项,逻辑卷是虚拟的,所以把逻辑卷
放入/boot中系统都起不来。