Linux系统磁盘管理之LVM使用详解

互联网老兵互联网老兵 2023-07-13 115 阅读

什么是LVM?

LVM(Logical Volume Manager)逻辑卷管理,也有翻译成大容量管理。是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的 分区加入其中,这样可以事项一种磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性,使用普通的磁盘分区,当一个磁盘的分区空间不够使用的时候,可 能就会带来很大的麻烦。使用LVM在一定程度上就可以解决普通磁盘分区带来的问题。

Linux系统磁盘管理之LVM使用详解

为什么使用LVM?

LVM通常用于装备大量磁盘的系统,但它同样适于仅有一、两块硬盘的小系统。

小系统使用LVM的益处?

传统的文件系统是基于分区的,一个文件系统对应一个分区。这种方式比较直观,但不易改变:

1.不同的分区相对独立,无相互联系,各分区空间很易利用不平衡,空间不能充分利用;

2.当一个文件系统/分区已满时,无法对其扩充,只能采用重新分区/建立文件系统,非常麻烦;或把分区中的数据移到另一个更大的分区中;或采用符号连接的方式使用其它分区的空间。

3.如果要把硬盘上的多个分区合并在一起使用,只能采用再分区的方式,这个过程需要数据的备份与恢复。

当采用LVM时,情况有所不同:

1.硬盘的多个分区由LVM统一为卷组管理,可以方便的加入或移走分区以扩大或减小卷组的可用容量,充分利用硬盘空间;

2.文件系统建立在逻辑卷上,而逻辑卷可根据需要改变大小(在卷组容量范围内)以满足要求;

3.文件系统建立在LVM上,可以跨分区,方便使用;

大系统使用LVM的益处?

在使用很多硬盘的大系统中,使用LVM主要是方便管理、增加了系统的扩展性。 在一个有很多不同容量硬盘的大型系统中,对不同的用户的空间分配是一个技巧性的工作,要在用户需求与实际可用空间中寻求平衡。用户/用户组的空间建立在LVM上,可以随时按要求增大,或根据使用情况对各逻辑卷进行调整。当系统空间不足而加入新的硬盘时,不必把用户的数据从原硬盘迁 移到新硬盘,而只须把新的分区加入卷组并扩充逻辑卷即可。同样,使用LVM可以在不停服务的情况下。把用户数据从旧硬盘转移到新硬盘空间中去。

【名词解释】

1. PV(Physical Volume):物理卷,处于LVM最底层,可以是物理硬盘或者分区。

2.PE(Physical Extend):物理区域,PV中可以用于分配的最小存储单元,可以在创建PV的时候制定,如1M, 2M, 4M, 8M, 32M, 64M…组成同一VG中所有PV的PE大小应该相同。

3.VG(Volume Group):卷组,建立在PV之上,可以含有一个到多个PV。

4. LV(Logical Volume):逻辑卷,建立在VG之上,相当于原来分区的概念。不过大小可以动态改变。

【创建LVM】可参考linux 系统硬盘分区

1.目前分区

2.添加2块硬盘

3.给2块硬盘分别分2个区,输入fdisk /dev/sdb

Blocks:分区的大小,以Blocks(块)为单位,默认的块大小为1024字节

Id:分区对应的系统ID号。83 表示Linux中的XFS 分区或EXT4分区(普通分区的id)、8e 表示LVM逻辑卷。。82 swap交换分区的id fd raid磁盘整列的id。System:分区类型。识别到新的硬盘设备后,就可以在该硬盘中建立新的分区了。在Linux操作系统中,分区和格式化的过程是相对独立。

输入P打印一下磁盘分区信息,比如ID类型是 83.

输入命令t可以进行修改分区类型,输入需要修改的分区和修改的分区类型代码。

确认没有问题之后,输入W 进行保存。(如果出现错误,选择D删除重新分区)修改好之后的分区要正常使用,还需要进行格式化操作。

常见磁盘id序号表,输入l可以查看。

注:注意将分区id修改为8e

每个区分了5G

注:

First Sector 表示起始扇区

默认从第2048块扇区开始是因为,由于EFI的兴起,要给EFI 代码留磁盘最开始的1M空间.Extensive Firmware Interface 可拓展固件接口,是英特尔公司推出的一种在类PC的电脑系统中替代BIOS的升级方案。EFI以小型磁盘分区的形式存放在硬盘上的,并非在BIOS的FLASH里面。

那留1M空间为什么要从第2048块扇区开始?

因为每块扇区有512字节 [现在新硬盘扇区每块为4096字节(4KByte)]

2048*512Byte = 1024 KByte = 1 Mbyte

4、用fdisk –l 命令查看分区表,df -lh查看分区情况

5、建好分区后,用pvcreate命令在新建的分区上创建PV

1)先安装lvm2,yum -y install lvm2

2)pvcreate /dev/sdb1 /dev/sdb2 /dev/sdc1 /dev/sdc2

pvscan

6、使用vgcreate命令创建一个名为vgdata的VG,并且将所有的新建的PV加入vgdata

7、用lvcreate –L 11G –n lv01 vgdata 命令从VG vgdata中创建一个大小为11G的名为lv001的LV

lvcreate -L 11G -n lv001 vgdata

我们创建的第一个LV所在的目录为 /dev/vgdata/lv001

8、使用mkfs /dev/vgdata/lv01命令格式化lv01

mkfs.xfs /dev/vgdata/lv001

9、创建/data,把/dev/vgdata/lv001挂载上去

挂载好后,可以正常使用了

【扩容LVM】

1.有9G的剩余空间还未分配

1)挂载至另一个目录中

lvcreate 这个命令中-L后加容量,-l 后加百分比。

2)把未分配空间添加到原来的挂载目录中

lvextend是扩展逻辑卷,lvreduce是缩小逻辑卷,lvresize是扩展或缩小逻辑

扩展尽量使用lvextend,安全性更高

lvextend -l +100%free -r /dev/vgdata/lv001

xfs格式不支持缩容,只支持扩容

2.添加硬盘扩容

1)先分区

2)新机盘无需在创建物理卷

vgextend vgdata /dev/sdd1

lvcreate -L 3G -n lv002 vgdata

把3G的容量放在同一卷组的新创建的逻辑卷lv002中

挂载到/data2中

然后把50%的容量加到lv001中,会挂载在/data

Sdd1最后剩下的都加到lv002中,就是挂载到data2中

最后,别忘了,设置开机自动挂载!

总结:

lvm结构:

磁盘 => 分区 => PV => VG => LV => 文件系统

扩张:

先扩LV再扩文件系统

lvextend -L +100M /dev/vg1/lv1 逻辑卷的大小增加100M

resize2fs /dev/vg1/lv1 文件系统增到逻辑卷的大小

收缩:

先减文件系统再减LV(注意顺序)

umount /dev/vg1/lv1

e2fsck -f /dev/vg1/lv1

resize2fs /dev/vg1/lv1 100M 减小文件系统到100M

lvreduce -L 100M /dev/vg1/lv1 减小逻辑卷到100M

mount -a

创建PV所需分区:

[root@rhel6-client ~]# fdisk -cul /dev/sda

[root@rhel6-client ~]# fdisk -cu /dev/sda

Command (m for help): w

reboot/partx -a /dev/sda

[root@rhel6-client ~]# cat /proc/partitions

root@rhel6-client ~]# pvcreate /dev/sda5 /dev/sda6 /dev/sda7

root@rhel6-client ~]# vgcreate -s 8M vg1 /dev/sda5 /dev/sda6 /dev/sda7

[root@rhel6-client ~]# vgs

创建LV:

[root@rhel6-client ~]# lvcreate vg1 -L 100M -n lv1

[root@rhel6-client ~]# lvs

[root@rhel6-client ~]# df -h

创建文件系统:

[root@rhel6-client ~]# mkfs.ext4 /dev/vg1/lv1

挂载文件系统:

[root@rhel6-client ~]# mkdir /lvm

[root@rhel6-client ~]# mount /dev/vg1/lv1 /lvm

[root@rhel6-client ~]# df -h

扩张:先扩lvm再扩文件系统

[root@rhel6-client ~]# vgs

[root@rhel6-client ~]# lvextend -L +100M /dev/vg1/lv1

[root@rhel6-client ~]# lvs

[root@rhel6-client ~]df -h

[root@rhel6-client ~]# resize2fs /dev/vg1/lv1

[root@rhel6-client ~]# df -h

收缩:先件文件系统再减lvm

[root@rhel6-client ~]# resize2fs /dev/vg1/lv1 150M

[root@rhel6-client ~]# umount /lvm

[root@rhel6-client ~]# resize2fs /dev/vg1/lv1 150M

Please run 'e2fsck -f /dev/vg1/lv1' first.

[root@rhel6-client ~]# e2fsck -f /dev/vg1/lv1

[root@rhel6-client ~]# resize2fs /dev/vg1/lv1 150M

[root@rhel6-client ~]# lvs

[root@rhel6-client ~]# lvreduce -L 150M /dev/vg1/lv1

[root@rhel6-client ~]# lvs

[root@rhel6-client ~]# mount /dev/vg1/lv1 /lvm

[root@rhel6-client ~]# df -h

[root@rhel6-client ~]# lvs

[root@rhel6-client ~]# vgs

逻辑卷可以实现动态在线拉伸,扩展一个逻辑卷的空间不需要卸载文件系统

raid: 用多个硬盘 在其上分散存储或重复存储的数据系统!

lvm: 高效的在多个分区之间分配可用的磁盘空间.

创建逻辑卷的步骤:1、首先使用fdisk修改分区的ID为8e2、通过pvcreate命令将linux分区处理成物理卷(PV)3、通过vgcreate命令将创建好的物理卷处理成卷组(VG)4、通过lvcreate命令将卷组分成若干个逻辑卷(LV)

----VG的扩展相对简单三步操作就可以完成-----------------

步骤:

准备分区,设置新分区的System ID为8e

使用pvcreate构建PV

使用vgextend将新的PV加入到原有VG中

查看当前系统中原有的PV:

[root@localhost ~]# pvs

PV VG Fmt Attr PSize PFree /dev/sdb1 testVG lvm2 a-- 10.00g 0 /dev/sdc1 testVG lvm2 a-- 10.00g 10.00g1.2.3.4.

准备分区结果:

[root@localhost ~]# fdisk /dev/sdd

Device Boot Start End Blocks Id System /dev/sdd1 1 1306 10490413+ 8e Linux LVM1.2.3.

使用pvcreate 命令创建pv:

[root@localhost ~]# pvcreate /dev/sdd1 Physical volume "/dev/sdd1" successfully created1.2.

查看当前系统中的所有PV:

[root@localhost ~]# pvscan PV /dev/sdb1 VG testVG lvm2 [10.00 GiB / 0 free] PV /dev/sdc1 VG testVG lvm2 [10.00 GiB / 10.00 GiB free] PV /dev/sdd1 lvm2 [10.00 GiB] Total: 3 [30.00 GiB] / in use: 2 [20.00 GiB] / in no VG: 1 [10.00 GiB]1.2.3.4.5.

可见sdb1和sdc1已经加入到了名为testVG的VG中,

将名为/dev/sdd1的PV加入到名为testVG中:

[root@localhost ~]# vgextend testVG /dev/sdd1 Volume group "testVG" successfully extended1.2.

查看VG扩展结果:

[root@localhost ~]# pvs

PV VG Fmt Attr PSize PFree /dev/sdb1 testVG lvm2 a-- 10.00g 0 /dev/sdc1 testVG lvm2 a-- 10.00g 10.00g /dev/sdd1 testVG lvm2 a-- 10.00g 10.00g1.2.3.4.5.

------------VG的缩减--------------:

步骤:

确定要移除的PV

使用pvmove将此PV上的数据转移到其它PV

使用vgreduce:从卷组中将此PV移除

使用pvremove删除物理卷,真正删除pv的物理卷

移除名为/dev/sdb1的pv

pvmove /path/to/pv 将PV上的数据转移到其它PV,如果不指定目标PV则转移到同卷组的其它PV上:

[root@localhost ~]# pvmove /dev/sdb1 /dev/sdb1: Moved: 0.2% /dev/sdb1: Moved: 61.5% /dev/sdb1: Moved: 100.0%1.2.3.4.

卷组testVG的当前情况:

[root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 testVG lvm2 a-- 10.00g 10.00g /dev/sdc1 testVG lvm2 a-- 10.00g 0 /dev/sdd1 testVG lvm2 a-- 10.00g 10.00g1.2.3.4.5.

从卷组testVG中移除名为/dev/sdv1的PV:

[root@localhost ~]# vgreduce testVG /dev/sdb1 Removed "/dev/sdb1" from volume group "testVG"1.2.

再次查看卷组testVG的情况:

[root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 a-- 10.00g 10.00g /dev/sdc1 testVG lvm2 a-- 10.00g 0 /dev/sdd1 testVG lvm2 a-- 10.00g 10.00g1.2.3.4.5.

可以看到vgreduce命令只是把/dev/sdb1从卷组testVG中移除,但并没有删除名为/dev/sdb1的PV

使用pvremove真正删除名为/dev/sdb1的PV:

[root@localhost ~]# pvremove /dev/sdb1 Labels on physical volume "/dev/sdb1" successfully wiped1.2.

查看pvremove的操作结果,可以看到名为/dev/sdb1的pv被删除了

[root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdc1 testVG lvm2 a-- 10.00g 0 /dev/sdd1 testVG lvm2 a-- 10.00g 10.00g1.2.3.4.

注意:pvmove 和 pvremove操作的不同,pvmove是移动数据,而pvremove是删除PV.

VG上的操作并不会影响lv中的数据

----------------LV的扩展----------------------

步骤:

确定当前逻辑卷所在的卷组有足够的空闲空间:

扩展物理边界,即分区的大小

扩展逻辑边界,即文件系统的大小

完成文件系统检测

使用命令pvs查看名为testVG的信息:

[root@localhost ~]# vgs

VG #PV #LV #SN Attr VSize VFree testVG 2 1 0 wz--n- 20.00g 10.00g1.2.3.

可以看到在testVG的卷组中PV数为2 LV数为1 ,VG总大小为20G ,空闲10G

查看lv的大小:

[root@localhost ~]# lvs

LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert testLV testVG -wi-ao--- 10.00g1.2.3.

使用命令lvextend [-L|-l] [+] SIZE /path/to/lv扩展物理边界的大小:

size前边有+号和没有加号的区别:

有+号:表示扩展了

无+号: 表示扩展到

-L:SIZE 以B ,M ,G 为单位表示扩展的量

-l:以物理扩展为单位,表示扩展了多少个pe

[root@localhost ~]# lvextend -L +5G /dev/testVG/testLV Extending logical volume testLV to 15.00 GiB Logical volume testLV successfully resized1.2.3.

使用lvs查看扩展后的lv的前况:

[root@localhost ~]# lvs

LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert testLV testVG -wi-ao--- 15.00g1.2.3.

可以看到扩展成功,但是为什么我们把lv挂载之后使用df -lh查看,却只是看得到10G而不是15G呢?

[root@localhost ~]# df -lh /backup/ Filesystem Size Used Avail Use% Mounted on /dev/mapper/testVG-testLV 9.9G 151M 9.2G 2% /backup [root@localhost ~]#j ld1.2.3.4.5.

是因为我们只扩展了分区的大小,并没有扩展文件系统的大小:

使用命令resize2fs /path/to/device扩展文件系统:

[root@localhost ~]# resize2fs /dev/testVG/testLV resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/testVG/testLV is mounted on /backup; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/testVG/testLV to 3932160 (4k) blocks. The filesystem on /dev/testVG/testLV is now 3932160 blocks long.1.2.3.4.5.6.

再次使用df -lh 查看文区大小,可以看到结果也是15G了

[root@localhost ~]# df -lh /backup/ Filesystem Size Used Avail Use% Mounted on /dev/mapper/testVG-testLV 15G 153M 14G 2% /backup1.2.3.4.

文件系统检测:

fsck :可以检测所有的支持的文件系统

e2fsck [-t fs_type][-f][-p] /path/to/device 只支持ext系列文件系统

-f :强制检测

-p:检测过程中如果有问题就修复

注意不能检测当前正处于挂载中的设备

[root@localhost ~]# umount /dev/testVG/testLV [root@localhost ~]# e2fsck -f /dev/testVG/testLV e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/testVG/testLV: 12/983040 files (0.0% non-contiguous), 100865/3932160 blocks1.2.3.4.5.6.7.8.9.

--------------------缩减逻辑卷------------------------------(有风险)

步骤:步骤:

确定要缩减为多大? 前提是:至少能容纳原有的所有数据

卸载当前正在挂载中的LV并检测文件系统

缩减逻辑边界 resize2fs /path/to/device SIZE

缩减物理边界 lvreduce [-L | -l ] SIZE /path/to/lv

检测文件系统

挂载使用

查看当前处于挂载中的设备:

[root@localhost ~]# mount /dev/sda2 on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0") /dev/sda1 on /boot type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) /dev/mapper/testVG-testLV on /backup type ext4 (rw)1.2.3.4.5.6.7.8.9.10.

卸载当前正在挂载中的LV并检测文件系统

[root@localhost ~]# umount /dev/mapper/testVG-testLV [root@localhost ~]# e2fsck -f /dev/mapper/testVG-testLV e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/mapper/testVG-testLV: 12/983040 files (0.0% non-contiguous), 100865/3932160 block1.2.3.4.5.6.7.8.9.

使用resize2fs使用缩减逻辑边界:

[root@localhost ~]# resize2fs /dev/testVG/testLV 5G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/testVG/testLV to 1310720 (4k) blocks. The filesystem on /dev/testVG/testLV is now 1310720 blocks long.1.2.3.4.

使用lvs查看LV,发现LV并没有变化,因为我们只缩减了逻辑边界,并没有缩减物理边界

[root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert testLV testVG -wi-a---- 15.00g1.2.3.

使用lvreduce缩减物理边界:

[root@localhost ~]# lvchange -a n /dev/testVG/testLV [root@localhost ~]# lvreduce -L 5G /dev/testVG/testLV Reducing logical volume testLV to 5.00 GiB Logical volume testLV successfully resized [root@localhost ~]# lvchange -a y /dev/testVG/testLV1.2.3.4.5.

再次使用lvs发现lv减小了:

[root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert testLV testVG -wi-a---- 5.00g1.2.3.

检测文件系统:

[root@localhost ~]# e2fsck -f /dev/testVG/testLV e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/testVG/testLV: 12/327680 files (0.0% non-contiguous), 58463/1310720 blocks1.2.3.4.5.6.7.8.

挂载设备并查看大小:

[root@localhost ~]# mount /dev/testVG/testLV /backup/ [root@localhost ~]# df -lh /backup/ Filesystem Size Used Avail Use% Mounted on /dev/mapper/testVG-testLV 5.0G 148M 4.6G 4% /backu1.2.3.4.5.

The End 微信扫一扫

文章声明:本网站发布的内容(图片、视频和文字)以用户投稿、转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。邮箱:info@xzpmsj.com。

上一篇 下一篇
取消
微信二维码
微信二维码
支付宝二维码