1. 理论知识
1.1 LVM 是什么
LVM 是 Logical Volume Manager 的缩写,中文一般翻译为 "逻辑卷管理",它是 Linux 下对磁盘分区进行管理的一种机制。LVM 是建立在磁盘分区和文件系统之间的一个逻辑层,系统管理员可以利用 LVM 在不重新对磁盘分区的情况下动态的调整分区的大小。如果系统新增了一块硬盘,通过 LVM 就可以将新增的硬盘空间直接扩展到原来的磁盘分区上。
LVM 的优点如下:
- 文件系统可以跨多个磁盘,因此大小不再受物理磁盘的限制。
- 可以在系统运行状态下动态地扩展文件系统大小。
- 可以以镜像的方式冗余重要数据到多个物理磁盘上。
- 可以很方便地导出整个卷组,并导入到另外一台机器上。
LVM 也有一些缺点:
- 在从卷组中移除一个磁盘的时候必须使用 reducevg 命令(这个命令要求root权限,并且不允许在快照卷组中使用)。
- 当卷组中的一个磁盘损坏时,整个卷组都会受影响。
- 因为增加了一个逻辑层,存储的性能会受影响。
LVM 的优点对服务器的管理非常有用,但对于桌面系统的帮助则没有那么显著,所以需要我们根据使用的场景来决定是否应用 LVM。
1.2 LVM 中的基本概念
通过 LVM 技术,可以屏蔽掉磁盘分区的底层差异,在逻辑上给文件系统提供了一个卷的概念,然后在这些卷上建立相应的文件系统。下面是 LVM 中主要涉及的一些概念。
- 物理存储设备(Physical Media):指系统的存储设备文件,比如 /dev/sda、/dev/sdb 等。
- PV(物理卷 Physical Volume):指硬盘分区或者从逻辑上看起来和硬盘分区类似的设备(比如 RAID 设备)。
- VG(卷组 Volume Group):类似于非 LVM 系统中的物理硬盘,一个 LVM 卷组由一个或者多个 PV(物理卷)组成。
- LV(逻辑卷 Logical Volume):类似于非 LVM 系统上的磁盘分区,LV 建立在 VG 上,可以在 LV 上建立文件系统。
- PE(Physical Extent):PV(物理卷)中可以分配的最小存储单元称为 PE,PE 的大小是可以指定的。
- LE(Logical Extent):LV(逻辑卷)中可以分配的最小存储单元称为 LE,在同一个卷组中,LE 的大小和 PE 的大小是一样的,并且一一对应。
可以这么理解,LVM 是把硬盘的分区分成了更小的单位(PE),再用这些单元拼成更大的看上去像分区的东西(PV),进而用 PV 拼成看上去像硬盘的东西(VG),最后在这个新的硬盘上创建分区(LV)。文件系统则建立在 LV 之上,这样就在物理硬盘和文件系统中间添加了一层抽象(LVM)。下图大致描述了这些概念之间的关系:
对上图中的结构做个简单的介绍:两块物理硬盘 A 和 B 组成了 LVM 的底层结构,这两块硬盘的大小、型号可以不同。PV 可以看做是硬盘上的分区,因此可以说物理硬盘 A 划分了两个分区,物理硬盘 B 划分了三个分区。然后将前三个 PV 组成一个卷组 VG1,后两个 PV 组成一个卷组 VG2。接着在卷组 VG1 上划分了两个逻辑卷 LV1 和 LV2,在卷组 VG2 上划分了一个逻辑卷 LV3。最后,在逻辑卷 LV1、LV2 和 LV3 上创建文件系统,分别挂载在 /usr、/home 和 /var 目录。
2. 具体操作
step-1:使用fdisk -l
查看当前的磁盘信息
step-2:用 parted 命令可以查看 /dev/sdd 当前的分区情况
parted /dev/sdd print
step-3:安装gdisk ,使用gdisk对物理磁盘进行分区
apt install gdisk
gdisk /dev/sdd
通过 p 命令可以查看磁盘当前的状态:
输出中的前几行是磁盘的基本信息,比如总大小为 20G,一共有多少个扇区(sector),每个扇区的大小,当前剩余的空间等等。然后是已经存在的分区信息(上图显示还没有任何分区):
- 第一列 Number 显示了分区的编号,比如 1 号指 /dev/sdd1。
- 第二列 Start 表示磁盘分区的起始位置。
- 第三列 End 表示磁盘分区的结束位置。
- 第四列 Size 显示分区的容量。
- 第五列 Code 和第六列 Name 显示分区类型的 ID和名称,比如 Linux filesystem 为 8300,Linux swap 为 8200,Linux LVM 为 8e00。
下面通过 以下命令来创建新分区(依次敲):
n
enter
enter
enter
8e00
w
step-4:如果之前已经划分为多个分区,则可以执行fdisk /dev/sdc
合并为1个分区,把分区删除后,再对/dev/sdc进行LVM
step-5:现在我们可以基于磁盘分区 /dev/sdd1等来创建 LVM 物理卷(LV),可以通过 pvcreate 命令来完成
pvcreate /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1
使用pvdisplay
可以看到我们创建的5个物理卷。
step-6:基于一个或多个 PV,可以创建 VG,lvm_data是vg组的名字,可以自定义,,vgs 命令可以观察 VG 的信息
vgcreate lvm_data /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1
vgs lvm_data
step-7:有了 VG 就可以创建逻辑卷 LV 了,lvcreate 命令用来创建 LV,让我们在前面创建的lvm_data上创建名称为lvm_data_1的 LV
lvcreate -L 11111G -n lvmdata_1 lvm_data
fdisk -l
当我们创建 LV lvm_data/lvm_data_1时,其实是创建了名称为 /dev/lvm_data/lvm_data_1的设备文件,现在我们来格式化这个逻辑卷(在该 LV 上创建文件系统),目标为比较常见的 ext4 格式:
mkfs.ext4 /dev/mapper/lvm_data-lvmdata_1
最后可以挂载到一个目录上,查看结果:
参考: