linux系统中的逻辑块大小为,LVM逻辑卷管理器详解

本文详细介绍了Linux系统中的逻辑卷管理器(LVM)如何工作,包括创建物理卷、卷组和逻辑卷,以及逻辑卷的扩展、缩容操作。此外,还讲解了LVM的快照功能,如何创建快照以及使用快照进行数据恢复。整个过程旨在展示LVM如何解决硬盘分区调整的难题,以及保障数据安全的高级特性。
摘要由CSDN通过智能技术生成

为什么要使用逻辑卷?

逻辑卷管理器是Linux系统用于对硬盘分区进行管理的一种机制,为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上讲是可行的。但是却可能造成数据的丢失。LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理设备和底层架构和布局,就可以实现对硬盘分区的动态调整。

LVM的技术架构图:

a0364013277c249db26eaea4b4592f07.png

举例理解:

比如小明家里想吃馒头但是面粉不够了,于是妈妈从隔壁老王家、老李家、老张家分别借来一些面粉,准备蒸馒头吃。首先需要把这些面粉( 物理卷[ PV, Physical Volume ] )揉成一个大面团( 卷组[ VG,Volume Group ] ),然后再把这个大面团分割成一个个小馒头( 逻辑卷[ LV, Logical Volume ] ),而且每个小馒头的重量必须是每勺面粉( 基本单元[ PE, Physical Extent ] )的倍数。

理论:

物理卷处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列,这都可以。卷组建立在物理卷之上,一个卷组可以包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷。逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。这就是LVM的核心理念。

物理卷(PV:Physical Volume):物理卷是底层真正提供容量,存放数据的设备,它可以是整个硬盘、硬盘上的分区等。

卷组(VG:Volume Group):卷组建立在物理卷之上,它由一个或多个物理卷组成。即把物理卷整合起来提供容量分配。一个LVM系统中可以只有一个卷组,也可以包含多个卷组。

逻辑卷(LV:Logical Volume):逻辑卷建立在卷组之上,它是从卷组中“切出”的一块空间。它是最终用户使用的逻辑设备。逻辑卷创建之后,其大小可以伸缩。

基本单元(PE:Physical Extents):具有唯一编号的PE是能被LVM寻址的最小单元。PE的大小可以指定,默认为4MB。PE的大小一旦确定将不能改变,同一个卷组中的所有的物理卷的PE的大小是一直的

部署逻辑卷

常用的LVM部署命令

功能/命令

物理卷管理

卷组管理

逻辑卷管理

扫描

pvscan

vgscan

lvscan

建立

pvcreate

vgcreate

lvcreate

显示

pvdisplay

vgdisplay

lvdisplay

删除

pvremove

vgremove

lvremove

扩展

vgextend

lvextend

缩小

vgreduce

lvreduce

添加两块新硬盘设备

在虚拟机中添加两块新硬盘设备的目的,是为了更好地演示LVM理念中用户无需关心底层物理硬盘设备的特性。我们先对这两块新硬盘进行创建物理卷的操作,可以将该操作简单理解成让硬盘设备支持LVM技术,或者理解成是把硬盘设备加入到LVM技术可用的硬件资源池中,然后对这两块硬盘进行卷组合并,卷组的名称可以由用户来自定义。接下来,根据需求把合并后的卷组切割出一个约为150MB的逻辑卷设备,最后把这个逻辑卷设备格式化成EXT4文件系统后挂载使用。

[root@CentOS7-1 ~]# lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

sr011:0 1 1024M 0rom

vda252:0 0 10G 0disk

├─vda1252:1 0 500M 0 part /boot

└─vda2252:2 0 9.5G 0part

├─cl-root 253:0 0 9G 0 lvm /└─cl-swap 253:1 0 500M 0lvm [SWAP]

vdb252:16 0 10G 0disk

vdc252:32 0 10G 0 disk

第1步:创建物理卷,让新添加的两块硬盘设备支持LVM技术。

[root@centos7-1 ~]# pvcreate /dev/vdb /dev/vdc

Physical volume"/dev/vdb"successfully created.

Physical volume"/dev/vdc"successfully created.

[root@centos7-1 ~]# pvs //简单查看

PV VG Fmt Attr PSize PFree/dev/vda2 cl lvm2 a-- 9.51g 0

/dev/vdb lvm2 --- 10.00g 10.00g/dev/vdc lvm2 --- 10.00g 10.00[root@centos7-1 ~]# pvdisplay /dev/vdb //查看物理卷详细信息

"/dev/vdb" is a new physical volume of "10.00 GiB"

--- NEW Physical volume ---PV Name/dev/vdb

VG Name

PV Size10.00GiB

Allocatable NO

PE Size0Total PE0Free PE0Allocated PE0PV UUID bUTpIc-J6Hq-LUvk-WinD-hoYk-HQkX-sNgA2W

第2步:创建卷组并将物理卷加入到卷组

[root@centos7-1 ~]# vgcreate vg_storage /dev/vdb /dev/vdc //vg_storage 自定义卷组名称

Volume group "vg_storage"successfully created

[root@centos7-1 ~]# vgdisplay--- Volume group ---VG Name vg_storage

System ID

Format lvm2

Metadata Areas2Metadata Sequence No1VG Access read/writeVG Status resizable

MAX LV0Cur LV0Open LV0Max PV0Cur PV2Act PV2VG Size19.99GiB

PE Size4.00MiB

Total PE5118Alloc PE/ Size 0 / 0Free PE/ Size 5118 / 19.99GiB

VG UUID PRDBRS-ybbD-Dwud-GPbM-XxKu-5NHA-a0BMEm

...........省略部分输出信息..........

第3步:创建一个约为150MB的逻辑卷设备

这里需要注意切割单位的问题,在对逻辑卷进行切割时有两种计量单位。第一种是以容量为单位��所使用的参数为-L,列如使用 —L 150M 则生成一个大小为150MB的逻辑卷。另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为4MB,例如,使用-l 37可以生成一个大小为37×4MB=148MB的逻辑卷。

root@centos7-1 ~]# lvcreate -n lv_vo -L 150M vg_storage //-n 指定逻辑卷设备名称

Rounding up size to full physical extent 152.00MiB

Logical volume"lv_vo"created.

[root@centos7-1 ~]# lvdisplay--- Logical volume ---LV Path/dev/vg_storage/lv_vo

LV Name lv_vo

VG Name vg_storage

LV UUID dIo5Ff-pKyD-97Hw-RMs3-dQ10-9tHG-ZGh5o9

LV Write Access read/writeLV Creation host,time centos7-1, 2018-11-12 11:00:28 +0800LV Status available

# open0LV Size152.00MiB

Current LE38Segments1Allocation inherit

Read ahead sectors auto- currently set to 8192Block device253:2...........省略部分输出信息..........

第4步:将生成好的逻辑卷进行格式化,然后挂载使用

Linux系统会把LVM中的逻辑卷设备存放在/dev设备目录中(实际上是做了一个符号链接),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)。

[root@centos7-1 ~]# ls /dev/vg_storage/lv_vo/dev/vg_storage/lv_vo

[root@centos7-1 ~]# mkfs.ext4 /dev/vg_storage/lv_vo

mke2fs1.42.9 (28-Dec-2013)

文件系统标签=OS type: Linux

块大小=1024 (log=0)

分块大小=1024 (log=0)

Stride=0 blocks, Stripe width=0blocks38912 inodes, 155648blocks7782 blocks (5.00%) reserved forthe super user

第一个数据块=1Maximum filesystem blocks=33816576

19 block groups

8192 blocks per group, 8192fragments per group2048inodes per group

Superblock backups stored on blocks:8193, 24577, 40961, 57345, 73729Allocating group tables: 完成

正在写入inode表: 完成

Creating journal (4096blocks): 完成

Writing superblocks and filesystem accounting information: 完成

[root@centos7-1 ~]# mkdir /linuxlvm

[root@centos7-1 ~]# mount /dev/vg_storage/lv_vo /linuxlvm/

第5步:查看挂载状态,并写入到配置文件、使其永久生效

[root@centos7-1 ~]# df -h

文件系统 容量 已用 可用 已用%挂载点/dev/mapper/cl-root 9.1G 3.7G 5.4G 41% /devtmpfs 481M0 481M 0% /dev

tmpfs 497M 84K 497M1% /dev/shm

tmpfs 497M7.1M 490M 2% /run

tmpfs 497M0 497M 0% /sys/fs/cgroup/dev/vda1 497M 166M 332M 34% /boot

tmpfs 100M 16K 100M1% /run/user/42tmpfs 100M0 100M 0% /run/user/0

/dev/mapper/vg_storage-lv_vo 144M 1.6M 132M 2% /linuxlvm

[root@centos7-1 ~]# echo "/dev/vg_storage/lv_vo /linuxlvm ext4 defaults 0 0" >>/etc/fstab

扩容逻辑卷

在前面的实验中,卷组是由两块硬盘设备共同组成的。用户在使用存储设备时感知不到设备底层的架构和布局,更不用关心底层是由多少块硬盘组成的,只要卷组中有足够的资源,就可以一直为逻辑卷扩容。扩展前请一定要记得卸载设备和挂载点的关联。

[root@centos7-1 ~]# umount /linuxlvm

第1步:把上一个实验中的逻辑卷vo扩展至300MB。

[root@centos7-1 ~]# lvextend -L 300M /dev/vg_storage/lv_vo

Size of logical volume vg_storage/lv_vo changed from 152.00 MiB (38 extents) to 300.00 MiB (75extents).

Logical volume vg_storage/lv_vo successfully resized.

第2步:检查硬盘完整性,并重置硬盘容量。

[root@centos7-1 ~]# e2fsck -f /dev/vg_storage/lv_vo

Pass1: Checking inodes, blocks, and sizes

Pass2: Checking directory structure

Pass3: Checking directory connectivity

Pass4: Checking reference counts

Pass5: Checking group summary information/dev/vg_storage/lv_vo: 11/38912 files (0.0% non-contiguous), 10567/155648blocks

[root@centos7-1 ~]# resize2fs /dev/vg_storage/lv_vo

resize2fs1.42.9 (28-Dec-2013)

Resizing the filesystem on/dev/vg_storage/lv_vo to 307200(1k) blocks.

The filesystem on/dev/vg_storage/lv_vo is now 307200 blocks long.

第3步:重新挂载硬盘设备并查看挂载状态。

[root@centos7-1 ~]# mount -a

[root@centos7-1 ~]# df -h

文件系统 容量 已用 可用 已用%挂载点/dev/mapper/cl-root 9.1G 3.7G 5.4G 41% /devtmpfs 481M0 481M 0% /dev

tmpfs 497M 84K 497M1% /dev/shm

tmpfs 497M7.1M 490M 2% /run

tmpfs 497M0 497M 0% /sys/fs/cgroup/dev/vda1 497M 166M 332M 34% /boot

tmpfs 100M 16K 100M1% /run/user/42tmpfs 100M0 100M 0% /run/user/0

/dev/mapper/vg_storage-lv_vo 287M 2.1M 266M 1% /linuxlvm

缩小逻辑卷

相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,其丢失数据的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。另外Linux系统规定,在对LVM逻辑卷进行缩容操作之前,要先检查文件系统的完整性(当然这也是为了保证我们的数据安全)。在执行缩容操作前记得先把文件系统卸载掉。

[root@centos7-1 ~]# umount /linuxlvm/

第1步:检查文件系统的完整性

[root@centos7-1 ~]# e2fsck -f /dev/vg_storage/lv_vo

e2fsck1.42.9 (28-Dec-2013)

Pass1: Checking inodes, blocks, and sizes

Pass2: Checking directory structure

Pass3: Checking directory connectivity

Pass4: Checking reference counts

Pass5: Checking group summary information/dev/vg_storage/lv_vo: 11/77824 files (0.0% non-contiguous), 15987/307200 blocks

第2步:把逻辑卷lv_vo的容量减小到120MB

[root@centos7-1 ~]# resize2fs /dev/vg_storage/lv_vo 120M

resize2fs1.42.9 (28-Dec-2013)

Resizing the filesystem on/dev/vg_storage/lv_vo to 122880(1k) blocks.

The filesystem on/dev/vg_storage/lv_vo is now 122880blocks lon

[root@centos7-1 ~]# lvreduce -L 120M /dev/vg_storage/lv_vo

WARNING: Reducing active logical volume to120.00MiB.

THIS MAY DESTROY YOUR DATA (filesystem etc.)

Do you really want to reduce vg_storage/lv_vo? [y/n]: y

Size of logical volume vg_storage/lv_vo changed from 300.00 MiB (75 extents) to 120.00 MiB (30extents).

Logical volume vg_storage/lv_vo successfully resized.

第3步:重新挂载文件系统并查看系统状态

[root@centos7-1 ~]# mount -a

[root@centos7-1 ~]# df -h

文件系统 容量 已用 可用 已用%挂载点/dev/mapper/cl-root 9.1G 3.7G 5.4G 41% /devtmpfs 481M0 481M 0% /dev

tmpfs 497M 84K 497M1% /dev/shm

tmpfs 497M7.1M 490M 2% /run

tmpfs 497M0 497M 0% /sys/fs/cgroup/dev/vda1 497M 166M 332M 34% /boot

tmpfs 100M 16K 100M1% /run/user/42tmpfs 100M0 100M 0% /run/user/0

/dev/mapper/vg_storage-lv_vo 113M 1.6M 103M 2% /linuxlvm

逻辑卷快照

LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,可以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。

首先查看卷组的信息

[root@centos7-1 ~]# vgdisplay--- Volume group ---VG Name vg_storage

System ID

Format lvm2

Metadata Areas2Metadata Sequence No4VG Access read/writeVG Status resizable

MAX LV0Cur LV1Open LV1Max PV0Cur PV2Act PV2VG Size19.99GiB

PE Size4.00MiB

Total PE5118Alloc PE/ Size 30 / 120.00MiB

Free PE/ Size 5088 / 19.88GiB

VG UUID PRDBRS-ybbD-Dwud-GPbM-XxKu-5NHA-a0BMEm

...........省略部分输出信息..........

通过卷组的输出信息可以清晰看到,卷组中已经使用了120MB的容量,空闲容量还有19.88GB。接下来用重定向往逻辑卷设备所挂载的目录中写入一个文件。

[root@centos7-1 ~]# echo "to day is good day" > /linuxlvm/today.txt

[root@centos7-1 ~]# ll /linuxlvm/总用量13drwx------ 2 root root 12288 11月 12 11:04 lost+found-rw-r--r-- 1 root root 19 11月 12 11:57 today.txt

第1步:使用-s参数生成一个快照卷,使用-L参数指定切割的大小。另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作。

[root@centos7-1 ~]# lvcreate -L 120M -s -n SNAP /dev/vg_storage/lv_vo

Using default stripesize64.00KiB.

Rounding up size to full physical extent52.00MiB

Logical volume"SNAP"created.[root@centos7-1 ~]# lvs

LV    VG        Attr      LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

root  cl        -wi-ao----  9.02g

swap  cl        -wi-ao---- 500.00m

SNAP  vg_storage swi-a-s--- 120.00m      lv_vo  0.01

lv_vo vg_storage owi-aos--- 120.00m

第2步:在逻辑卷所挂载的目录中创建一个100MB的垃圾文件,然后再查看快照卷的状态。可以发现存储空间占的用量上升了。

[root@centos7-1 ~]# dd if=/dev/zero of=/linuxlvm/files count=1 bs=100M

记录了1+0的读入

记录了1+0的写出

104857600字节(105 MB)已复制,0.680154 秒,154 MB/秒

[root@centos7-1 ~]# lvs

LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert

root cl-wi-ao---- 9.02g

swap cl-wi-ao---- 500.00mSNAP vg_storage swi-a-s--- 120.00m lv_vo 83.69lv_vo vg_storage owi-aos--- 120.00m

第3步:为了校验SNAP快照卷的效果,需要对逻辑卷进行快照还原操作。在此之前记得先卸载掉逻辑卷设备与目录的挂载。

[root@centos7-1 ~]# umount /linuxlvm

[root@centos7-1 ~]# lvconvert --merge /dev/vg_storage/SNAP

Merging of volume vg_storage/SNAP started.

lv_vo: Merged:18.84%lv_vo: Merged:100.00%

第4步:快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的100MB的垃圾文件也被清除了。

[root@centos7-1 ~]# mount -a

[root@centos7-1 ~]# ls /linuxlvm/lost+found today.txt

删除逻辑卷

当生产环境中想要重新部署LVM或者不再需要使用LVM时,则需要执行LVM的删除操作。为此,需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。

第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。

[root@centos7-1 ~]# umount /linuxlvm/[root@centos7-1 ~]# vim /etc/fstab

#

#/etc/fstab

# Created by anaconda on Mon Oct29 12:25:27 2018#

# Accessible filesystems, by reference, are maintained under'/dev/disk'# Seeman pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info#/dev/mapper/cl-root / xfs defaults 0 0UUID=07d3a8ca-89fa-4011-837d-47ac9f7660c4 /boot xfs defaults 0 0

/dev/mapper/cl-swap swap swap defaults 0 0

/dev/vg_storage/lv_vo /linuxlvm ext4 defaults 0 0

第2步:删除逻辑卷设备,需要输入y来确认操作。

[root@centos7-1 ~]# lvremove /dev/vg_storage/lv_vo

Do you really want to remove active logical volume vg_storage/lv_vo? [y/n]: y

Logical volume"lv_vo" successfully removed

第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。

[root@centos7-1 ~]# vgremove vg_storage

Volume group"vg_storage" successfully removed

第4步:删除物理卷设备。

[root@centos7-1 ~]# pvremove /dev/vdb /dev/vdc

Labels on physical volume"/dev/vdb"successfully wiped.

Labels on physical volume"/dev/vdc" successfully wiped.

在上述操作执行完毕之后,再执行lvdisplay、vgdisplay、pvdisplay命令来查看LVM的信息时就不会再看到信息了(前提是上述步骤的操作是正确的)。

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值