LVM(逻辑卷)概念
逻辑卷管理器(Logical volume Manager)是 Linux 系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而 LVM 技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的低层架构和布局,就可以实现对硬盘分区的动态调整。
LVM 就是通过将底层的物理硬盘封装,然后以逻辑卷的方式呈现给上层应用。当我们对底层的物理硬盘进行操作时,不再是针对分区进行操作,而是通过逻辑卷对底层硬盘进行管理操作。
结构
- 物理卷( Physical Volume)处于 LVM 的最底层,它们可以是实际物理硬盘上的分区、整个物理硬盘或 RAID 设备
- 卷组(Volume Group)建立在物理卷之上,卷组建立后便可动态添加物理卷到卷组中
- 逻辑卷(Logical Volume)建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后便可动态地扩展和缩小空间
LVM 的优势
- 灵活的容量
- 重新设定存储池大小
- 在线数据重新定位
- 方便设备命名
创建 LVM
创建逻辑卷的过程是把若干物理卷整合到一起组成卷组,在卷组上重新划分出新的分区。
首先添加一个 20Gb 硬盘。
创建物理卷(PV)
使用 lsblk
查看块设备
> lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 40G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 39G 0 part ├─centos-root 253:0 0 35.1G 0 lvm / └─centos-swap 253:1 0 3.9G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk
使用 pvcreate
创建物理卷PV
> pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created. # 查看是否创建成功 > pvs PV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a-- <39.00g 4.00m /dev/sdb lvm2 --- 20.00g 20.00g
使用 pvdisplay
查看详情
> pvdisplay /dev/sdb "/dev/sdb" is a new physical volume of "20.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb VG Name PV Size 20.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID 2M2Is3-ZD7F-lZH0-Ea1o-TAiL-I7S0-xQlXH1
创建卷组(VG)
使用 vgcreate
创建卷组VG,并且此处可以 -s
选项指定PE(LE)的大小,(默认PE大小4M)
> vgcreate datavg /dev/sdb Volume group "datavg" successfully created # 查看是否创建成功 > vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- <39.00g 4.00m datavg 1 0 0 wz--n- <20.00g <20.00g
使用 vgdisplay
查看详情
> vgdisplay datavg --- Volume group --- VG Name datavg 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 <20.00 GiB PE Size 4.00 MiB Total PE 5119 Alloc PE / Size 0 / 0 Free PE / Size 5119 / <20.00 GiB VG UUID bccduc-FvjJ-yCpe-as1Z-KeQH-W1kg-2WON8u
PE大,读取速度快,但浪费空间。反之,读取速度慢,但节省空间。类似于 socket
创建逻辑卷(LV)
使用 lvcreate
创建LV。
lvcreate -n lvname -L lvsize(M,G) vgname
> lvcreate -n lv1 -L 900M datavg Logical volume "lv1" created. # 查看是否创建成功 > lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- <35.12g swap centos -wi-ao---- <3.88g lv1 datavg -wi-a----- 900.00m
使用 lvdisplay
查看详情
> lvdisplay /dev/datavg/lv1 --- Logical volume --- LV Path /dev/datavg/lv1 LV Name lv1 VG Name datavg LV UUID FOfx3Z-Nr2j-gjdL-eMSs-7Gu3-ZtLR-ro5zF0 LV Write Access read/write LV Creation host, time centos-ps, 2023-01-13 17:06:06 +0800 LV Status available # open 0 LV Size 900.00 MiB Current LE 225 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:2
格式化逻辑卷(LV)
xfs文件系统只支持增大,不支持减小。ext2、ext3、ext4增大减小都支持。
使用 mkfs
格式化逻辑卷
> mkfs.ext4 /dev/datavg/lv1 mke2fs 1.42.9 (28-Dec-2013) 文件系统标签= OS type: Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 57600 inodes, 230400 blocks 11520 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=236978176 8 block groups 32768 blocks per group, 32768 fragments per group 7200 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (4096 blocks): 完成 Writing superblocks and filesystem accounting information: 完成
挂载并使用
使用 mount
挂载
> mkdir /opt/lv1 > mount /dev/datavg/lv1 /opt/lv1 > df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 16K 1.9G 1% /dev/shm tmpfs 1.9G 12M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/centos-root 36G 9.4G 26G 27% / /dev/sda1 1014M 195M 820M 20% /boot vmhgfs-fuse 293G 144G 150G 49% /mnt/hgfs tmpfs 378M 0 378M 0% /run/user/1002 tmpfs 378M 0 378M 0% /run/user/0 /dev/mapper/datavg-lv1 870M 2.3M 807M 1% /opt/lv1
可以看到挂载成功了,但是重启后又需要挂载。
我们可以编辑
/etc/fstab
添加一行/dev/datavg/lv1 /opt/lv1 ext4 defaults 0 0
> vim /etc/fstab # /etc/fstab # Created by anaconda on Thu Jul 28 16:11:47 2022 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=e3727324-7c1e-4dd2-8821-ab4a6fec3316 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 /dev/datavg/lv1 /opt/lv1 ext4 defaults 0 0 > mount -a > df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 16K 1.9G 1% /dev/shm tmpfs 1.9G 12M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/mapper/centos-root 36G 9.4G 26G 27% / /dev/sda1 1014M 195M 820M 20% /boot vmhgfs-fuse 293G 144G 150G 49% /mnt/hgfs tmpfs 378M 0 378M 0% /run/user/1002 tmpfs 378M 0 378M 0% /run/user/0 /dev/mapper/datavg-lv1 870M 2.3M 807M 1% /opt/lv1