article/linux/linux使用lvm.md
2023-06-06 18:25:51 +08:00

155 lines
3.0 KiB
Markdown
Raw 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.

# LVM
> LVM 是一种可用在 Linux 内核 的逻辑分卷管理器 ;可用于管理磁盘驱动器或其他类似的大容量存储设备。
## 结构和术语介绍
##### **物理卷 (PV)**
一个可供存储 LVM 的块设备. 例如: 一块硬盘, 一个 MBR 或 GPT分区 , 一个回环文件, 一个被内核映射的设备 (例如dm-crypt 它包含一个特殊的 LVM 头。
##### **卷组 (VG)**
物理卷的一个组,作为存放逻辑卷的容器。 PEs are allocated from a VG for a LV.
##### **逻辑卷 (LV)**
"虚拟 / 逻辑卷" 存放在一个卷组中并由物理块组成。是一个类似于物理设备的块设备,例如,你可以直接在它上面创建一个文件系统文件系统 。
##### **物理块 (PE)**
一个卷组中最小的连续区域 (默认为 4 MiB),多个物理块将被分配给一个逻辑卷。你可以把它看成物理卷的一部分,这部分可以被分配给一个逻辑卷。
逻辑结构大概像是这个样子
```text
|----------| |----------|
| 逻辑卷 LV | | 逻辑卷...|
|----------| |----------|
| |
\ /
|-----------|
| 卷组 VG |
|-----------|
/ \
| |
|----------| |----------|
| 物理卷 PV | | 物理卷...|
|----------| |----------|
graph TB
A(逻辑卷 LV) --> B(卷组 VG)
C(逻辑卷...) --> B
B --> D(物理卷 PV)
B --> E(物理卷...)
```
> 我们并不需要太过关心 PE
记好这三层的缩写 我们待会要把这三层定义和创建出来。
## 使用 LVM
> 在继续配置 LVM 前,必须对设备进行 分区。
这里假设有两个硬盘 两个分区
并且会同时演示如何拓展空间 所以有些命令不是最佳路径
- /dev/sdb1
- /dev/sdc1
#### 创建物理卷PV
```sh
pvcreate /dev/sdb1
pvcreate /dev/sdc1
```
***查看创建好的物理卷***
```sh
pvdisplay
```
#### 创建卷组VG
```sh
vgcreate vg_demo /dev/sdb1
```
> 这里 vg_demo 是你的卷组名
> 后面的分区可以为多个 这里用一个方便后续演示扩容
***查看已创建好的卷组***
```sh
vgdisplay
```
#### 创建逻辑卷
```sh
lvcreate -L 10G vg_demo -n lv_demo
```
> 创建一个大小为 10G名字为 lv_demo所属 vg_demo 的逻辑卷。
***查看已创建的逻辑卷\***
```sh
lvdisplay
```
#### 格式化并挂载逻辑卷
```sh
# 查看逻辑卷挂载位置
vgscan
# 格式化逻辑卷
mkfs -t ext4 /dev/vg_demo/lv_demo
# 创建待挂载目录
mkdir /demo
# 挂载
mount /dev/vg_demo/lv_demo /demo
```
`df -hl` 就可以看到已经挂载的存储空间了
接下来我们进行扩容
#### 对 VG 增加 PV
首先 需要创建好 PV
> 步骤在上面 不再重复写了
```sh
vgextend vg_demo /dev/sdc1
```
#### 调整 LV 大小
```sh
lvresize -l 102398 /dev/vg_demo/lv_demo
#or
lvresize -L +20G /dev/vg_demo/lv_demo
```
> 102398 是扩容后的 PE 总大小
> PE 大小通过 pvdisplay 查看
#### 调整分区大小
```sh
resize2fs /dev/vg_demo/lv_demo
```
[wayne-programming-studio-wiki]: https://wiki-wayne.surge.sh/#/os/lvm "lvm"