Linux 下使用 LVM 方式进行文件系统创建,hin详细的教程

979 阅读8分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情

下面介绍的是一些干条条知识点,也可以直接跳到实战训练去看实际操作,并且有详细配图

LVM逻辑卷管理器

LVM是 Logical Volume Manager逻辑卷管理的简写,它是Linux环境下对磁盘分区进行管理的一种机制。

ae47f028ab5baaba829cafce01de3fe6

部署lvm逻辑卷

首先,我们要明白,部署lvm需要逐个配置物理卷,卷组和逻辑卷。

常用的部署命令

功能/命令物理卷管理卷组管理逻辑卷管理
扫描pvscanvgscanlvscan
建立pvcreatevgcreatelvcreate
显示pvdisplayvgdisplaylvdisplay
删除pvremovevgremovelvremove
扩展vgextendlvextend
缩小vgreducelvreduce
  1. 让新添加的两块硬盘设备支持lvm技术。

    pvcreate  /dev/sdb /dev/sdc
    
  2. 把两块硬盘设备加入到storage卷组中,然后查看卷组的状态

    vgcreate storage /dev/sdb /dev/sdc
    
    vgdisplay
    
  3. 切割出一个约为150mb的逻辑卷设备

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

    lvcreate -n vo -l 37 storage
    
    lvdisplay
    
  4. 把生成好的逻辑卷进行格式化,然后挂载使用。

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

mkfs.ext4 /dev/storage/vo
mkdir /linuxprobe
mount /dev/storage/vo  /linuxprobe
  1. 查看挂载状态,并写入配置文件,使其永久生效
df -h
echo "/dev/storage/vo  /linuxprobe ext4 defaults 0 0" >> /etc/fstab

扩容逻辑卷

扩展前一定要记得卸载设备与挂载点的关联。

umount /linuxprobe

把上个实验中的逻辑卷vo扩展至290mb

lvextended -L 290M /dev/storage/vo

检查硬盘完整性,并重置硬盘容量。

e2fsck -f /dev/storage/vo

resize2fs /dev/storage/vo

resize2fs命令是用来增大或者收缩未加载的“ext2/ext3/ext4”文件系统的大小。

重新挂载硬盘,并查看挂载状态。

mount -a   #这个命令是挂载fatab文件上的内容

df -h

缩小逻辑卷

缩小逻辑卷的丢失数据的风险较大,我们一定要提前备份好数据。

在执行缩容操作之前记得先把文件系统卸载掉:

umount /linuxprobe

检查文件系统的完整性

e2fsck -f /dev/storage/vo

把逻辑卷vo的容量减少到120MB

resize2fs /dev/storage/vo 120M

lvreduce -L 120M  /dev/storage/vo

重新挂载文件系统并查看状态

mount -a

df -h

逻辑卷快照

LVM快照卷的特点:

  • 快照卷的容量必须等同于逻辑卷的容量;
  • 快照卷仅一次有效,一旦执行还原操作后则会被立即删除。

首先查看卷组信息

vgdisplay

看到卷组有空闲容量,接下来我们使用重定向往逻辑卷设备所挂载的目录中写入一个文件。

echo "Welcome to Linuxprobe.com" > /linuxprobe/readme.txt

ls -l /linuxprobe

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

lvcreate -L 120M -s -n SNAP /dev/storage/vo

lvdisplay

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

dd if=/dev/zero of=/linuxprobe/files count=1 bs=100M

lvdisplay

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

umount /linuxprobe
lvconvert --merge /dev/storge/SNAP

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

mount  -a

ls /linuxprobe/

删除逻辑卷

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

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

umount /linuxprobe

vim /etc/fstab

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

lvremove /dev/storage/vo

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

vgremove storage

第四步:删除物理设备

pvremove  /dev/sdb  /dev/sdc

实战训练

我首先还对磁盘进行了新建分区的操作,如果只是想看lvm文件系统挂载的小伙伴,可以跳过这几步,直接去下面那个重头戏那里开始观看

  1. 首先你用去看看电脑硬盘的使用情况
fdisk  -l  #查看当前磁盘的分区情况
  1. 对磁盘进行分区:
fdisk /dev/sdb
  1. 进去之后会有一些比较重要的命令

image-20220919143604959

参数功能
-b指定每个分区的大小
-l列出指定的外围设备的分区表状况
-s将指定的分区大小输出到标准输出上,单位为区块
-u搭配”-l”参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址
-v显示版本信息
-m查看全部可用参数
-n添加新的分区
-d删除某个分区信息
-t改变某个分区的类型
-p查看分区表信息
-w保存并退出
-q不保存直接退出

image-20220919145249147

然后,我们在添加分区的时候,有个主分区,,扩展分区,逻辑分区,我们浅浅了解一手:

主分区数量至少1个,最多4个(如果存在扩展分区,则最多3个)。主分区可以直接使用,主分区本身不能继续分区,一个主分区就是一个逻辑磁盘。

扩展分区0个或1个,会占用一个主分区号,不能直接使用,必须在其上建立逻辑分区后才能用。 其实就是把1个主分区拿过来进行分区扩展了。

逻辑分区可以若干个,通过扩展分区建立,可以直接使用,扩展分区的容量是所有逻辑分区容量之和(如果扩展分区被完全使用的话)。

合理的磁盘分区会方便我们的文件挂载使用的。

在我们使用w退出之后,记得使用这个命令:

partprobe    重新加载磁盘分区信息,并更改到系统内核

🏳️‍🌈重头戏来了:

我们下面就把整个sdb100G扩展到centos卷组中去,并创建如下的需求:

10G /oracle 10G /grid 10G /orasystem 10G /arch 剩余空间全部分给 /oradata

image-20220919150058759

  1. 让新添加的硬盘设备支持LVM技术。
pvcreate  /dev/sdb

image-20220919150817924

2.接下来呢。我们要把这个硬盘设备加入到centos这个卷组,如果在此之前没有centos这个卷组,那么就用vgcreate 命令,如果有就是下面的命令:

vgextend centos /dev/sdb

image-20220919151825153

  1. 创建逻辑卷,这一步就是要面向需求了:我们要根据上面的需求依次创建对应的逻辑卷。

image-20220919153450064

  1. 接下来我们就需要将这些生成好的逻辑卷格式化,然后进行挂载

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

image-20220919153721866

上面展示的是格式化为xfs类型的操作。

下面我们就是要去创建一个目录,一会好去挂载:

image-20220919160024431

最后的最后,我们要把这些挂载内容写入/etc/fstab中去:

在配置文件中,我们可以使用uuid去配置。

blkid

image-20220919160713688

vi /etc/fatab
UUID=0e157636-1b3f-413b-a68d-5db7d0b03de0  /oracle                xfs     defaults        0 0
UUID=da09987c-281d-402d-972c-ac56d5844d29  /grid                  xfs     defaults        0 0
UUID=51720d40-66ba-44b9-a667-378a06fd87d7  /orasystem             xfs     defaults        0 0
UUID=df06626c-5495-4828-b6b2-63f4cdec257c  /arch                  xfs     defaults        0 0
UUID=328c9d42-a8a3-43c3-8d99-bda2d28f856e  /oradata               xfs     defaults        0 0

有其他疑问的小伙伴可以给我留言呀