--- title: "Lvm 笔记" date: 2019-10-29T21:44:02+08:00 lastmod: 2019-10-29T21:44:02+08:00 keywords: [] tags: ["lvm"] categories: ["storage"] --- ## LVM 一览 ![lvm一览](/img/lvm.jpg "lvm一览") ## LVM 结构 - PE 物理扩展 - PV 物理卷,在设备起始处放置一个标签,包括 uuid,lvm 配置元数据位置以及剩余空间 - PV 可以由分区创建,也可以直接用磁盘创建 - VG 卷组 - LV 逻辑卷 - Linear 线性卷 - Stripe 条带卷 - RAID raid 逻辑卷 - Mirror 镜像卷 - Thinly-Provision 精简配置逻辑卷 - Snapshot 快照卷 - Thinly-Provisioned Snapshot 精简配置快照卷 - Cache 缓存卷 ## LVM 相关命令 ### PV - pvchange 更改物理卷属性 - pvck 检查物理卷元数据 - pvcreate 初始化磁盘或分区以供lvm使用 - pvdisplay 显示物理卷的属性 - pvmove 移动物理Exent - pvremove 删除物理卷 - pvresize 调整lvm2使用的磁盘或分区的大小 - pvs 报告有关物理卷的信息 - pvscan 扫描物理卷的所有磁盘 ### VG - vgcfgbackup 备份卷组描述符区域 - vgcfgrestore 恢复卷组描述符区域 - vgchange 更改卷组的属性 - vgck 检查卷组元数据 - vgconvert 转换卷组元数据格式 - vgcreate 创建卷组 - vgdisplay 显示卷组的属性 - vgexport 使卷组对系统不了解(这是个什么) - vgextend 将物理卷添加到卷组 - vgimportclone 导入并重命名重复的卷组(例如硬件快照) - vgmerge 合并两个卷组 - vgmknodes 重新创建卷组目录和逻辑卷特殊文件 - vgreduce 通过删除一个或多个物理卷来减少卷组(将物理卷踢出VG) - vgremove 删除卷组 - vgrename 重命名卷组 - vgs 报告有关卷组信息 - vgscan 扫描卷组的所有磁盘并重建高速缓存 - vgsplit 将卷组拆分为两个,通过移动整个物理卷将任何逻辑卷从一个卷组移动到另一个卷组 ### LV - lvchange 更改逻辑卷属性 - lvconvert 将逻辑卷从线性转换为镜像或快照 - lvcreate 将现有卷组中创建逻辑卷 - lvdisplay 显示逻辑卷的属性 - lvextend 扩展逻辑卷的大小 - lvmconfig 在加载lvm.conf和任何其他配置文件后显示配置信息 - lvmdiskscan 扫描lvm2可见的所有设备 - lvmdump 创建lvm2信息转储以用于诊断目的 - lvreduce 减少逻辑卷的大小 - lvremove 删除逻辑卷 - lvrename 重命名逻辑卷 - lvresize 调整逻辑卷大小 - lvs 报告有关逻辑卷的信息 - lvscan 扫描所有的逻辑卷 ## 创建 LVM - 将磁盘创建为 pv(物理卷),其实物理磁盘被条带化为 pv,划成了一个一个的 pe,默认每个 pe 大小是 4MB - 创建 vg,其实它是一个空间池,不同PV加入同一 vg - 创建 lv,组成 lv 的 pe 可能来自不同的物理磁盘 - 格式化 lv,挂载使用 ## PV 管理 - 制作 pv ```bash pvcreate /dev/sdb1 ``` - 删除 pv(需先踢出 vg) ```bash pvremove /dev/sdb1 ``` - 同步物理卷容量 ```bash pvresize /dev/sdb1 ``` ## VG 管理 - 制作 vg ```bash # vgcreate vg_name 磁盘设备或分区 vgcreate datavg /dev/sdb1 vgcreate datavg /dev/sdb1 /dev/sdb2 # -s 指定pe的大小为16M,默认不指定是4M vgcreate -s 16M datavg2 /dev/sdb3 ``` - 从 vg 中移除缺失的磁盘 ```bash vgreduce --removemissing datavg vgreduce --removemissing datavg --force # 强制移除 ``` - 扩展 vg 空间 ```bash vgextend datavg /dev/sdb3 /dev/sdc ``` - 踢出 vg 中的某个成员 ```bash vgreduce datavg /dev/sdb3 ``` - 删除 vg ```bash vgremove VG ``` - 重命名 vg ```bash vgrename xxxx-vgid-xxxx-xxxx new_name ``` ## LV 管理 - 制作 lv ```bash # -n lv_name,-L lv_size,datavg(vg name) lvcreate -n lvdata1 -L 1.5G datavg ``` - 激活修复后的逻辑卷 ```bash lvchange -ay /dev/datavg/lvdata1 lvchange -ay /dev/datavg/lvdata1 -K # 强制激活 ``` - 创建 lvm 快照 ```bash # 数据一致性备份 # 先做一个快照,冻结当前系统,这样快照里面的内容可暂时保持不变 # 系统本身继续运行,通过重新挂载备份快照卷,实现不中断服务备份。 lvcreate -s -n kuaizhao01 -L 100M /dev/datavg/lvdata1 ``` - 删除 lv ```bash lvremove /dev/mapper/VG-mylv ``` - 扩大一个 lv - 用vgdisplay查看vg还有多少空余空间 - 扩充逻辑卷 ```bash lvextend -L +1G /dev/VG/LV01 # -r 表示在扩展的同时也更新文件系统,不是所有的发行版本都支持 lvextend -L +1G /dev/VG/LV01 -r ``` - 扩充操作后,df -h 发现大小并没有变,需更新文件系统 ```bash # 不同文件系统更新的命令不一样 e2fsck -f /dev/datavg/lvdata1 # ext4 文件系统,检查 lv 的文件系统 resize2fs /dev/VG/LV01 # ext4 文件系统命令,该命令后面接 lv 的设备名就行 xfs_growfs /nas # xfs 文件系统,该命令后面直接跟的是挂载点 ``` - 更新文件系统后,df -h 正常 - 缩小一个 lv - umount 卸载 - 缩小文件系统 ```bash resize2fs /dev/VG/LV01 2G ``` - 缩小 lv ```bash lvreduce -L -1G /dev/VG/LV01 ``` - 查看 lvs,mount 挂载 ## lvm 灾难恢复 - 场景: 三块盘做 lvm,现有一物理盘损坏,将剩下两块放到其他linux服务器上 - 恢复步骤 - 查看磁盘信息,lvm信息,确认能查到lvm相关信息,找到VG组的名字 ```bash pvs lvs vgs fidsk blkid ``` - 删除 lvm 信息中损坏的磁盘角色,强制提出故障磁盘 ```bash vgreduce --removemissing VG_name ``` - 强制激活 vg 组 ```bash vgchange -ay ``` - 强制激活 lvm ```bash lvchange -ay /dev/VG_name ``` - 挂载