第407集磁盘管理-Linux系统磁盘进阶 | 字数总计: 3.8k | 阅读时长: 15分钟 | 阅读量:
磁盘管理 - Linux系统磁盘进阶 1. LVM概述 1.1 LVM基本概念 LVM (Logical Volume Manager) 逻辑卷管理器,是Linux环境下对磁盘分区进行管理的一种机制。
LVM组成 :
物理卷(PV) : 把常规的块设备(硬盘,分区等可以读写数据的设备)通过pvcreate命令对其进行初始化,就成了物理卷
卷组(VG) : 把多个物理卷的容量组成一个逻辑整体,可以从里面灵活分配容量
逻辑卷(LV) : 从卷组中划分部分空间成为一个可以读写数据的逻辑单元。需要对其格式化然后挂载使用
1.2 LVM架构图 1 2 物理磁盘 → 物理卷(PV) → 卷组(VG) → 逻辑卷(LV) → 文件系统 → 挂载使用 /dev/sdb /dev/sdb datavg /dev/datavg/lv1 xfs/ext4 /data
1.3 LVM优势
灵活扩容 : 可以在线扩容,无需卸载文件系统
动态管理 : 可以动态调整逻辑卷大小
跨磁盘 : 可以将多个物理磁盘组成一个逻辑卷
快照功能 : 支持快照备份
在线迁移 : 支持在线数据迁移
1.4 LVM与普通分区对比
特性
普通分区
LVM逻辑卷
扩容
困难,需要重新分区
简单,在线扩容
跨磁盘
不支持
支持
动态调整
不支持
支持
快照
不支持
支持
管理复杂度
简单
相对复杂
2. 部署逻辑卷 2.1 创建过程 创建逻辑卷的基本流程:
创建物理卷 : 添加物理磁盘
创建卷组 : 添加物理卷加入到该卷组
在卷组中划分逻辑卷 : 创建逻辑卷
格式化并挂载 : 格式化文件系统并挂载使用
2.2 步骤0: 准备物理磁盘 1 2 3 4 5 [root@linux-node1 ~] sdb 8:16 0 1G 0 disk sdc 8:32 0 1G 0 disk sdd 8:48 0 1G 0 disk
2.3 步骤1: 将磁盘加入PV 1 2 3 4 5 6 7 8 9 10 11 [root@linux-node1 ~] Physical volume "/dev/sdb" successfully created. [root@linux-node1 ~] PV VG Fmt Attr PSize PFree /dev/sdb lvm2 --- 1.00g 1.00g [root@linux-node1 ~]
批量创建物理卷 :
1 2 3 4 5 pvcreate /dev/sdb /dev/sdc /dev/sdd pvcreate /dev/sd[bcd]
2.4 步骤2: 创建名为datavg的卷组 1 2 3 4 5 6 7 8 9 10 11 [root@linux-node1 ~] Volume group "datavg" successfully created [root@linux-node1 ~] VG datavg 1 0 0 wz--n- 1020.00m 1020.00m [root@linux-node1 ~]
创建卷组时指定PE大小 :
1 2 vgcreate -s 8M datavg /dev/sdb
2.5 步骤3: 创建逻辑卷 1 2 3 4 5 6 7 8 9 10 [root@linux-node1 ~] Logical volume "lv1" created. [root@linux-node1 ~] ACTIVE '/dev/datavg/lv1' [100.00 MiB] inherit [root@linux-node1 ~]
lvcreate常用选项 :
选项
功能
示例
-L
指定逻辑卷大小
-L 100M
-l
指定PE数量
-l 25
-n
指定逻辑卷名称
-n lv1
-s
创建快照
-s -n snap1
创建逻辑卷的多种方式 :
1 2 3 4 5 6 7 8 lvcreate -L 100M -n lv1 datavg lvcreate -l 50%VG -n lv1 datavg lvcreate -l 100%FREE -n lv1 datavg
2.6 步骤4: 格式化文件系统 1 2 3 4 5 [root@linux-node1 ~] [root@linux-node1 ~]
2.7 步骤5: 挂载并使用 1 2 3 4 5 6 7 8 9 10 11 [root@linux-node1 ~] [root@linux-node1 ~] [root@linux-node1 ~] Filesystem Size Used Avail Use% Mounted on ... /dev/mapper/datavg-lv1 97M 5.2M 92M 6% /lv1
2.8 完整部署脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #!/bin/bash pvcreate /dev/sdb /dev/sdc /dev/sdd vgcreate datavg /dev/sdb /dev/sdc /dev/sdd lvcreate -L 500M -n lv1 datavg mkfs.xfs /dev/datavg/lv1 mkdir -p /lv1mount /dev/datavg/lv1 /lv1 echo "/dev/datavg/lv1 /lv1 xfs defaults 0 0" >> /etc/fstabdf -h |grep lv1
3. 卷组池管理 3.1 扩展卷组VG 扩展卷组VG, 扩大VG卷组容量。
步骤1: 新硬盘加入PV 1 2 3 [root@linux-node1 ~] Physical volume "/dev/sdc" successfully created.
步骤2: 使用vgextend扩展 1 2 3 4 5 6 7 8 [root@linux-node1 ~] Volume group "datavg" successfully extended [root@linux-node1 ~] VG datavg 2 1 0 wz--n- <2.00g <1.90g
3.2 移除卷组VG 移除vg组中某一块硬盘。
1 2 3 4 5 [root@linux-node1 ~] Removed "/dev/sdb" from volume group "datavg"
3.3 数据迁移卷组VG 同一卷组的磁盘才可以进行在线迁移。
步骤1: 检查当前逻辑卷VG中PV使用情况 1 2 3 4 [root@linux-node1 ~] PV VG Fmt Attr PSize PFree /dev/sdb vg1 lvm2 a-- 2.00g 1.76g /dev/sdc vg1 lvm2 a-- 2.00g 2.00g
步骤2: pvmove在线数据迁移至其他pv 1 2 3 4 [root@linux-node1 ~] /dev/sdb: Moved: 41.33% /dev/sdb: Moved: 100.00%
步骤3: 检查是否将sdb数据迁移至sdc 1 2 3 4 [root@linux-node1 ~] PV VG Fmt Attr PSize PFree /dev/sdb vg1 lvm2 a-- 2.00g 2.00g /dev/sdc vg1 lvm2 a-- 2.00g 1.76g
数据迁移说明 :
迁移后,/dev/sdb的数据已全部迁移到/dev/sdc
/dev/sdb现在完全空闲,可以安全移除
3.4 卷组管理命令总结
命令
功能
示例
vgcreate
创建卷组
vgcreate datavg /dev/sdb
vgextend
扩展卷组
vgextend datavg /dev/sdc
vgreduce
缩小卷组
vgreduce datavg /dev/sdb
vgremove
删除卷组
vgremove datavg
vgs
查看卷组
vgs
vgdisplay
查看卷组详细信息
vgdisplay
pvmove
迁移PV数据
pvmove /dev/sdb
4. 扩容逻辑卷 逻辑卷的扩展, 取决于vg卷中剩余多少容量, 扩展容量不能超过卷组VG。
4.1 查看卷组剩余空间 1 2 3 [root@server0 ~] VG vg1 2 2 0 wz--n- 1.88g 1.00g
4.2 扩展LV逻辑卷 方式1: 增加指定大小 1 2 3 4 5 6 [root@linux-node1 ~] Size of logical volume datavg/lv1 changed from 100.00 MiB (25 extents) to 900.00 MiB (225 extents). Logical volume datavg/lv1 successfully resized.
方式2: 使用百分比
方式3: 使用剩余全部空间 1 2 lvextend -l +100%FREE /dev/datavg/lv1
4.3 扩展文件系统 扩展逻辑卷后,需要扩展文件系统才能使用新增的空间。
XFS文件系统扩容 1 2 3 4 5 6 7 8 9 10 11 12 [root@server0 ~] meta-data=/dev/mapper/datavg-lv1 isize=512 agcount=4, agsize=6400 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=25600, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=855, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 25600 to 230400
EXT4文件系统扩容 1 2 3 4 5 6 [root@server0 ~] resize2fs 1.42.9 (28-Dec-2013) Filesystem at /dev/datavg/lv1 is mounted on /lv1; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 1 The filesystem on /dev/datavg/lv1 is now 230400 blocks long.
4.4 扩容完整流程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 df -h /lv1lvextend -L +800M /dev/datavg/lv1 xfs_growfs /dev/datavg/lv1 resize2fs /dev/datavg/lv1 df -h /lv1
4.5 扩容注意事项
XFS文件系统 : 只能扩容,不能缩小
EXT4文件系统 : 可以扩容和缩小
在线扩容 : 两种文件系统都支持在线扩容,无需卸载
空间检查 : 扩容前检查卷组剩余空间
5. 缩小逻辑卷 注意 : 只有EXT4文件系统支持缩小,XFS文件系统不支持缩小。
5.1 缩小EXT4逻辑卷步骤 步骤1: 创建测试环境 1 2 3 4 5 6 lvcreate -n uplooking -L 1G finance mkfs.ext4 /dev/finance/uplooking mkdir /finance/uplookingmount /dev/finance/uplooking /finance/uplooking/ cp /etc/host* /finance/uplooking/
步骤2: 卸载文件系统 1 2 umount /dev/finance/uplooking
步骤3: 检测文件系统 1 2 3 4 5 fsck -f /dev/finance/uplooking resize2fs /dev/finance/uplooking 512M
步骤4: 裁剪逻辑卷容量 1 2 3 4 5 lvreduce -L 512M /dev/finance/uplooking WARNING: Reducing active logical volume to 512.00 MiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce uplooking? [y/n]: y
步骤5: 再次检测文件系统 1 2 fsck -f /dev/finance/uplooking
步骤6: 挂载测试 1 2 3 4 5 mount /dev/finance/uplooking /mnt df -h |grep uplooking
5.2 缩小逻辑卷完整流程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #!/bin/bash umount /dev/finance/uplooking fsck -f /dev/finance/uplooking resize2fs /dev/finance/uplooking 512M lvreduce -L 512M /dev/finance/uplooking fsck -f /dev/finance/uplooking mount /dev/finance/uplooking /mnt df -h |grep uplooking
5.3 缩小注意事项
XFS不支持缩小 : XFS文件系统不支持缩小操作
必须先缩小文件系统 : 缩小逻辑卷前必须先缩小文件系统
数据备份 : 缩小操作有风险,建议先备份数据
卸载文件系统 : 缩小前必须卸载文件系统
文件系统检测 : 缩小前后都要检测文件系统
6. 删除逻辑卷 6.1 删除逻辑卷步骤 步骤1: 卸载文件系统
步骤2: 删除逻辑卷 1 2 3 4 lvremove /dev/datavg/lv1 Do you really want to remove active logical volume "lv1" ? [y/n]: y Logical volume "lv1" successfully removed
步骤3: 验证删除
6.2 删除卷组 1 2 3 vgremove datavg Volume group "datavg" successfully removed
6.3 删除物理卷 1 2 3 pvremove /dev/sdb Labels on physical volume "/dev/sdb" successfully wiped.
6.4 完整删除流程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #!/bin/bash umount /dev/datavg/lv1 umount /dev/datavg/lv2 lvremove /dev/datavg/lv1 lvremove /dev/datavg/lv2 vgremove datavg pvremove /dev/sdb /dev/sdc /dev/sdd pvs vgs lvs
7. LVM快照 7.1 快照概述 LVM快照是逻辑卷的一个时间点副本,可以用于备份和恢复。
7.2 创建快照 1 2 3 4 5 6 7 lvcreate -L 100M -s -n lv1-snap /dev/datavg/lv1
7.3 挂载快照 1 2 3 mkdir /snapmount /dev/datavg/lv1-snap /snap
7.4 删除快照 1 2 3 4 5 umount /snap lvremove /dev/datavg/lv1-snap
8. LVM管理命令总结 8.1 物理卷(PV)命令
命令
功能
示例
pvcreate
创建物理卷
pvcreate /dev/sdb
pvremove
删除物理卷
pvremove /dev/sdb
pvs
查看物理卷
pvs
pvdisplay
查看物理卷详细信息
pvdisplay
pvmove
迁移物理卷数据
pvmove /dev/sdb
8.2 卷组(VG)命令
命令
功能
示例
vgcreate
创建卷组
vgcreate datavg /dev/sdb
vgextend
扩展卷组
vgextend datavg /dev/sdc
vgreduce
缩小卷组
vgreduce datavg /dev/sdb
vgremove
删除卷组
vgremove datavg
vgs
查看卷组
vgs
vgdisplay
查看卷组详细信息
vgdisplay
8.3 逻辑卷(LV)命令
命令
功能
示例
lvcreate
创建逻辑卷
lvcreate -L 100M -n lv1 datavg
lvextend
扩展逻辑卷
lvextend -L +100M /dev/datavg/lv1
lvreduce
缩小逻辑卷
lvreduce -L 512M /dev/datavg/lv1
lvremove
删除逻辑卷
lvremove /dev/datavg/lv1
lvscan
查看逻辑卷
lvscan
lvdisplay
查看逻辑卷详细信息
lvdisplay
8.4 文件系统扩展命令
命令
功能
文件系统
示例
xfs_growfs
扩展XFS文件系统
XFS
xfs_growfs /dev/datavg/lv1
resize2fs
扩展/缩小EXT文件系统
EXT2/3/4
resize2fs /dev/datavg/lv1
9. LVM实战案例 9.1 案例1: 在线扩容生产环境数据盘 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #!/bin/bash df -h /datavgs lvextend -L +500G /dev/datavg/data_lv xfs_growfs /dev/datavg/data_lv df -h /data
9.2 案例2: 迁移数据更换磁盘 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #!/bin/bash pvcreate /dev/sde vgextend datavg /dev/sde pvmove /dev/sdb /dev/sde vgreduce datavg /dev/sdb pvremove /dev/sdb
9.3 案例3: 创建LVM快照备份 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #!/bin/bash lvcreate -L 10G -s -n mysql-snap /dev/datavg/mysql_lv mkdir /backup/snapmount /dev/datavg/mysql-snap /backup/snap tar czf /backup/mysql-$(date +%Y%m%d).tar.gz /backup/snap/* umount /backup/snap lvremove /dev/datavg/mysql-snap
10. LVM最佳实践 10.1 规划建议
卷组命名 : 使用有意义的名称(如datavg、appvg)
逻辑卷命名 : 使用描述性名称(如mysql_lv、data_lv)
PE大小 : 默认4MB,大容量建议使用8MB或16MB
预留空间 : 卷组中预留10-20%空间用于快照和扩容
10.2 性能优化
条带化 : 对于多磁盘,使用条带化提高性能
镜像 : 重要数据使用镜像提高可靠性
快照大小 : 快照大小建议为原逻辑卷的10-20%
10.3 监控建议
定期检查 : 使用vgs和lvs定期检查
空间监控 : 监控逻辑卷使用率
性能监控 : 监控LVM性能指标
11. LVM常见问题 11.1 问题1: 无法扩展逻辑卷 1 2 3 4 5 vgs vgextend datavg /dev/sdc
11.2 问题2: XFS文件系统无法缩小
11.3 问题3: 逻辑卷无法删除 1 2 3 4 5 6 mount |grep lv1 umount /dev/datavg/lv1 lvremove /dev/datavg/lv1
12. 命令快速参考 12.1 LVM完整流程命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 pvcreate /dev/sdb vgcreate datavg /dev/sdb lvcreate -L 100M -n lv1 datavg mkfs.xfs /dev/datavg/lv1 mount /dev/datavg/lv1 /lv1 vgextend datavg /dev/sdc lvextend -L +100M /dev/datavg/lv1 xfs_growfs /dev/datavg/lv1 umount /lv1 lvremove /dev/datavg/lv1 vgremove datavg pvremove /dev/sdb
12.2 查看命令 1 2 3 4 5 6 7 8 9 10 11 12 pvs pvdisplay vgs vgdisplay lvs lvdisplay lvscan
实战优化