一、传统磁盘管理的弊端
传统的磁盘管理:使用MBR先对硬盘分区,然后对分区进行文件系统的格式化最后再将该分区挂载上去。
传统的磁盘管理当分区没有空间使用进行扩展时,操作比较麻烦。分区使用空间已经满了,不再够用了,此时无法通过拉伸分区来进行分区扩充,只能通过添加新的硬盘来扩展,然后在新的硬盘上创建分区,接着再对分区格式化,然后将之前分区的所有东西拷贝到新的分区里面。
新增的硬盘作为独立的文件系统存在的,原有的文件系统没有得到任何的扩充。
传统的磁盘管理不能进行动态的磁盘管理,新增硬盘拷贝原有内容时还需要卸载掉当前的挂载点,并且当原有内容文件较多时,花费的时间也较多,一些实时的服务也不接受去停止再去拷贝内容挂载。
二、LVM的磁盘管理
LVM (logical volume Manager)逻辑卷管理。
逻辑卷管理LVM是一个多才多艺的硬盘系统工具。无论在Linux或者其他类似的系统,都是非常的好用。传统分区使用固定大小分区,重新调整大小十分麻烦。但是,LVM可以创建和管理“逻辑”卷,而不是直接使用物理硬盘。可以让管理员弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷。LVM并不需要重启就可以让内核知道分区的存在。
LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。
在传统的磁盘管理机制中,上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。
例如:当新增一个物理硬盘时,上层服务是感觉不到的,因为呈现给上次服务的是以逻辑卷的方式(挂载的是逻辑卷)。
LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性!!!
三、基础概念 PE,PV,VG,LV 及 LVM的原理
- PE (Physical Extend) 物理拓展
- PV (Physical Volume) 物理卷
- VG (Volume Group) 卷组
- LV (Logical Volume) 逻辑卷
在LVM的磁盘管理中,首先将硬盘划分分区,然后将分区格式化存储物理卷(PV),一个或多个物理卷可以用来创建卷组(VG),然后基于卷组可以创建逻辑卷(LV)。
格式化物理卷的过程中LVM是将底层的硬盘划分为了一个一个的PE(Physical Extend),LVM磁盘管理中PE的默认大小是4M大小,PE就是逻辑卷管理的最基本单位
只要在卷组中有可用空间,就可以随心所欲的创建逻辑卷,文件系统就是在逻辑卷上创建的,然后操作系统挂载和使用访问。
四、实验-使用LVM磁盘管理
实验内容:给当前的操作系统新增两块硬盘,然后使用LVM磁盘管理
下图中的/dev/sdb和/dev/sdc为我们新增的硬盘
(一)磁盘分区
将/dev/sdb 划分为三个主分区,分别为2GB,3GB,5GB的空间。
fdisk /dev/sdb
[root@robin robin]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。Device does not contain a recognized partition table
使用磁盘标识符 0x7e72cf82 创建新的 DOS 磁盘标签。命令(输入 m 获取帮助):n
Partition type:p primary (0 primary, 0 extended, 4 free)e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):+2G
分区 1 已设置为 Linux 类型,大小设为 2 GiB命令(输入 m 获取帮助):n
Partition type:p primary (1 primary, 0 extended, 3 free)e extended
Select (default p): p
分区号 (2-4,默认 2):2
起始 扇区 (4196352-20971519,默认为 4196352):
将使用默认值 4196352
Last 扇区, +扇区 or +size{K,M,G} (4196352-20971519,默认为 20971519):+3G
分区 2 已设置为 Linux 类型,大小设为 3 GiB命令(输入 m 获取帮助):n
Partition type:p primary (2 primary, 0 extended, 2 free)e extended
Select (default p): p
分区号 (3,4,默认 3):3
起始 扇区 (10487808-20971519,默认为 10487808):
将使用默认值 10487808
Last 扇区, +扇区 or +size{K,M,G} (10487808-20971519,默认为 20971519):
将使用默认值 20971519
分区 3 已设置为 Linux 类型,大小设为 5 GiB命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):1
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):2
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):3
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”命令(输入 m 获取帮助):w
The partition table has been altered!Calling ioctl() to re-read partition table.
正在同步磁盘。
分区划分完毕后进行查看
fdisk -l /dev/sdb # 查看sdb的磁盘分区列表信息
(二)准备物理卷
刚创建的分区是用来储存物理卷的。LVM可以使用不同大小的物理卷。
接下来会使用的几个命令的说明:
- pvcreate 创建物理卷
- pvremove 删除物理卷
- pvdisplay 查看物理卷的属性信息
- pvs 列出系统上的所有物理卷及其信息(LVM提供的一个命令行工具)
- pvextend 扩展物理卷的大小
首先,根据刚刚的三个主分区依次创建三个不同大小的物理卷
pvcreate /dev/sdb1
pvcreate /dev/sdb2
pvcreate /dev/sdb3
使用pvdisplay看一下物理卷的属性信息,可以看到每个物理卷的名称就是它的主分区名称。
(三)准备卷组
常用命令(和物理卷的格式一样)
- vgcreate 创建卷组
- vgremove 删除卷组
- vgdisplay 查看卷组信息
- vgs 列出系统上的所有卷组及其信息(LVM提供的一个命令行工具)
- vgextend 扩展卷组中的物理卷(添加新的物理卷到卷组中)
将刚刚创建的三个物理卷都放到一个卷组(vg_test)中
# -s 选项用来指定 PE的大小, vg_test为新建的卷组名称
vgcreate -s 4M vg_test /dev/sdb1 /dev/sdb2 /dev/sdb3
同样,验证查看一下卷组的信息,使用 vgdisplay 命令
(四)创建逻辑卷
常用命令:
- lvcreate 创建逻辑卷
- lvremove 删除逻辑卷
- lvdisplay 查看逻辑卷信息
- lvs 列出系统上的所有逻辑卷及其信息(LVM提供的一个命令行工具)
- lvresize 调整逻辑卷的大小
- lvextend 扩展逻辑卷的大小
我们刚刚生成的卷组大小差不多有10GB,现在根据卷组去创建逻辑卷,先创建一个5GB的逻辑卷(lv_test)。
# -n 指定逻辑卷的名称
# -L 指定逻辑卷的大小
lvcreate -n lv_test -L 5G /dev/vg_test
使用lvdisplay命令查看一下,可以看到lv_test的卷组是vg_test,以及它的一个大小是5G,并且它的路径为 “/dev/vg_test/lv_test” (/dev/卷组/逻辑卷)
(五)格式化-挂载
格式化逻辑卷为文件系统,使用 mkfs 命令。挂载使用 mount 命令。
- 格式化逻辑卷
mkfs.ext4 /dev/vg_test/lv_test
- 挂载
mkdir /home/robin/data # 这里我存在一个robin用户,所以我将robin用户下的data目录作为挂载点使用
mount /dev/vg_test/lv_test /home/robin/data
- 查看挂载后的状态(df)
df -h /home/robin/data
(六)扩展逻辑卷
动态的扩展,是LVM最有用的功能.
扩展逻辑卷分为如下几步:
- 卸载当前要进行扩展的逻辑卷 (umount)
- 扩展逻辑卷大小 (lvresize)
- 检查磁盘错误
- 更新文件系统大小
- 重新挂载
umount /dev/vg_test/lv_test # 1. 卸载逻辑卷lvresize -L 7G /dev/vg_test/lv_test # 2. 扩展逻辑卷大小到7Ge2fsck -f /dev/vg_test/lv_test # 3. 检查逻辑卷磁盘错误resize2fs /dev/vg_test/lv_test # 4.更新文件系统大小mount /dev/vg_test/lv_test /home/robin/data # 5.重新挂载
再次使用 df 命令查看挂载目录的磁盘信息,容量已经发生改变。
(七)扩展卷组
假设我们第一块硬盘(/dev/sdb)创建的卷组(vg_test)已经满了,且/dev/sdb这块硬盘已经没有可以使用的多余空间了,同时我们还有一块硬盘/dev/sdc (10GB大小)尚未使用,我们从第二块硬盘中划分两个G给卷组vg_test进行扩展。
卷组扩展的本质就是 将物理卷加入到卷组中
所以从其他硬盘进行扩展卷组可以分为如下几步:
● 新的硬盘进行分区
● 创建不同大小的物理卷
● 将新创建的物理卷添加到需要扩展的卷组中
● 查看检验卷组是否扩充
- 将/dev/sdc进行分区(先分一个2G的分区给我们扩展使用就行)
fdisk /dev/sdc命令(输入 m 获取帮助):n
Partition type:p primary (0 primary, 0 extended, 4 free)e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):+2G
分区 1 已设置为 Linux 类型,大小设为 2 GiB命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):8eWARNING: If you have created or modified any DOS 6.xpartitions, please see the fdisk manual page for additionalinformation.已将分区“FAT12”的类型更改为“Linux LVM”命令(输入 m 获取帮助):w
The partition table has been altered!Calling ioctl() to re-read partition table.
- 基于主分区/dev/sdc1创建物理卷 /dev/sdc1
pvcreate /dev/sdc1
- 将新建的物理卷添加到需要扩展的卷组(vg_test)中
vgextend vg_test /dev/sdc1
- 查看卷组是否正确的扩充
vgdisplay vg_test
tips: 这里第一块硬盘10G加上第二块扩展的2G所以就是接近于12G的一个大小