一、LVM介绍
管理磁盘、使用磁盘的一种方式的称呼
优势:
1、在不影响数据的情况下, 扩容、缩容
2、支持快照功能, 方便数据备份
磁盘/分区 ---> pv(物理卷) ----> vg(卷组) -----> lv(逻辑卷) ----> 格式化/挂载使用
注意:
磁盘/分区,要求是裸设备(无文件系统的设备)
建议规范做法将分区的ID修改8e
二、创建逻辑卷
创建一个逻辑卷/dev/data/web大小为 5G 文件系统 ext4文件系统 挂在在/data/web下
关闭虚拟机添加至少三块硬盘,然后重新启动虚拟机
1.创建物理卷
首先查看我们添加的网卡名称,分别是sdb,sdc,sdd,sde四块硬盘。
[root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─cl-root 253:0 0 17G 0 lvm / └─cl-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk sdc 8:32 0 20G 0 disk sdd 8:48 0 20G 0 disk sde 8:64 0 20G 0 disk sdf 8:80 0 20G 0 disk sr0 11:0 1 4.1G 0 rom
创建物理卷并查看
[root@localhost ~]# pvscan PV /dev/sda2 VG cl lvm2 [19.00 GiB / 0 free] Total: 1 [19.00 GiB] / in use: 1 [19.00 GiB] / in no VG: 0 [0 ] [root@localhost ~]# pvcreate /dev/sdb /dev/sdc Physical volume "/dev/sdb" successfully created. Physical volume "/dev/sdc" successfully created. [root@localhost ~]# pvscan PV /dev/sda2 VG cl lvm2 [19.00 GiB / 0 free] PV /dev/sdb lvm2 [20.00 GiB] PV /dev/sdc lvm2 [20.00 GiB] Total: 3 [59.00 GiB] / in use: 1 [19.00 GiB] / in no VG: 2 [40.00 GiB]
2.创建卷组data
[root@localhost ~]# vgcreate data /dev/sdb /dev/sdc Volume group "data" successfully created
[root@localhost ~]# vgdisplay data
--- Volume group ---
VG Name data
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 39.99 GiB
PE Size 4.00 MiB
Total PE 10238
Alloc PE / Size 0 / 0
Free PE / Size 10238 / 39.99 GiB
VG UUID fnBs7P-WSXx-BuZE-0qic-peDx-i5QI-iX0RJi
3.创建逻辑卷web
[root@localhost ~]# lvcreate -L 5G -n web data Logical volume "web" created. [root@localhost ~]# lvscan ACTIVE '/dev/cl/swap' [2.00 GiB] inherit ACTIVE '/dev/cl/root' [17.00 GiB] inherit ACTIVE '/dev/data/web' [5.00 GiB] inherit
4.创建文件系统ext4 挂载使用
[root@localhost ~]# mkfs -t ext4 /dev/data/web mke2fs 1.42.9 (28-Dec-2013) 文件系统标签= OS type: Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 327680 inodes, 1310720 blocks 65536 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=1342177280 40 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 Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (32768 blocks): 完成 Writing superblocks and filesystem accounting information: 完成
[root@localhost ~]# tail -1 /etc/fstab /dev/data/web /data/web ext4 defaults 0 0
[root@localhost data]# mkdir -p /data/web
[root@localhost data]# mount -a
[root@localhost data]# df -hT | grep "data" /dev/mapper/data-web ext4 4.8G 20M 4.6G 1% /data/web
[root@localhost ~]# touch /data/web/{1..10}.html [root@localhost ~]# ls /data/web/ 10.html 1.html 2.html 3.html 4.html 5.html 6.html 7.html 8.html 9.html lost+found
[root@localhost ~]# ls -l /dev/data/web lrwxrwxrwx. 1 root root 7 12月 26 09:39 /dev/data/web -> ../dm-2
[root@localhost ~]# ls -l /dev/dm-2 brw-rw----. 1 root disk 253, 2 12月 26 09:39 /dev/dm-2
[root@localhost ~]# ls -l /dev/mapper/data-web lrwxrwxrwx. 1 root root 7 12月 26 09:39 /dev/mapper/data-web -> ../dm-2
三、以指定的PE数量方式创建逻辑卷
创建逻辑卷/dev/data/nginx, 容量800M, xfs文件系统 /data/nginx
[root@localhost ~]# lvcreate -l 200 -n nginx data Logical volume "nginx" created. [root@localhost ~]# lvscan ACTIVE '/dev/cl/swap' [2.00 GiB] inherit ACTIVE '/dev/cl/root' [17.00 GiB] inherit ACTIVE '/dev/data/web' [5.00 GiB] inherit ACTIVE '/dev/data/nginx' [800.00 MiB] inherit
[root@localhost ~]# pvcreate /dev/sdd Physical volume "/dev/sdd" successfully created. [root@localhost ~]# vgcreate -s 16 vg01 /dev/sdd Volume group "vg01" successfully created [root@localhost ~]# vgdisplay vg01 --- Volume group --- VG Name vg01 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 19.98 GiB PE Size 16.00 MiB Total PE 1279 Alloc PE / Size 0 / 0 Free PE / Size 1279 / 19.98 GiB VG UUID Uhqfbe-d76p-c3Fp-VNVj-EFWj-e2th-s7vwym
四、逻辑卷扩展(第一种方式)
流程:
1、扩展逻辑卷的物理边界大小
2、扩展逻辑卷的文件系统大小
resize2fs 扩展ext文件系统
xfs_growfs 扩展xfs文件系统
扩展逻辑卷/dev/data/web容量到25GB
1) 确认卷组有足够的剩余空间
[root@localhost ~]# vgdisplay data | grep -i "free" Free PE / Size 8758 / 34.21 GiB
2) 扩展物理边界
[root@localhost ~]# lvextend -L +20G /dev/data/web Size of logical volume data/web changed from 5.00 GiB (1280 extents) to 25 .00 GiB (6400 extents). Logical volume data/web successfully resized. [root@localhost ~]# lvscan ACTIVE '/dev/cl/swap' [2.00 GiB] inherit ACTIVE '/dev/cl/root' [17.00 GiB] inherit ACTIVE '/dev/data/web' [25.00 GiB] inherit ACTIVE '/dev/data/nginx' [800.00 MiB] inherit
3) 扩展文件系统
[root@localhost ~]# resize resize2fs resizecons resizepart [root@localhost ~]# resize2fs /dev/data/web resize2fs 1.42.9 (28-Dec-2013) Filesystem at /dev/data/web is mounted on /data/web; on-line resizing requir edold_desc_blocks = 1, new_desc_blocks = 4 The filesystem on /dev/data/web is now 6553600 blocks long. [root@localhost ~]# df -hT | grep "web" /dev/mapper/data-web ext4 25G 28M 24G 1% /data/web
第二种方式
为逻辑卷/dev/data/nginx扩展30GB空间 【xfs文件系统】
1) 确认卷组的剩余空间
[root@localhost ~]# vgdisplay data | grep -i "free" Free PE / Size 3638 / 14.21 GiB
2) 扩展卷组data
[root@localhost ~]# pvcreate /dev/sdf Physical volume "/dev/sdf" successfully created. [root@localhost ~]# vgextend data /dev/sdf Volume group "data" successfully extended [root@localhost ~]# vgdisplay data | grep -i "free" Free PE / Size 8757 / 34.21 GiB
3) 扩展逻辑卷物理边界
[root@localhost ~]# lvextend -L +30G /dev/data/nginx Size of logical volume data/nginx changed from 800.00 MiB (200 extents) to 30.78 GiB (7880 extents). Logical volume data/nginx successfully resized. [root@localhost ~]# lvscan ACTIVE '/dev/cl/swap' [2.00 GiB] inherit ACTIVE '/dev/cl/root' [17.00 GiB] inherit ACTIVE '/dev/data/web' [25.00 GiB] inherit ACTIVE '/dev/data/nginx' [30.78 GiB] inherit
4) 扩展文件系统
[root@localhost ~]# tail -1 /etc/fstab /dev/data/nginx /data/nginx xfs defaults 0 0
[root@localhost ~]# mkfs -t xfs /dev/data/nginx
meta-data=/dev/data/nginx isize=512 agcount=4, agsize=2017280 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=8069120, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=3940, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/cl-root xfs 17G 1.7G 16G 10% /
devtmpfs devtmpfs 902M 0 902M 0% /dev
tmpfs tmpfs 912M 0 912M 0% /dev/shm
tmpfs tmpfs 912M 8.7M 904M 1% /run
tmpfs tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 139M 876M 14% /boot
tmpfs tmpfs 183M 0 183M 0% /run/user/0
/dev/mapper/data-web ext4 25G 28M 24G 1% /data/web
[root@localhost ~]# tail -1 /etc/fstab
/dev/data/nginx /data/nginx xfs defaults 0 0
五、逻辑卷缩减
流程:
1、先缩减文件系统
2、再缩减物理边界
注意事项:
1、逻辑卷要处于卸载状态
2、建议备份数据
3、xfs文件系统不支持缩减
4、缩减后的空间要可以保存之前数据
缩减逻辑卷/dev/data/web的空间到10G
1) 备份数据
[root@localhost data]# ls /tmp/ systemd-private-4c0fe213859943b998b92d994362d0c4-vmtoolsd.service-RGsyh9 web_2020_12_26.tar.gz web_.tar.gz
2) 卸载逻辑卷
[root@localhost ~]# umount /dev/data/web
3) 检测逻辑卷文件系统是否有损坏
[root@localhost ~]# fsck -f /dev/data/web fsck,来自 util-linux 2.23.2 e2fsck 1.42.9 (28-Dec-2013) 第一步: 检查inode,块,和大小 第二步: 检查目录结构 第3步: 检查目录连接性 Pass 4: Checking reference counts 第5步: 检查簇概要信息 /dev/mapper/data-web: 21/1638400 files (0.0% non-contiguous), 142625/6553600 blocks
4) 缩减文件系统到10GB
[root@localhost ~]# resize2fs -f /dev/data/web 10G resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/data/web to 2621440 (4k) blocks. The filesystem on /dev/data/web is now 2621440 blocks long.
5) 缩减物理边界
[root@localhost ~]# lvreduce -L-5GB /dev/data/web WARNING: Reducing active logical volume to 20.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce data/web? [y/n]: y Size of logical volume data/web changed from 25.00 GiB (6400 extents) to 2 0.00 GiB (5120 extents). Logical volume data/web successfully resized.
[root@localhost ~]# lvscan
ACTIVE '/dev/cl/swap' [2.00 GiB] inherit
ACTIVE '/dev/cl/root' [17.00 GiB] inherit
ACTIVE '/dev/data/web' [20.00 GiB] inherit
ACTIVE '/dev/data/nginx' [30.78 GiB] inherit
6) 重新挂载逻辑卷, 验证可正常查看数据
[root@localhost ~]# mount /dev/data/web /data/web/ [root@localhost ~]# ls /data/web/ 10.html 2.html 4.html 6.html 8.html lost+found 1.html 3.html 5.html 7.html 9.html
六、逻辑卷快照
作用:结合特定应用程序, 方便备份数据
基于cow(copy on write 写时复制)机制
基于快照备份数据
1) 创建快照
[root@localhost ~]# lvcreate -s -p r -n web_snap -L 500M /dev/data/web Using default stripesize 64.00 KiB. Logical volume "web_snap" created.
[root@localhost ~]# lvscan
ACTIVE '/dev/cl/swap' [2.00 GiB] inherit
ACTIVE '/dev/cl/root' [17.00 GiB] inherit
ACTIVE Original '/dev/data/web' [20.00 GiB] inherit
ACTIVE '/dev/data/nginx' [30.78 GiB] inherit
ACTIVE Snapshot '/dev/data/web_snap' [500.00 MiB] inherit
2) 挂载快照,备份数据
[root@localhost ~]# mount /dev/data/web_snap /mnt/ mount: /dev/mapper/data-web_snap 写保护,将以只读方式挂载 [root@localhost ~]# tar czf /tmp/web_$(date +%Y_%m_%d).tar.gz /mnt/
3) 卸载、删除快照
[root@localhost ~]# umount /dev/data/web_snap [root@localhost ~]# lvremove /dev/data/web_snap Do you really want to remove active logical volume data/web_snap? [y/n]: y Logical volume "web_snap" successfully removed [root@localhost ~]# lvscan ACTIVE '/dev/cl/swap' [2.00 GiB] inherit ACTIVE '/dev/cl/root' [17.00 GiB] inherit ACTIVE '/dev/data/web' [20.00 GiB] inherit ACTIVE '/dev/data/nginx' [30.78 GiB] inherit