2024-07-10 20:03:43 +08:00

203 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 物理卷,在设备起始处放置一个标签,包括 uuidlvm 配置元数据位置以及剩余空间
- 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_sizedatavg(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
```
- 查看 lvsmount 挂载
## 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
```
- 挂载