云主机主硬盘空间不够,于是新购了一块硬盘挂上去,但是通过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
运行如下命令安装:
$ sudo apt install lvm2
安装完成后再次运行pvscan命令:
$ sudo pvscan
没有找到PV(物理卷),这是当然的,我们还没开始呢。但是可以看到一个lvmetad.socket的报错,这是因为安装lvm2后没有启动一个相关服务:
$ sudo systemctl start lvm2-lvmetad.service
$ sudo systemctl enable lvm2-lvmetad.service
错误消除。
3.2初始化物理磁盘
3.2.1查询新硬盘相关信息
首先试用fdisk命令查看我们要操作的物理硬盘:
$ sudo fdisk -l
可以看到我们有/dev/vda和/dev/sda两块磁盘,其中vda已经分区并挂载好,sda则没有。
执行blkid命令也可以看到新磁盘尚未挂载:
$ blkid -o list
3.2.2在新硬盘创建LVM分区
接下来使用fdisk命令给新硬盘创建适用于LVM的分区(fdisk仅支持小于2T的硬盘),输入m可以显示菜单帮助信息。输入n为新建分区:
$ sudo fdisk /dev/sda
新建分区时,需要选择分区类型为主分区或扩展分区:
一个硬盘可以创建最少1个、最多4个主分区,可以没有或者最多1个扩展分区,由于新加的硬盘主要用于存放数据,因此我这里选择仅创建1个主分区即可。
p为创建主分区,默认设置分区号1,接下来设置分区的起始和终止扇区(即设置分区大小),我这里直接选择默认值,即分区使用全部空间总共1 TB,接下来输入t修改分区类型为LVM类型。
最后输入w保存分区表:
再使用fdisk命令查看分区时可看到新创建的LVM分区:
3.2.3创建物理卷
将新建的LVM分区创建为物理卷:
$ sudo pvcreate /dev/sda1
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”提示时,直接回车等待即可,格式化需要一些时间。
3.3挂载LVM逻辑卷
$ sudo mkdir /newdata/
$ sudo mount /dev/newdata1/lv_data01 /newdata/
最后设置自动挂载:
$ 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开始,数字越小越先检查,如果两个分区的数字相同,则同时检查。