我还是扩展一下这个LVM逻辑卷这一方面的知识面,LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现。
由这张图可以看出,其实PV就是我们一开始主机的磁盘分区,将其System ID 改为8e就可转化为PV,而多个PV可以组成一个VG,这是我们可以将这个VG暂时的看成一块“虚拟磁盘”,而这块磁盘是由多个PE组成的,这里可以将PE认为是block(以为PE是LVM的最小存储块),而VG又可以划分为多个LV,LV相当于是LVM的分区。
LVM(逻辑分区管理)中的几个概念:
PV(physical volume):物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。
VG(volume group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。
LV(logical volume):逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。
PE(physical extent):物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。
LE(logical extent):逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
卷组描述区域:卷组描述区域存在于每个物理卷中,用于描述物理卷本身、物理卷所属卷组、卷组中逻辑卷、逻辑卷中物理区域的分配等所有信息,它是在使用pvcreate建立物理卷时建立的。
下面我们来对整个LVM的工作原理进行一个总结:
(1)物理磁盘被格式化为PV,空间被划分为一个个的PE
(2)不同的PV加入到同一个VG中,不同PV的PE全部进入到了VG的PE池内
(3)LV基于PE创建,大小为PE的整数倍,组成LV的PE可能来自不同的物理磁盘
(4)LV直接可以格式化后挂载使用
(5)LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,其过程不会丢失原始数据
这些都是需要用到的命令
我们用到的版本是CentOS 7
[root@1 ~]# cat /etc/redhat-release #查看系统版本
CentOS Linux release 7.2.1511 (Core)
[root@1 ~]# uname -r #查看系统内核版本
3.10.0-327.el7.x86_64
[root@1 ~]# uname -m #查看系统是否64位
x86_64
首先我们还是做服务之前先把奇葩的防火墙给关掉,因为很多规则会撞到墙,注意是服务端和客户端都要做这个操作
[root@1 ~]# iptables -F
[root@1 ~]# iptables -X
[root@1 ~]# iptables -Z
[root@1 ~]# iptables -L
[root@1 ~]# setenforce 0
[root@1 ~]#vi /etc/sysconfig/selinux #修改SELINUX
首先我们先添加一块3块硬盘,为了方便区分我们把每一块硬盘的大小做了区分,大小分别为5G、6G和7G,硬盘的类型还是默认的SCSI版本。
[root@02 dev]# fdisk -l #可以列出所有的分区,包括没有挂上的分区和usb设备,查看硬盘及分区信息;
我们可以看见下面就是挂载上的硬盘
由于硬盘的主引导记录中仅仅为分区表保留了64个字节的存储空间,而每个分区的参数占据16个字节,故主引导扇区中总计只能存储4个分区的数据。也就是说,一块物理硬盘只能划分为4个主分区磁盘。并且MBR最大仅支持2TB的硬盘,在现在这个连4T都不稀奇的时代,MBR出场的机会恐怕会越来越少。
sda和hda的区别:
sd代表的是SCSI,SATA接口硬盘
hd代表IDE接口的硬盘
sda和hda最后面的a都代表的是第一块硬盘
sda1和hda1则代表的是该硬盘的第一分区
[root@02 dev]# fdisk /dev/sdb #对sdb硬盘进行分区
Command (m for help): m #就会输出帮助;
a 切换可引导标志(活动分区/引导分区之间切换)
b 编辑BSD磁盘标签
c 设置DOS操作系统兼容标记(兼容/不兼容之间切换)
d 删除一个分区
g 创建一个新的空GPT分区表
G 创建一个ILIX(SGI)分区表
l 列出已知分区类型
m 显示帮助信息
n 添加新分区
o 创建一个新的空DOS分区表
p 显示磁盘当前的分区表
q 退出不保存更改
s 创建一个新的空白的Sun磁盘标签
t 更改分区的系统ID
u 显示/输入单元
v 验证磁盘分区表
w 将分区表写入磁盘并退出(保存并退出)
x 额外功能(仅专家)
Command (m for help): n #添加新分区;
Select (default p): p #添加一个主分区
分区号(1-4,默认1): #默认的分区账号
第一扇区(2044-1048 575,默认2048): #默认的话就自动分一个号码
使用默认值2048
最后扇区,+扇区或+大小{k,m,g}(20481085599,默认10485759): #像这里我打错了一个符号发现删除不了我们可以按住Ctrl+Backapace就可以了
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759): +2G #+2G
我们再依照上面的步骤再加一个新的分区为1G。
Command (m for help): p #打印分区表
Command (m for help): w #写入磁盘,保存并退出,否则之前的操作都无效。
分区表已经更改了!
调用IOCLT()来重新读取分区表。
同步磁盘。
[root@02 ~]# pvcreate /dev/sdb1 /dev/sdb2 #将新创建的两个分区/dev/sdb1 /dev/sdb2转化成物理卷PV
[root@02 ~]# vgcreate vg01 /dev/sdb1 /dev/sdb2 #创建卷组 vg01 ,这个是个名字可以更改,并将刚才创建好的两个物理卷加入该卷组.
[root@02 ~]# vgdisplay #查看物理卷
以下就是显示的Vg的名字vg01、大小为2.99G
以及默认PE大小为4MB,PE是卷组的最小存储单元
[root@02 ~]# lvcreate -n lv01 -l 100 vg01 #创建一个名字为Lv01大小为100的逻辑卷
逻辑卷“LV01”创建。
lvcreate主要参数:
-L 指定逻辑卷的大小,单位为“kKmMgGtT”字节
-l 指定逻辑卷的大小(LE数)
-n 后面跟逻辑卷名
-s 创建快照
[root@02 ~]# lvdisplay #显示逻辑卷属性显示LVM逻辑卷空间大小、读写状态和快照信息等属性。
下面显示就是LV的详细参数
[root@02 ~]# pvscan #扫描当前系统中所有硬盘的物理卷
[root@02 ~]# mkfs -t ext4 /dev/vg01/lv01 #使用mkfs在逻辑卷LV01上创建ext4文件系统.
MKE2FS 1.42.9(23-DEC-2013)
文件系统标签=
操作系统类型:Linux
块大小=1024(log=0)
片段大小=1024(log=0)
步长=0个块,条带宽度=0个块
102400个节点,409600个块
为超级用户保留的20480个块(5%)
第一数据块=1
最大文件系统块=34078720
50方块群
每组8192个块,每组8192个片段
每组2048个节点
存储在块上的超级块备份:
8193, 24577, 40961、57345, 73729, 204801、221185, 401409
分配组表:完成
写入索引表:完成
创建日志(8192个块):完成
编写超级块和文件系统会计信息:完成
[root@02 ~]# df -Th #查看挂载
[root@02 ~]# mkdir /mnt/lv01 #创建一个挂载的目录随便命名LV01
[root@02 ~]# mount /dev/vg01/lv01 /mnt/lv01/ #挂载到新创建的目录下面
[root@02 ~]# vim /etc/fstab
为了查看/mnt/LV01是否设置正确,可以先卸载逻辑卷LV01,然后使用mount –a 使内核重新读取/mnt/LV01,看是否能够自动挂载.
当逻辑卷不够用了,如何扩展。
[root@02 ~]# fdisk /dev/sdc #为了实验接着我们又在另外一块硬盘上面下手
添加分区步骤同上,为了方便我分别创建了两个1G的分区,看一下图片
[root@02 ~]# pvcreate /dev/sdc{1,2} #创建一个pv
[root@02 ~]# lsblk -f #列出所有块设备信息
通过partx工具让内核重读磁盘分区表,partx命令告用来诉内核当前磁盘的分区情况
选项
-a 增加制定的分区或读磁盘新增的分区
-d 删除制定或所有的分区
-l 列出分区
--type 指定分区类型。dos,bsd,solaris,unix,或者gpt
--nr M-N 指定分区范围
[root@02 ~]# partx -s /dev/sdc #显示磁盘分区信息
partprobe: 用于重读分区表,当出现删除文件后,出现仍然占用空间。可以partprobe在不重启的情况下重读分区。将磁盘分区表变化信息通知内核,请求操作系统重新加载分区表。
-d 不更新内核
-s 显示磁盘分区汇总信息
-h 显示帮助信息
-v 显示版本信息
[root@02 ~]# vgcreate -s 8M kk /dev/sdc1 /dev/sdc2 #创建名为kk卷组上的物理卷的8MPE大小
[root@02 ~]# vgdisplay 查看一下
[root@02 ~]# lvcreate -L 1.98G kk /dev/sdc1 /dev/sdc2 #因为上面vg大小为1.98G所以只能创建这么大 的LV卷
[root@02 ~]# mkfs -t ext4 /dev/kk/lvol0 #指定格式
[root@02 ~]# mkdir /mnt/lv02 #创建一个挂载目录
[root@02 ~]# mount /dev/kk/lvol0 /mnt/lv02 #挂载目录
[root@02 ~]# df -Th #看一下挂载
[root@02 ~]# lvreduce -L -400M /dev/kk/lvol0 #缩小逻辑卷400M
//警告:将活动逻辑卷减少到1.59 GIB
//这可能破坏您的数据(文件系统等)。
//你真的想减少LVOL0吗?[Y/N]:Y
//逻辑卷KK/LVOL0的大小从1.98 GIB(254个扩展)变为1.59个GIB(204个扩展)。
//逻辑卷LVOL0成功调整大小。
[root@02 ~]# lvdisplay #查看一下逻辑卷发现已经变成了1.59GiB了
[root@02 ~]# mount /dev/mapper/kk-lvol0 /mnt/lv02 #我挂载一下发现除了问题
安装:错误的FS类型,坏的选项,坏的超级块/DEV/MAPPER/KK-LVRO0,
缺少代码页或辅助程序或其他错误
在某些情况下,在SysLog-Type中找到有用的信息。
尾巴等。
[root@02 ~]# resize2fs -f /dev/mapper/kk-lvol0 1500M #这种情况我又重新缩小了一下逻辑卷
[root@02 ~]# mount /dev/mapper/kk-lvol0 /mnt/lv02 #重新挂载一下
[root@02 ~]# df -h #看一下发现已经挂载上了
大功告成!
总结:LVM逻辑卷是Linux里面一个很棒的空间使用机制,因为分区在没有格式化的情况下是没有办法加大或者放小的。通过LVM可以将你的磁盘空间做到灵活自如。