2020-01-11

前言

LVM 逻辑卷管理,是对磁盘分区进行管理的一种机制,建立在硬盘和分区之上,文件系统之下的一个逻辑层,可以提高磁盘分区管理的灵活性,基于lvm可以实现分区的扩容

许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份、删除相关数据,甚至被迫重新规划分区并重装操作系统,以满足应用系统的需要。

LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。centos7默认安装的分区格式就是LVM逻辑卷的格式。

下面就lvm的原理和使用做详细的记录介绍

正文

平时,如果是机房中的线下服务器,都推荐使用lvm进行磁盘管理,可以更加灵活,当然一般大的公司可能会有更好的存储设备,进行统一储存,但这也不影响,推荐是能用lvm就用lvm。另外如果是像阿里云这种云平台,ECS服务器的磁盘默认都是直接挂载的,并没有使用lvm,因为这些磁盘都是可以在阿里云上直接在线扩容或者新增磁盘,以此解决磁盘的灵活问题。

在使用操作lvm之前,我们首先要理解lvm的原理。

1. lvm原理

lvm是一个基于磁盘和分区之上,文件系统之下的中间逻辑层,lvm的层级结构如下图:

如图,首先是最下层的物理分区: 物理分区就是通过 fdisk -l 命令查看到的就是物理磁盘和物理分区,是实际的物理设备,lvm则是基于此之上,在物理磁盘上可以划分分区,为物理分区,物理分区必须设置为lvm分区格式,才可以将这些物理分区,提取出来创建成物理卷。

物理卷: 也就是图中第二层,是通过物理分区创建而来,与物理分区一一对应。创建为物理卷后,则可以将物理卷合并为一个大的卷组。通过命令pvdisplay 查看物理卷

卷组: 也就是图中第三层,卷组是不同的物理卷合并而成,可以将所有物理卷的大小整合成一个大的卷组,相当于一个大的整合的逻辑磁盘,然后在卷组中就可以根据需求划分逻辑卷。通过命令vgdisplay 查看卷组。

逻辑卷: 也就是图中最顶层,逻辑卷是从卷组中划分出来的,相当于逻辑分区,此逻辑卷就可以直接格式化挂载到目录,就可以直接使用了。通过命令lvdisplay 查看逻辑卷。

你可能会问,为什么要这么做,有几点:

因为一般的物理磁盘你进行的物理分区,一旦确定,就不能修改大小,不灵活。

因为一般的物理磁盘大小有限,而物理分区只能是小于等于物理磁盘的大小,而通过lvm则可以将多个磁盘组合成一个大的卷组,相当于一个大的磁盘,就可以增大单个文件系统的容量大小。

管理方便,底层的磁盘管理由lvm帮你做了,你只需要将物理分区创建出物理卷加入到卷组,所有的管理都直接对卷组操作即可,简单方便。

通过lvm管理磁盘,非常的方便,当然也有不好的地方,那就是物理磁盘通过lvm联系在了一起,如果需要退出物理磁盘则不能直接暴力的拔出磁盘,而需要在lvm中退出后,才能拔出磁盘,不然会导致lvm故障,这方便可能会比直接挂载更加复杂一点,但为了灵活方便,这点代价还是能接受的。

2. 通过lvm新增创建分区

上面说了lvm的结构原理,下面就记录介绍如何使用lvm创建物理卷,卷组,逻辑卷等来使用。下面假设你新增了一块磁盘,详细说明如果将此磁盘进行纳入到lvm管理下。

创建物理分区

首先,需要将磁盘进行物理分区:

# 查看物理磁盘和分区情况

$ fdisk -l

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0xdb5c4c82

  Device Boot      Start        End      Blocks  Id  System

# 可以看到有一块/dev/sdb的磁盘,大小21.5G,还没有服务分区

# 操作此磁盘,创建物理分区

$ fdisk /dev/sdb

Command (m for help): n    # n创建物理分区

Partition type:

  p  primary (0 primary, 0 extended, 4 free)

  e  extended

Select (default p): p    # p指定创建主分区, e为扩展分区

Partition number (1-4, default 1):

First sector (2048-41943039, default 2048):

Using default value 2048    # 默认起始位

Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039):

Using default value 41943039    # 默认结束位为最后一位

Partition 1 of type Linux and of size 20 GiB is set

Command (m for help): w    # 保存操作结果

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

PS: 这里说明一下,sector为磁盘扇区,通过指定扇区区间来确定分区区域和大小。

创建物理卷

# 指定物理分区,创建为物理卷

$ pvcreate /dev/sdb1

# 查看物理卷

$ pvdisplay

# 简单查看

$  pvs

创建卷组

# 若没有卷组,则指定物理卷,创建卷组,卷组名为:centos

# 格式为:vgcreate 卷组名称 物理卷名称

$ vgcreate centos /dev/sdb1

# 若已有卷组,可将物理卷,加入到卷组,卷组名为:centos

$ 格式为: vgextend 卷组名称 物理卷名称

$ vgextend centos /dev/sdb1

# 查看卷组

$ vgdisplay

# 简单查看卷组

$ vgs

创建逻辑卷

# 指定卷组,创建逻辑卷,名称为:test-lv

$ 命令格式为: lvcreate -L 逻辑卷大小 -n 逻辑卷名称 卷组名称

$ lvcreate -L 5G -n test-lv centos

# 查看逻辑卷,注意:逻辑卷的LV Path会被用于格式化和挂载

$ lvdisplay

--- Logical volume ---

  LV Path                /dev/centos/test-lv

  LV Name                test-lv

  VG Name                centos

  LV UUID                sbGZQI-xVKe-QFJF-MV3Y-WpoW-Hucl-pqwQEg

  LV Write Access        read/write

  LV Creation host, time localhost.localdomain, 2019-08-07 23:05:44 -0700

  LV Status              available

  # open                0

  LV Size                5.00 GiB

  Current LE            1280

  Segments              1

  Allocation            inherit

  Read ahead sectors    auto

  - currently set to    8192

  Block device          253:0

# 简单查看逻辑卷

$ lvs

格式化并挂载

# 格式化逻辑卷,格式化为centos7默认的xfs格式,通过逻辑卷的LV Path指定逻辑卷

# centos7 的文件系统格式默认为xfs,centos6为ext4。

$ mkfs.xfs /dev/centos/test-lv

# 挂载到本地目录前,需要本地目录先存在,所以我们先创建目录,如/data

$ mkdir /data

# 挂载,使用逻辑卷的LV Path

$ mount /dev/centos/test-lv /data

# 挂载完成后,通过df -h 就能看到相应的文件系统

# 然后将挂载信息写入到/etc/fstab中,使其开机挂载

$ echo "/dev/centos/test-lv  /data  xfs  defaults  0  0" >> /etc/fstab

ok,到此就完成了将通过磁盘创建物理卷,创建卷组,加入卷组,创建逻辑卷并格式化挂载使用。

3. 调整逻辑分区大小

上面我们讲了如何通过lvm创建逻辑分区并使用,学会了使用lvm的开始,然后当我们使用了一段时间后,逻辑分区已经差不多占满时,就需要进行逻辑分区的扩容,或者一些不用的逻辑分区进行缩容。

特别注意的是:

resize2fs命令            针对的是ext2、ext3、ext4文件系统

xfs_growfs命令         针对的是xfs文件系统

# 首先通过df -hT 查看文件系统类型

$ df -hT

Filesystem                  Type      Size  Used Avail Use% Mounted on

/dev/sda3                  xfs        18G  4.7G  14G  27% /

devtmpfs                    devtmpfs  475M    0  475M  0% /dev

tmpfs                      tmpfs    489M  144K  489M  1% /dev/shm

tmpfs                      tmpfs    489M  14M  476M  3% /run

tmpfs                      tmpfs    489M    0  489M  0% /sys/fs/cgroup

/dev/sda1                  xfs      297M  144M  154M  49% /boot

tmpfs                      tmpfs      98M  20K  98M  1% /run/user/0

/dev/mapper/centos-test--lv xfs      5.0G  33M  5.0G  1% /data

# 先看看卷组,还有多少剩余空间,调整大小时,原本逻辑分区是从哪个卷组中划分的,那么调整大小默认也会使用此卷组中的空间。

$ vgdisplay

# 或者

$ vgs

PS:通过df -hT查出的文件系统路径跟逻辑分区路径不同,扩容时使用此文件系统路径,或者逻辑分区路径,都可以,一样的。

不同文件系统类型所对应的创建、检查、调整命令不同,下面就针对xfs和ext2/3/4文件系统的lvm分区空间的扩容和缩容的操作做详细记录:

1)ext2/ext3/ext4文件系统的调整命令是resize2fs(增大和减小都支持)

# 调整逻辑分区大小

# 增大至20G

$ lvextend -L 20G /dev/mapper/centos-test--lv

# 增加5G

$ lvextend -L +5G /dev/mapper/centos-test--lv

# 减小至10G

$ lvreduce -L 10G /dev/mapper/centos-test--lv

# 减小3G

$ lvreduce -L -3G /dev/mapper/centos-test--lv

# 执行调整

$ resize2fs /dev/mapper/centos-test--lv

2)xfs文件系统的调整命令是xfs_growfs(只支持增大)

# 调整逻辑分区大小

# 增大至20G

$ lvextend -L 20G /dev/mapper/centos-test--lv

# 增加5G

$ lvextend -L +5G /dev/mapper/centos-test--lv

# 执行调整

$ xfs_growfs /dev/mapper/centos-test--lv

这里我上面格式化的文件系统类型为xfs,所以我增大逻辑分区5G,执行上面命令,完整调整后,再次通过df -hT命令查看就会发现已经扩容到了10G。

此种方法进行的扩缩容,是不会影响到原有数据的,非常的方便好用。

PS:不管什么文件系统类型,在进行缩容前,都需要先卸载挂载,然后再缩容,再重新挂载

特别注意:xfs格式不是不支持缩容,而是xfs格式缩容后需要重新格式化才能继续挂载使用,且缩容前需要先卸载挂载,然后在缩容,然后格式化,然后再挂载。这会导致原本的数据丢失,如果是在要缩容,可以提前将数据转移备份好,缩容后再将数据迁移回来。

具体的操作,这里就不演示了,大致用到的命令如下:

# 卸载挂载

$ umount /dev/mapper/centos-test--lv

# 缩容

$ lvreduce -L -5G /dev/mapper/centos-test--lv

# 重新格式化,添加-f参数,强制重写。

$ mkfs.xfs /dev/mapper/centos-test--lv -f

# 重新挂载

# mount /dev/mapper/centos-test--lv /data

4. 安全退出磁盘

在日常使用中,磁盘老旧,故障,需要更换等问题也经常有,那么使用lvm做磁盘管理后,如何将磁盘安全退出,取出正在使用中的磁盘呢。

首先,磁盘中的数据,如何需要转移到新的磁盘中,那么首先,先插入新的磁盘,然后创建物理卷,将物理卷加入到相同的卷组,然后移动逻辑分区和数据到新的磁盘,然后将就旧的磁盘的物理卷移除出卷组,删除物理卷,就可以移除此磁盘了。

# 查看系统磁盘挂载情况

$ lsblk

NAME                MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda                  8:0    0  20G  0 disk

├─sda1                8:1    0  300M  0 part /boot

├─sda2                8:2    0    2G  0 part [SWAP]

└─sda3                8:3    0 17.7G  0 part /

sdb                  8:16  0  20G  0 disk

└─sdb1                8:17  0  20G  0 part

  └─centos-test--lv 253:0    0    7G  0 lvm 

sdc                  8:32  0  20G  0 disk

sr0                  11:0    1 1024M  0 rom

# 如上可以看到在sdb磁盘中有一个sdb1的分区,下面有一个lvm的逻辑分区。

# 若要安全的退出磁盘,就需要将此磁盘中的所有数据迁移到新的磁盘中,当然如果你不要数据了,那可以不迁移,直接删除逻辑分区,从卷组中删除物理卷即可。

# sdc磁盘为刚添加的新磁盘,我们要做的就是将sdb的数据导入到sdc中,然后退出sdb磁盘

# 首先,创建sdc磁盘的物理分区和物理卷

# 操作过程不赘述了,查看最开头第一步新增创建分区的内容。

# 创建完成后,查看物理卷

$ pvs

  PV        VG    Fmt  Attr PSize  PFree

  /dev/sdb1  centos lvm2 a--  20.00g 13.00g

  /dev/sdc1        lvm2 ---  20.00g 20.00g

# 可以看到新的物理卷还没有加入卷组,空间为全剩余

# 将新磁盘的物理卷加入到相同的卷组

$ vgextend centos /dev/sdc1

# 再查看物理卷,如下

$ pvs

  PV        VG    Fmt  Attr PSize  PFree

  /dev/sdb1  centos lvm2 a--  20.00g 13.00g

  /dev/sdc1  centos lvm2 a--  20.00g 20.00g

# 下面将/dev/sdb1中的数据移动到卷组中的/dev/sdc1上

$ pvmove /dev/sdb1 /dev/sdc1

# 等待一段时间即可,如果数据量过大,可以用下面命令,放到后台执行。

$ pvmove /dev/sdb1 /dev/sdc1 2>error.log >normal.log &

# 完成后,查看物理卷信息,会发现sdb1上的数据都迁移到了sdc1上。

$ pvs

  PV        VG    Fmt  Attr PSize  PFree

  /dev/sdb1  centos lvm2 a--  20.00g 20.00g

  /dev/sdc1  centos lvm2 a--  20.00g 13.00g

# 然后将/dev/sdb1的物理卷从卷组中删除

$ vgreduce centos /dev/sdb1

# 删除后,再看pvs,会发现此物理卷已经没有所属卷组了

$ pvs

  PV        VG    Fmt  Attr PSize  PFree

  /dev/sdb1        lvm2 ---  20.00g 20.00g

  /dev/sdc1  centos lvm2 a--  20.00g 13.00g

# 然后删除物理卷

$ pvremove /dev/sdb1

ok,重复上面的步骤,将磁盘中所有涉及到lvm的物理分区都迁移数据并移除,然后磁盘的物理分区已经不再跟lvm有任何关联了,就可以直接安全的退出磁盘了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容