云主机主硬盘空间不够,于是新购了一块硬盘挂上去,但是通过df命令查看,挂载空间还是没有什么变化?别急,这是因为新硬盘还没有经过一系列初始化操作,甚至连分区都没有。

传统的硬盘挂载步骤大概是:在物理磁盘上创建分区-->格式化分区-->挂载分区到某个目录。但这样的方式有一个缺陷,那就是分区大小从创建之初就已经确定,后面如果空间不够的话,只能新添硬盘并重新挂载到新的目录,上层的应用也需要改相应的配置。所以不如使用LVM硬盘管理模式。

本文编写时使用的系统为麒麟V4服务器操作系统,目前麒麟V10服务器操作系统已默认安装LVM相关工具,所以下文提到的安装软件部分可略过。

1 LVM简介

LVM是Logical Volume Manager(逻辑卷管理)的缩写,它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个物理硬盘的分区在逻辑上集合,当成一个大硬盘来使用,当硬盘的空间不够时,可以继续将其它硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。

与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)。LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如“sales”、“development”)代替物理磁盘名(如“sda”、“sdb”)来标识存储卷。

2 LVM基本术语

前面谈到,LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。首先我们讨论以下几个LVM术语:

物理存储介质(The physical media):这里指系统的存储设备:硬盘,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。

物理卷(physical volume):物理卷就是指磁盘分区,或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

卷组(Volume Group):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。

逻辑卷(logical volume):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。

PE(physical extent):每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4 MB。

LE(logical extent):逻辑卷也被划分为被称为LE(Logical Extents)的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

简单来说就是:

PV:是物理的磁盘分区。

VG:LVM中的物理的磁盘,也就是PV,必须加入VG,可以将VG理解为一个仓库。

LV:也就是从VG中划分的逻辑分区,LV的大小可动态调整。

3 LVM实施

3.1 LVM管理工具安装

在正式创建LVM前,我尝试运行pvscan命令查看当前是否有加入到LVM的物理卷,但提示没有找到这个命令,并提示安装lvm2,原来lvm2就是Ubuntu系统下的LVM管理工具。

$ pvscan

如何修改硬盘模式(麒麟系统硬盘安装教程)(1)

运行如下命令安装:

$ sudo apt install lvm2

安装完成后再次运行pvscan命令:

$ sudo pvscan

如何修改硬盘模式(麒麟系统硬盘安装教程)(2)

没有找到PV(物理卷),这是当然的,我们还没开始呢。但是可以看到一个lvmetad.socket的报错,这是因为安装lvm2后没有启动一个相关服务:

$ sudo systemctl start lvm2-lvmetad.service

$ sudo systemctl enable lvm2-lvmetad.service

如何修改硬盘模式(麒麟系统硬盘安装教程)(3)

错误消除。

3.2初始化物理磁盘

3.2.1查询新硬盘相关信息

首先试用fdisk命令查看我们要操作的物理硬盘:

$ sudo fdisk -l

如何修改硬盘模式(麒麟系统硬盘安装教程)(4)

可以看到我们有/dev/vda和/dev/sda两块磁盘,其中vda已经分区并挂载好,sda则没有。

执行blkid命令也可以看到新磁盘尚未挂载:

$ blkid -o list

如何修改硬盘模式(麒麟系统硬盘安装教程)(5)

3.2.2在新硬盘创建LVM分区

接下来使用fdisk命令给新硬盘创建适用于LVM的分区(fdisk仅支持小于2T的硬盘),输入m可以显示菜单帮助信息。输入n为新建分区:

$ sudo fdisk /dev/sda

如何修改硬盘模式(麒麟系统硬盘安装教程)(6)

新建分区时,需要选择分区类型为主分区或扩展分区:

如何修改硬盘模式(麒麟系统硬盘安装教程)(7)

一个硬盘可以创建最少1个、最多4个主分区,可以没有或者最多1个扩展分区,由于新加的硬盘主要用于存放数据,因此我这里选择仅创建1个主分区即可。

p为创建主分区,默认设置分区号1,接下来设置分区的起始和终止扇区(即设置分区大小),我这里直接选择默认值,即分区使用全部空间总共1 TB,接下来输入t修改分区类型为LVM类型。

如何修改硬盘模式(麒麟系统硬盘安装教程)(8)

最后输入w保存分区表:

如何修改硬盘模式(麒麟系统硬盘安装教程)(9)

再使用fdisk命令查看分区时可看到新创建的LVM分区:

如何修改硬盘模式(麒麟系统硬盘安装教程)(10)

3.2.3创建物理卷

将新建的LVM分区创建为物理卷:

$ sudo pvcreate /dev/sda1

如何修改硬盘模式(麒麟系统硬盘安装教程)(11)

3.2.4创建卷组

将上面创建的物理卷加入新创建的卷组:

$ sudo vgcreate newdata1 /dev/sda1

3.2.5创建逻辑卷

$ sudo lvcreate -l 100%VG -n lv_data01 newdata1

-l为逻辑卷大小,可以使用百分比形式,也可以使用-L参数加具体大小,例如200M等。

-n为逻辑卷名称,newdata1为卷组名称。

3.2.6格式化逻辑卷

$ sudo mkfs.ext4 /dev/newdata1/lv_data01

遇到“Writing superblocks and filesystem accounting information”提示时,直接回车等待即可,格式化需要一些时间。

如何修改硬盘模式(麒麟系统硬盘安装教程)(12)

3.3挂载LVM逻辑卷

$ sudo mkdir /newdata/

$ sudo mount /dev/newdata1/lv_data01 /newdata/

如何修改硬盘模式(麒麟系统硬盘安装教程)(13)

最后设置自动挂载:

$ sudo vi /etc/fstab

在文件末尾添加一行:

/dev/newdata1/lv_data01 /newdata/ ext4 defaults 0 2

共6列,第1、2列与mount命令的顺序类似,第3列是文件系统类型(逻辑卷格式化时已确定),第4列是挂载类型,默认defaults,第5列是dump备份设置,当其值设置为1时,将允许dump备份程序备份;设置为0时,忽略备份操作,第6列是fsck磁盘检查设置,其值是一个顺序。当其值为0时,永远不检查;而/根目录分区永远都为1。其它分区从2开始,数字越小越先检查,如果两个分区的数字相同,则同时检查。