共计 8768 个字符,预计需要花费 22 分钟才能阅读完成。
这篇文章主要讲解了“linux 的 lvm 分区有什么优缺点”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“linux 的 lvm 分区有什么优缺点”吧!
linux 的 lvm 分区指的就是“逻辑卷管理”,lvm 的英文全称为“Logical Volume Manager”,是 Linux 环境下对磁盘分区进行管理的一种机制;LVM 是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
一、什么是 LVM
LVM(Logical Volume Manager),即逻辑卷管理,是 Linux 环境下对磁盘分区进行管理的一种机制,LVM 是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过 LVM 系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组(volume group),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logical volumes),并进一步在逻辑卷组上创建文件系统。管理员通过 LVM 可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配。当系统添加了新的磁盘,通过 LVM 管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。
一般来说,物理磁盘或分区之间是分隔的,数据无法跨盘或分区,而各磁盘或分区的大小固定,重新调整比较麻烦。LVM 可以将这些底层的物理磁盘或分区整合起来,抽象成容量资源池,以划分成逻辑卷的方式供上层使用,其最主要的功能即是可以在无需关机无需重新格式化(准确地说,原来的部分无需格式化,只格式化新增的部分)的情况下弹性调整逻辑卷的大小。
LVM 的实现过程如下图:
二、LVM 名词解释
PV(physical volume):物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。它只是在物理分区中划出了一个特殊的区域,用于记载与 LVM 相关的管理参数。
VG(volume group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。
LV(logical volume):逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。
PE(physical extent):物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的 pv 加入到 vg 后,pe 的大小自动更改为 vg 中定义的 pe 大小。
LE(logical extent):逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。由于受内核限制的原因,一个逻辑卷(Logic Volume)最多只能包含 65536 个 PE(Physical Extent),所以一个 PE 的大小就决定了逻辑卷的最大容量,4 MB(默认) 的 PE 决定了单个逻辑卷最大容量为 256 GB,若希望使用大于 256G 的逻辑卷,则创建卷组时需要指定更大的 PE。在 Red Hat Enterprise Linux AS 4 中 PE 大小范围为 8 KB 到 16GB,并且必须总是 2 的倍数。
三、LVM 的写入模式
LVM 有两种写入模式:线性模式和条带模式。
线性模式即写完一个设备后再写另一个设备
条带模式就有点类似于 RAID0,即数据是被分散写入到 LVM 各成员设备上的。
因为条带模式的数据不具有安全性,且 LVM 并不强调读写性能,故 LVM 默认为线性模式,这样即使一个设备坏了,其它设备上的数据还在。
四、LVM 的工作原理
LVM 在每个物理卷头部都维护了一个 metadata,每个 metadata 中都包含了整个 VG(volume group:卷组)的信息,包括每个 VG 的布局配置,PV(physical volume:物理卷)的编号,LV(logical volume:逻辑卷)的编号,以及每个 PE(physical extends:物理扩展单元)到 LE(logical extends:物理扩展单元)的映射关系。同一个 VG 中的每个 PV 头部的信息都是相同的,这样有利于故障时进行数据恢复。
LVM 对上层文件系统提供 LV 层,隐藏了操作细节。对文件系统而言,对 LV 的操作与原先对 partition 的操作没有差别。当对 LV 进行写入操作的时候,LVM 定位相应的 LE,通过 PV 头部的映射表将数据写入到相应的 PE 上。LVM 最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。我们如果新增加了硬盘,其也不会改变现有上层的逻辑卷。关键在于 PE 和 LE 之间建立映射关系,不同的映射规则决定了不同的 LVM 存储模型。LVM 支持多个 PV 的 stripe 和 mirror。
五、LVM 的优缺点
优点:
文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制。
可以在系统运行的状态下动态的扩展文件系统的大小。
可以增加新的磁盘到 LVM 的存储池中。
可以以镜像的方式冗余重要的数据到多个物理磁盘。
可以方便的导出整个卷组到另外一台机器。
缺点:
在从卷组中移除一个磁盘的时候必须使用 reducevg 命令(这个命令要求 root 权限,并且不允许在快照卷组中使用)。
当卷组中的一个磁盘损坏时,整个卷组都会受到影响。
因为加入了额外的操作,存贮性能受到影响。
六、创建 PV/VG/LV 的方法
1、将各物理磁盘或分区的系统类型设为 Linux LVM,其 system ID 为 8e,通过 fdisk 工具中的 t 命令设置
[root@localhost ~]# fdisk /dev/sdb ...
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (2-4, default 2): 2First sector (20973568-62914559, default 20973568):
Using default value 20973568Last sector, +sectors or +size{K,M,G} (20973568-62914559, default 62914559): +5G
...
Command (m for help): t
Partition number (1,2, default 2): 2Hex code (type L to list all codes): 8e # 指定 system id 为 8eChanged type of partition Linux to Linux LVM ...
Command (m for help): p
...
/dev/sdb1 2048 20973567 10485760 8e Linux LVM
/dev/sdb2 20973568 31459327 5242880 8e Linux LVM
Command (m for help): w
...
2、将各物理磁盘或分区初始化为 PV(physical volume,物理卷)
这一阶段可使用的命令为 pvcreate、pvremove、pvscan、pvdisplay(pvs)
1)pvcreate:创建物理卷
用法:pvcreate [option] DEVICE
选项:
-f:强制创建逻辑卷,不需用户确认
-u:指定设备的 UUID
-y:所有问题都回答 yes
例 pvcreate /dev/sdb1 /dev/sdb2
2)pvscan:扫描当前系统上的所有物理卷
用法:pvscan [option]
选项:
-e:仅显示属于输出卷组的物理卷
-n:仅显示不属于任何卷组的物理卷
-u:显示 UUID
3)pvdisplay:显示物理卷的属性
用法:pvdisplay [PV_DEVICE]
4)pvremove:将物理卷信息删除,使其不再被视为一个物理卷
用法:pvremove [option] PV_DEVICE
选项:
-f:强制删除
-y:所有问题都回答 yes
例 pvremove /dev/sdb1
5)pv 创建和删除例子
[root@localhost ~]# pvcreate /dev/sdb{1,2} # 将两个分区初始化为物理卷
Physical volume /dev/sdb1 successfully created.
Physical volume /dev/sdb2 successfully created.
[root@localhost ~]# pvscan
PV /dev/sdb2 lvm2 [5.00 GiB]
PV /dev/sdb1 lvm2 [10.00 GiB]
Total: 2 [15.00 GiB] / in use: 0 [0 ] / in no VG: 2 [15.00 GiB]
[root@localhost ~]# pvdisplay /dev/sdb1 # 显示物理卷 sdb1 的详细信息
/dev/sdb1 is a new physical volume of 10.00 GiB
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0 # 由于 PE 是在 VG 阶段才划分的,所以此处看到的都是 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID GrP9Gi-ubau-UAcb-za3B-vSc3-er2Q-MVt9OO
[root@localhost ~]# pvremove /dev/sdb2 # 删除 sdb2 的物理卷信息
Labels on physical volume /dev/sdb2 successfully wiped.
[root@localhost ~]# pvscan # 可以看到 PV 列表中已无 sdb2
PV /dev/sdb1 lvm2 [10.00 GiB]
Total: 1 [10.00 GiB] / in use: 0 [0 ] / in no VG: 1 [10.00 GiB]
[root@localhost ~]# pvcreate /dev/sdb2
Physical volume /dev/sdb2 successfully created.
3、创建 VG(volume group,卷组)。卷组将多个物理卷整合起来(屏蔽了底层细节),并划分 PE(physical extend)
PE 是物理卷中的最小存储单元,有点类似于文件系统中的 block,PE 大小可指定,默认为 4M。这一阶段用到的命令有 vgcreate、vgscan、vgdisplay、vgextend、vgreduce
1)vgcreate:创建卷组
用法:vgcreate [option] VG_NAME PV_DEVICE
选项:
-s:卷组中的物理卷的 PE 大小,默认为 4M
-l:卷组上允许创建的最大逻辑卷数
-p:卷级中允许添加的最大物理卷数
例 vgcreate -s 8M myvg /dev/sdb1 /dev/sdb2
2)vgscan:查找系统中存在的 LVM 卷组,并显示找到的卷组列表
3)vgdisplay:显示卷组属性
用法:vgdisplay [option] [VG_NAME]
选项:
-A:仅显示活动卷组的信息
-s:使用短格式输出信息
4)vgextend:动态扩展 LVM 卷组,它通过向卷组中添加物理卷来增加卷组的容量
用法:vgextend VG_NAME PV_DEVICE
例 vgextend myvg /dev/sdb3
5)vgreduce:通过删除 LVM 卷组中的物理卷来减少卷组容量,不能删除 LVM 卷组中剩余的最后一个物理卷
用法:vgreduce VG_NAME PV_DEVICE
6)vgremove:删除卷组,其上的逻辑卷必须处于离线状态
用法:vgremove [-f] VG_NAME
-f:强制删除
7)vgchange:常用来设置卷组的活动状态
用法:vgchange -a n/y VG_NAME
-a n 为休眠状态,休眠之前要先确保其上的逻辑卷都离线;
-a y 为活动状态
8)vg 创建例子
[root@localhost ~]# vgcreate -s 8M myvg /dev/sdb{1,2}
Volume group myvg successfully created
[root@localhost ~]# vgscan
Reading volume groups from cache.
Found volume group myvg using metadata type lvm2
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name myvg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 14.98 GiB
PE Size 8.00 MiB
Total PE 1918
Alloc PE / Size 0 / 0
Free PE / Size 1918 / 14.98 GiB
VG UUID aM3RND-aUbQ-7RjC-dCci-JiS4-Oj2Z-wv9poA
4、在卷组上创建 LV(logical volume,逻辑卷)
为了便于管理,逻辑卷对应的设备文件保存在卷组目录下,为 /dev/VG_NAME/LV_NAME。LV 中可以分配的最小存储单元称为 LE(logical extend),在同一个卷组中,LE 的大小和 PE 是一样的,且一一对应。这一阶段用到的命令有 lvcreate、lvscan、lvdisplay、lvextend、lvreduce、lvresize
1)lvcreate:创建逻辑卷或快照
用法:lvcreate [选项] [参数]
选项:
-L:指定大小
-l:指定大小(LE 数)
-n:指定名称
-s:创建快照
-p r:设置为只读(该选项一般用于创建快照中)
注:使用该命令创建逻辑卷时当然必须指明卷组,创建快照时必须指明针对哪个逻辑卷
例 lvcreate -L 500M -n mylv myvg
2)lvscan:扫描当前系统中的所有逻辑卷,及其对应的设备文件
3)lvdisplay:显示逻辑卷属性
用法:lvdisplay [/dev/VG_NAME/LV_NAME]
4)lvextend:可在线扩展逻辑卷空间
用法:lvextend -L/-l 扩展的大小 /dev/VG_NAME/LV_NAME
选项:
-L:指定扩展(后)的大小。例如,-L +800M 表示扩大 800M,而 -L 800M 表示扩大至 800M
-l:指定扩展(后)的大小(LE 数)
例 lvextend -L 200M /dev/myvg/mylv
5)lvreduce:缩减逻辑卷空间,一般离线使用
用法:lvexreduce -L/-l 缩减的大小 /dev/VG_NAME/LV_NAME
选项:
-L:指定缩减(后)的大小
-l:指定缩减(后)的大小(LE 数)
例 lvreduce -L 200M /dev/myvg/mylv
6)lvremove:删除逻辑卷,需要处于离线(卸载)状态
用法:lvremove [-f] /dev/VG_NAME/LV_NAME
-f:强制删除
7)lv 创建例子
[root@localhost ~]# lvcreate -L 2G -n mylv myvg
Logical volume mylv created.
[root@localhost ~]# lvscan
ACTIVE /dev/myvg/mylv [2.00 GiB] inherit
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/myvg/mylv
LV Name mylv
VG Name myvg
LV UUID 2lfCLR-UEhm-HMiT-ZJil-3EJm-n2H3-ONLaz1
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2019-07-05 13:42:44 +0800
LV Status available
# open 0
LV Size 2.00 GiB
Current LE 256
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
5、格式化逻辑卷并挂载
[root@localhost ~]# mke2fs -t ext4 /dev/myvg/mylv
…
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
…
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount
mount mountpoint
[root@localhost ~]# mount /dev/myvg/mylv /data
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 1.5G 49G 3% /
devtmpfs 903M 0 903M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 8.6M 904M 1% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
tmpfs 183M 0 183M 0% /run/user/0
/dev/mapper/myvg-mylv 2.0G 6.0M 1.8G 1% /data
PS:更新
一、LV 逻辑卷扩容后,必须对挂载目录在线扩容。
使用 resize2fs 或 xfs_growfs 对挂载目录在线扩容
resize2fs 针对文件系统 ext2 ext3 ext4
xfs_growfs 针对文件系统 xfs
xfs 在线扩容
xfs_growfs /dev/mapper/vg--BHG-lv01
meta-data=/dev/mapper/vg--BHG-lv01 isize=512 agcount=4, agsize=32000 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0data = bsize=4096 blocks=128000, imaxpct=25
= sunit=0 swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0 ftype=1log =internal bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0data blocks changed from 128000 to 256000
ext4 在线扩容
[root@localhost /]# resize2fs /dev/mapper/vg--BHG-lv02
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/vg--BHG-lv02 is mounted on /BHGPOS-data; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/mapper/vg--BHG-lv02 is now 5242880 blocks long.
感谢各位的阅读,以上就是“linux 的 lvm 分区有什么优缺点”的内容了,经过本文的学习后,相信大家对 linux 的 lvm 分区有什么优缺点这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!