Linux从入门到精通——lvm逻辑卷的管理
一.关于lvm
1.什么是lvm
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。
LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组(volume group),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logical volumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“DBdata”和“DBSoft”,而不是使用物理磁盘名“sda”和“sdb”或”hda”和”hdb”。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可
2.关于lvm的一些基本术语
物理存储介质(The physical media)
这里指系统的存储设备:硬盘,如:/dev/hda、/dev/sda等等,是存储系统最低层的存储单元。
物理卷(physicalvolume)
物理卷(pv)就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是被lv命令处理过的物理分区,所以它和基本的物理存储介质(如分区、磁盘等)不同,它包含有与LVM相关的管理参数。
物理卷组(Volume Group)
LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成,它是被组装到一起的物理卷。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
逻辑卷(logicalvolume)
LVM的逻辑卷类似于非LVM系统中的硬盘分区,是可以直接使用的设备,可以增大或缩减并保持原有数据不变,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
物理扩展(physical extent)
每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
逻辑扩展(logical extent)
逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
首先可以看到,物理卷(PV)被由大小等同的基本单元PE组成。
一个卷组由一个或多个物理卷组成:
从上图可以看到,PE和LE有着一一对应的关系。逻辑卷建立在卷组上。逻辑卷就相当于非LVM系统的磁盘分区,可以在其上创建文件系统。
下图是磁盘分区、卷组、逻辑卷和文件系统之间的逻辑关系的示意图:
和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷起始处的VGDA(卷组描述符区域)中。VGDA包括以下内容: PV描述符、VG描述符、LV描述符、和一些PE描述符 。
系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的实际物理存储位置。当系统进行I/O操作时,就会根据VGDA建立的映射机制来访问实际的物理位置。
二.lvm的管理
1.创建lvm逻辑卷
创建一个新的分区并指定分区为标签为8e,否则无法用lvm进行管理
fdisk /dev/vdb
n ##添加新分区
p ##指定分区类型
1 ##指定第几分区
Enter
+1G ##设定分区大小
t ##更改标签
1 ##如果只有一个分区则不用输入,如果多于一个分区需要指明更改哪个分区的标签
8e ##指定分区系统类型为Linux LVM
wq ##保存退出
partprobe ##同步分区表
pvcreate /dev/vdb1 ##创建物理卷
vgcreate league /dev/vdb1 ##创建卷组,命名为league,名字任意
lvcreate -L 20M -n yasuo league ##创建逻辑卷,设定大小为20M,命名为yasuo,属于league卷组
mkfs.xfs /dev/league/yasuo ##设定yasuo的文件系统为xfs格式
mount /dev/league/yasuo /mnt ##挂载
df -H /mnt ##查看挂载在mnt上的磁盘大小,如果不挂载是无法查看磁盘大小的
注:每次创建完新的分区都要手动同步分区表,否则创建逻辑卷的时候,分区是无法被时别到的
查看系统中是否存在能使用的设备,可以看到有一个10.7G 的vdb还没有分区,使用该虚拟设备进行实验
新建分区,并设定标签为8e,即为逻辑分区,大小设定为一个G
[root@localhost Desktop]# fdisk -l
添加完之后再查看可以看到新建的分区已经有了
把新建的分区变为物理卷
创建卷组,命名为league,命名可以任意,需要指定真实的设备
创建逻辑卷,设定大小为20M,命名为yasuo,命名可以任意
设定逻辑卷的文件系统
挂载在/mnt上,用df -H 查看磁盘的大小,由于设定文件系统会占用一定的空间,所以显示出来的不是20M,关于df的一些信息有疑问的可以看下文
——————附关于df命令的一些参数——————
在Linux系统中df命令可显示所有文件系统对i节点和磁盘的使用情况,常用参数如下:
-a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc的文件系统
-k 以k字节为单位显示
-m 以M字节为单位显示
-i 显示i节点信息,默认显示的是磁盘块信息
-t 显示指定类型的文件系统的磁盘空间使用情况,后要加指定文件系统的名称
-x 显示除指定类型的文件系统外的所有其他文件系统的磁盘空间使用情况,与-t刚好相反
-T 显示文件系统的类型
-H 显示磁盘空间大小
-h 显示磁盘空间大小,需要注意的是,-H是以十进制为单位,即1G=1000M,-h是以二进制为单位,即1G=1024M,所以只是看到的大小会有不同,并不是设备有问题 ,一般用-H比较方便
i节点可以理解为C语言中的指针,用来存储文件的linux中,文件查找不是通过文件名称来查找的,而是通过i节点来实现文件的查找定位的。
关于i节点的具体情况可以参考一下《深入理解linux i节点(inode)》——https://blog.csdn.net/vsooda/article/details/9216245
2.lvm的拉伸
lvm是支持热拉伸的,即在线扩容,即改即生效
(1).当卷组中的剩余容量充足时
lvextend -L 80M league ##-L指定拉伸大小
xfs_grow /dev/league/lv ##拉伸文件系统,否则系统能使用的逻辑卷大小不会改变
拉伸逻辑卷,使逻辑卷大小变为80M
拉伸完之后用lvs 命令查看一下逻辑卷的大小,可以看到逻辑卷大小变为80M了
(2).当卷组中的容量不足时
再次建立一个新的分区并修改标签8E
partprobe ##同步分区表
pvcreate /dev/vdb2 ##把新的分区变为物理卷
vgextend league /dev/vdb2 ##将分区容量加入进卷组,并拉伸卷组
lvextend -L 600M league ##拉伸逻辑卷
xfs_grow /dev/league/lv ##拉伸文件系统
创建一个新的分区vdb2
将新的分区创建为物理卷后加入卷组league中,用vgs 查看可以看到卷组的大小从一个G变为两个G
[root@server Desktop]l# vextend -L 500M league ##拉伸逻辑卷,变为600M
拉伸逻辑卷后查看文件系统大小并没有改变,需要拉伸文件系统
拉伸完文件系统后可以看到已经变为500M了
3.对ext文件系统的设备的拉伸和缩减
xfs文件系统虽然可以热拉伸,但是不能热缩减,如果文件占用资源减少,但文件系统占用空间却无法减少,就会造成资源的浪费
而ext文件系统是既可以拉伸也可以缩减的
(1)更改文件系统
umount /mnt ##更改文件系统前要先卸载设备
mkfs.ext4 /dev/league/yasuo ##更改文件系统为ext4
mount /dev/league/yasuo /mnt ##重新挂载
改变文件系统之前先卸载设备,否则可能会损坏文件或数据
改变文件系统之后用df -T查看一下,可以看到现在该设备的文件系统已经变为ext4了
(2)拉伸
lvextend -L 600M /dev/league/yasuo
resize2fs /dev/league/yasuo ##注意ext文件系统更改大小的命令和xfs是不一样的
拉伸到600M
更新一下文件系统的大小,使增加的空间全部覆盖在文件系统上
(3)缩减lvm
umount /dev/league/yasuo ##为了防止文件数据损坏先要卸载设备
e2fsck -f /dev/league/yasuo ##检查文件系统的正确性,如果传回的值为0则正确
resize2fs /dev/league/yasuo 500M ##更改文件系统大小,后面跟的参数必须是经过严格设计的
lvreduce -L 500M /dev/league/yasuo ##减少的容量大小也是实现要考虑好的,不然减得太少会使文件系统出问题
mount /dev/league/yasuo /mnt ##重新挂载
缩减空间时也要先卸载设备防止文件或数据损坏
检查文件系统的正确性,这一步是必须进行的,如果不进行,将无法进行接下来的操作,在操作过程中如果不慎删除逻辑卷,想要重设定为ext4文件系统时,也必须要先检查正确性
否则无法设定
把文件系统大小改为500M
缩减逻辑卷大小,改为500M,这样就完成了缩减,可以挂载设备查看一下是否成功
可以看到已经缩减为500M
注:e2fsck执行后的传回值及代表意义如下:
e2fsck -f 表示即使文件系统没有错误迹象,仍强制地检查正确性。
(4)缩减vg
移除空闲的pv:
vgreduce league /dev/vdb2
移除空闲的物理卷vdb2
如何移除含有数据的设备:
pvmove /dev/vdb1 /dev/vdb2 ##把vdb1中的数据移动到vdb2中
vgreduce league /dev/vdb1 ##把vdb1从卷组中移除
pvremove /dev/vdb1 ##删除物理卷
移动数据
把已经没有数据的物理卷从圈组中移除
删除物理卷vdb1,这只是把逻辑分区删除了,并不是把真实设备上的分区删除了,需要注意区分
注:查看逻辑卷、卷组、物理卷的情况及大小可以用 lvs vgs pvs 查看
4.lvm快照
lvcreate -L 40M -n zed -s /dev/league/yasuo ##-L指定快照大小,-n指定快照的名称,命名可以任意,-s指定快照的源文件
mount /dev/league/zed /mnt ##挂载快照
创建一个新的快照
挂载查看是否创建成功
不小心删除或者文件系统过大撑爆快照以后可以重新照:
umount /mnt ##先卸载损坏的设备
lvremove /dev/league/zed ##重复上述操作即可
lvcreate -L 40M -n zed -s /dev/league/yasuo
mount /dev/league/zed /mnt
5.lvm的删除
lvremove /dev/league/zed
lvremove /dev/league/yasuo
vgremove league
pvremove /dev/vdb2
删除时不要忘了把快照也删掉
删除逻辑卷
删除圈组
删除物理卷
三.磁盘阵列(raid)
1.什么是raid
磁盘阵列(Redundant Arrays of Inexpensive Disks,RAID),有“价格便宜具有冗余能力的磁盘阵列”之意。原理是利用数组方式来
作磁盘组,配合数据分散排列的设计,提升数据的安全性。磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个
别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。磁盘阵列还能
利用同位检查(Parity Check)的观念,在数组中任一颗硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。
2.raid的配置
RAID 0(条带 (strping))
是组建磁盘阵列中最简单的一种形式,只需要2块以上的硬盘即可,成本低,可以提高整个磁盘的性能和吞吐量。
RAID 0没有提供冗余或错误修复能力,但实现成本是最低的。
特点:速度快,没有容错能力
RAID1:镜像(mirroring)
ID 1称为磁盘镜像,原理是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,
在不影响性能情况下最大限度的保证系统的可靠性和可修复性上,只要系统中任何一对镜像盘中至少有一块磁盘可以使用,甚至可以在一半数量的
硬盘出现问题时系统都可以正常运行,当一块硬盘失效时,系统会忽略该硬盘,转而使用剩余的镜像盘读写数据,具备很好的磁盘冗余能力。虽然这
样对数据来讲绝对安全,但是成本也会明显增加,磁盘利用率为50%,以四块80GB容量的硬盘来讲,可利用的磁盘空间仅为160GB。另外,出现
硬盘故障的RAID系统不再可靠,应当及时的更换损坏的硬盘,否则剩余的镜像盘也出现问题,那么整个系统就会崩溃。更换新盘后原有数据会需要
很长时间同步镜像,外界对数据的访问不会受到影响,只是这时整个系统的性能有所下降。因此,RAID 1多用在保存关键性的重要数据的场合。
RAID 1示意图
RAID5:条带+分布校验
3块以上,利用率为(n-1)/n,有容错功能,最多可以坏一块磁盘
RAID6:条带+分布校验+分布校验
5块以上,利用率为(n-2)/n,有容错功能,最多可以坏二块磁盘
RAID10:镜像+条带
利用率为50%
RAID配置总结:
具体实现流程及命令会在后文写出。