磁盘管理

常用命令

mount

用于挂载设备,Linux系统一般插入某个磁盘需要进行挂载之后才可以进行访问

1
2
3
4
5
6
7
8
9
# 输出系统下mount信息
mount

# 挂载分区到/mnt目录
mount /dev/sda1 /mnt

# 挂载/etc/fstab中所有配置
mount -a

findmnt

1
2
# 显示设备上所有挂载树状图
findmnt

df

1
2
3
4
5
6
7
# 显示挂载的文件系统及其磁盘使用情况
df -h

# 显示挂载点对应的设备
df -h /mnt/data


blkid

常用于/etc/fstab磁盘挂载查询分区UUID

1
2
# 显示所有分区的UUID
blkid

lsblk

1
2
3
# 显示所有块设备关系,包括lvm卷关系信息等信息
lsblk

LVM

安装完PVE后,PVE默认会将磁盘进行分区,其中包括真实的物理分区/boot和一个虚拟分区lvm,此虚拟分区包含了两个部分,1.系统所在分区 2.虚拟化池,1分区中包含一个物理分区,调整其大小需要先对物理分区进行调整(例如ext4 使用resize2fs),后对包含这个物理分区的逻辑卷进行调整(例如lvreduce -L 10G /dev/vg_name/lv_name)顺序不能错。2虚拟化分区采用使用 Thin Provisioning 技术的存储管理方案,允许你创建逻辑卷的虚拟容量,而不需要立即分配所有实际的存储空间(物理),说百了就是可灵活的加多个磁盘,对这些磁盘存储资源可进行灵活分配,比如我可以将一个新插入的磁盘规划到2分区,2分区就会被逻辑上被看作一个大的存储池,这个池可以被所有的虚拟机灵活取用,按需分配,无论加入多少设备,都可以逻辑上按需规划这些资源到不同的池,不同的池也可以包含所有设备部分/全部资源。

扩展知识:ext4上需要lvm扩展这些新的特性,但Btrfs文件系统自带这些新的特性,可以不创建lvm可直接使用lvm这种特性,我觉得少一层lvm或许会有性能提升。

特性

  1. 动态调整存储空间
    扩展卷组:可以动态添加新的物理卷(PV)到现有的卷组(VG)中,以增加存储容量。
    扩展逻辑卷:可以动态扩展逻辑卷(LV)的大小,而不需要停机或重新分区。
    缩小逻辑卷:可以动态缩小逻辑卷的大小(需要先缩小文件系统)。
  2. 创建快照
    快照卷:可以创建逻辑卷的快照,这些快照可以用于数据备份、测试或恢复操作。快照是写时复制(COW)的,因此只存储自快照创建以来的更改。
  3. 磁盘条带化(Striping)
    提高性能:通过将数据分布在多个物理卷上,可以实现并行I/O操作,从而提高磁盘性能。
  4. 磁盘镜像(Mirroring)
    数据冗余:可以创建逻辑卷的镜像,将数据实时复制到多个物理卷上,提高数据的可靠性和冗余性。
  5. 移动物理卷
    在线移动:可以在系统运行时将数据从一个物理卷移动到另一个物理卷,以便进行硬件维护或升级。
  6. 硬盘快照和恢复
    灵活备份:LVM 的快照功能可以在不停止服务的情况下进行数据备份,并在需要时轻松恢复。
  7. Thin Provisioning
    节省存储:LVM 支持 Thin Provisioning,可以动态分配存储空间,避免预分配未使用的空间,提高存储利用率。
  8. 卷组管理
    卷组:通过卷组管理多个物理卷,简化了存储管理和扩展。可以在卷组内创建和管理多个逻辑卷。

创建

物理卷(Physical Volume,PV)

1
2
# 物理设备初始化为物理卷
pvcreate /dev/sdX

卷组(Volume Group,VG)

1
2
3
# 将一个或多个物理卷加入到一个卷组中
vgcreate vg_name /dev/sdX

逻辑卷(Logical Volume,LV)

1
2
3
4
5
6
# 卷组中创建逻辑卷,lv_name 替换为逻辑卷的名称,10G 为逻辑卷的大小,vg_name 为卷组的名称。
lvcreate -n lv_name -L 10G vg_name

# 将逻辑卷格式化为ext4(也可以其他文件系统)
mkfs.ext4 /dev/vg_name/lv_name

查看

查看物理卷、卷组和逻辑卷

1
2
3
4
5
6
7
8
9
10
11
12
# 需 sudo

pvdisplay
# 显示物理卷的概要信息,包括其所在的卷组
pvs

vgdisplay
# 提供卷组的概要信息
vgs

lvdisplay
lvs

调整容量

有一个这样的场景:某个磁盘上有一个lvm区,其中包含两个逻辑卷,现将其中一个减小容量后,增加另一个的容量

列出所有逻辑卷及其当前大小

1
lvdisplay

确认要调整大小的逻辑卷。例如:

  • 逻辑卷1:/dev/vg_name/lv_name1
  • 逻辑卷2:/dev/vg_name/lv_name2

检查文件系统的大小

1
df -h

调整

注意:建议在调整之前备份重要数据,以免造成损失。

  • 调整大小时要注意顺序,先进行物理调整,再进行逻辑调整
  • 调小某个物理卷时一定要大于存储数据的总容量,才可进行无损调整
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 卸载逻辑卷1
umount /dev/vg_data/lv_data1

# 检查文件系统
e2fsck -f /dev/vg_data/lv_data1

# 调整文件系统大小为10G
resize2fs /dev/vg_data/lv_data1 10G

# 减小逻辑卷1的大小
lvreduce -L 10G /dev/vg_data/lv_data1

# 重新挂载逻辑卷1
mount /dev/vg_data/lv_data1 /mnt/data1

# 扩展逻辑卷2的大小10
lvextend -L 10G /dev/vg_data/lv_data2
# 扩展逻辑卷2的大小到所有未分配空间
lvextend -l +100%FREE /dev/vg_data/lv_data2

# 扩展文件系统大小
resize2fs /dev/vg_data/lv_data2

# 验证调整后的大小
lvdisplay
df -h

数据池

在 LVM (Logical Volume Manager) 中,数据池 (Data Pool) 是用于管理存储的高级功能,尤其是涉及快照、克隆等功能时。数据池通常由两个主要的逻辑卷组成:数据池元数据 (Metadata) 和数据池数据 (Data)。数据池是使用 Thin Provisioning 技术的存储管理方案。Thin Provisioning 允许你创建逻辑卷的虚拟容量,而不需要立即分配所有实际的存储空间。这有助于提高存储效率和灵活性。

数据池的主要组件

  1. 数据池数据 (Data Pool Data)

    作用: 存储实际的数据内容。

    详细信息:

    • 逻辑卷用于存放文件系统、虚拟机磁盘映像等实际数据。
    • 这是数据池的主要部分,用于保存用户数据或虚拟机数据。

    命名示例:

    1
    2
    ├─pve-data_tdata
    │ └─pve-data-tpool

    这里,pve-data_tdata 是数据池的数据逻辑卷,pve-data-tpool 是数据池的实际存储池。

  2. 数据池元数据 (Data Pool Metadata)

    作用: 管理数据池的元数据,包括跟踪数据块的分配情况、空闲空间、快照信息等。

    详细信息:

    • 逻辑卷用于存储数据池的元数据。
    • 这个部分包含数据池的管理信息,不直接存储用户数据。

    命名示例:

    1
    2
    ├─pve-data_tmeta
    │ └─pve-data-tpool

    这里,pve-data_tmeta 是数据池的元数据逻辑卷,pve-data-tpool 是数据池的实际存储池。

如需调节数据池大小需调节pve-data-tpool大小,pve-data_tmeta的大小到0.1%-1%的pve-data-tpool的大小。