LVM逻辑卷

对于普通的分区,扩展度不高,一旦分区格式化完成,很难灵活的再增加或者减少分区大小。为了解决这个问题,可以使用LVM(逻辑卷)。基本过程是把物理磁盘或者分区初始化称为物理卷(PV),然后把PV加入VG(卷组),最后在VG上划分逻辑的分区(LVM),LVM可以当做普通的分区进行格式化和挂载。

LVM: 可以动态调整分区大小。
PV:(physical volume)物理卷
VG:(volume Group)卷组
LV:(logical volume)逻辑卷

实验:

环境准备:

1、使用4个分区,每个分区容量均为1GB,且system ID 为8e.
2、全部的分区整合成为一个 VG,VG 名称设置为 vgbdqn;且 PE 的大小为 16MB;
3、创建一个名为 lvyjs 的 LV,容量大约 2G;
4、最终这个 LV 格式化为 xfs 的文件系统,且挂载在 /bdqn/yjs 中。

开始实验:

[root@localhost ~]# fdisk /dev/sdb
Device Boot Start End Blocks Id
System
/dev/sdb1 2048 4196351 2097152 83
Linux
/dev/sdb2 4196352 41943039 18873344 5
Extended
/dev/sdb5 4198400 6295551 1048576 8e
Linux LVM
/dev/sdb6 6297600 8394751 1048576 8e
Linux LVM
/dev/sdb7 8396800 10493951 1048576 8e
Linux LVM
/dev/sdb8 10496000 12593151 1048576 8e
Linux LVM
/dev/sdb9 12595200 14692351 1048576 8e
Linux LVM
[root@localhost ~]# partprobe
[root@localhost ~]# partprobe /dev/sdb

1、创建PV

pvcreate :将实体 partition 创建成为 PV ;
pvscan :搜寻目前系统里面任何具有 PV 的磁盘;
pvdisplay :显示出目前系统上面的 PV 状态;
pvremove :将 PV 属性移除,让该 partition 不具有 PV 属性

[root@localhost ~]# pvcreate /dev/sdb{5…8}
Physical volume “/dev/sdb5” successfully created.
Physical volume “/dev/sdb6” successfully created.
Physical volume “/dev/sdb7” successfully created.
Physical volume “/dev/sdb8” successfully created.

//直接就是pvcreate就可以将分区转化成PV,注意这条指令的大括号和用途。

[root@localhost ~]# pvscan
PV /dev/sda2 VG cl lvm2 [19.00 GiB / 0
free]
PV /dev/sdb7 lvm2 [1.00 GiB]
PV /dev/sdb5 lvm2 [1.00 GiB]
PV /dev/sdb8 lvm2 [1.00 GiB]
PV /dev/sdb6 lvm2 [1.00 GiB]
Total: 5 [23.00 GiB] / in use: 1 [19.00 GiB] / in no VG:
4 [4.00 GiB]

这就分别显示每个 PV 的信息与系统所有 PV 的信息。尤其最后一行,显示的是:

整体PV的量/已经被使用到VG的PV量/剩余的PV量

[root@localhost ~]# pvdisplay /dev/sdb5
“/dev/sdb5” is a new physical volume of “1.00 GiB”
— NEW Physical volume —
PV Name /dev/sdb5 ##实际的 partition
设备名称
VG Name ##所在VG组,这还没有
分配
PV Size 1.00 GiB ###容量大小
Allocatable NO ##是否被分配
PE Size 0 ##PE大小
Total PE 0 ##PE数量
Free PE 0 ##没被LV用到的PE
Allocated PE 0 ##尚可分配出去的PE
PV UUID 7tG5Mp-eK7X-GANz-Q9cF-Pjsd-rARz-
YuPy50

2、创建VG

vgcreate :创建 VG 的
vgscan :搜寻系统上面是否有 VG 存在?
vgdisplay :显示目前系统上面的 VG 状态;
vgextend :在 VG 内增加额外的 PV ;
vgreduce :在 VG 内移除 PV;
vgchange :设置 VG 是否启动 (active);
vgremove :删除一个 VG

//VG创建格式

vgcreate [-s N[mgt]] VG名称 PV名称
选项与参数:
-s :后面接 PE 的大小 (size) ,单位可以是 m, g, t (大小写均可);
与 PV 不同的是, VG 的名称是自订的!我们知道 PV 的名称其实就是partition 的设备文件名, 但是这个 VG 名称则可以随便你自己取

//将刚创建的4个PV中3个PV创建成一个VG,并且指定PE为16MB

[root@localhost ~]# vgcreate -s 16M vgbdqn /dev/sdb{5…7}
Volume group “vgbdqn” successfully created
[root@localhost ~]# vgscan
Reading volume groups from cache.
Found volume group “vgbdqn” using metadata type lvm2
Found volume group “cl” using metadata type lvm2
[root@localhost ~]# pvscan
PV /dev/sdb5 VG vgbdqn lvm2 [1008.00 MiB /
1008.00 MiB free]
PV /dev/sdb6 VG vgbdqn lvm2 [1008.00 MiB /
1008.00 MiB free]
PV /dev/sdb7 VG vgbdqn lvm2 [1008.00 MiB /
1008.00 MiB free]
PV /dev/sda2 VG cl lvm2 [19.00 GiB / 0
free]
PV /dev/sdb8 lvm2 [1.00 GiB]

//这里可以看到刚刚创建的PV /dev/sdb8还没有被使用。

[root@localhost ~]# vgdisplay vgbdqn
— Volume group —
VG Name vgbdqn
System ID
Format lvm2
Metadata Areas 3
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 3
Act PV 3
VG Size 2.95 GiB ###整个VG容量
PE Size 16.00 MiB ###内部每个PE大

Total PE 189 ###总共PE数量
Alloc PE / Size 0 / 0
Free PE / Size 189 / 2.95 GiB ###可配置给LV的PE数
量/总容量
VG UUID tWk6OC-Y1Xs-LmkX-SepL-9SdV-pLLugqwiys

//刚才我们说过,我们要做4个PV创建,所以这里我们再把刚才没有用到的/dev/sdb8添加进去。

[root@localhost ~]# vgextend vgbdqn /dev/sdb8
Volume group “vgbdqn” successfully extended

3、创建LV

lvcreate :创建 LV
lvscan :查询系统上面的 LV
lvdisplay :显示系统上面的 LV 状态
lvextend :在 LV 里面增加容量
lvreduce :在 LV 里面减少容量
lvremove :删除一个 LV
lvresize :对 LV 进行容量大小的调整

//创建LV格式

lvcreate [-L N[mgt]] [-n LV名称] VG名称
lvcreate [-l N] [-n LV名称] VG名称
选项与参数:
-L :后面接容量,容量的单位可以是 M,G,T 等,要注意的是,最
小单位为 PE,
因此这个数量必须要是 PE 的倍数,若不相符,系统会自行计算最
相近的容量。
-l :后面可以接 PE 的“个数”,而不是数量。若要这么做,得要自
行计算 PE 数。
-n :后面接的就是 LV 的名称

[root@localhost ~]# lvcreate -L 2G -n lvbdqn vgbdqn
Logical volume “lvbdqn” created.

//由于本实验中每个PE为16M ,如果要用PE的数量来处理的话,那使用下面的指令也可以!

[root@localhost ~]# lvscan
ACTIVE ‘/dev/vgbdqn/lvbdqn’ [2.00 GiB]
inherit
ACTIVE ‘/dev/cl/swap’ [2.00 GiB] inherit
ACTIVE ‘/dev/cl/root’ [17.00 GiB] inherit
[root@localhost ~]# lvdisplay

4、格式化

//格式化LV,这里注意一点,LV的平成必须使用全名。如/dev/vg/lv

[root@localhost ~]# mkfs.xfs /dev/vgbdqn/lvbdqn
meta-data=/dev/vgbdqn/lvbdqn isize=512 agcount=4,
agsize=131072 blks
= sectsz=512 attr=2,
projid32bit=1
= crc=1 finobt=0,
sparse=0
data = bsize=4096
blocks=524288, imaxpct=25
= sunit=0 swidth=0
blks
naming =version 2 bsize=4096 ascii-ci=0
ftype=1
log =internal log bsize=4096 blocks=2560,
version=2
= sectsz=512 sunit=0
blks, lazy-count=1
realtime =none extsz=4096 blocks=0,
rtextents=0

5、挂载

[root@localhost ~]# mkdir /bdqn/yjs -p
[root@localhost ~]# mount /dev/vgbdqn/lvbdqn /bdqn/yjs
[root@localhost ~]# df -Th /bdqn/yjs
Filesystem Type Size Used Avail Use%
Mounted on
/dev/mapper/vgbdqn-lvbdqn xfs 2.0G 33M 2.0G 2%
/bdqn/yjs
[root@localhost ~]# vim /etc/fstab
/dev/vgbdqn/lvbdqn /bdqn/yjs xfs defaults 0
0
[root@localhost ~]# mount -a

LVM扩展

XFS格式的扩容

LVM最大的特点就是弹性调整磁盘容量大小,那么我们就来先分析一下,如果我们要扩展LV的容量的话,需要怎么做。

首先,如果VG空间还足够的话,直接LVextend就可以了,我们暂且不说,我们要考虑的是,如果VG空间不够的话,我们应该怎么做。我们都知道,VG那是用物理卷来组成的,也就是说,想要扩展你的VG容量,前提就是有足够的物理卷,物理卷我们这里是虚拟机,直接添加,那么到公司以后就是购买了,当物理磁盘添加成功之后,就是转化成PV,然后那,用VGextend把创建好的PV加进来。

那么VG空间足够,想要扩展LV,直接就是LVextend,然后lvresize直接添加还有一种那是关于文件系统的增大与缩小,比如说ext2,3,4这个家族,还有xfs,那么这里不是重点,而且一般也不会去改,大家就是知道一下就行了。
那么接上面的实验,我们想要把刚才的LV/dev/vgbdqn/lvbdqn 挂载目录是 /bdqn/yjs空间增加500M,应该怎么做呢?

//首先我们要考虑VG空间是否够用。

[root@localhost ~]# vgdisplay vgbdqn
— Volume group —
VG Name vgbdqn

Alloc PE / Size 128 / 2.00 GiB
Free PE / Size 124 / 1.94 GiB
VG UUID tWk6OC-Y1Xs-LmkX-SepL-9SdV-pLLugqwiys

//确定了VG空间够用,那么我们直接来扩展。

[root@localhost ~]# lvresize -L +500M /dev/vgbdqn/lvbdqn
Rounding size to boundary between physical extents:
512.00 MiB.
Size of logical volume vgbdqn/lvbdqn changed from 2.00
GiB (128 extents) to 2.50 GiB (160 extents).
Logical volume vgbdqn/lvbdqn successfully resized.

//注意的是大写的L后面直接跟容量大小,也可以用小l后面跟PE的倍数。

[root@localhost ~]# lvscan
ACTIVE ‘/dev/vgbdqn/lvbdqn’ [2.50 GiB]
inherit
[root@localhost ~]# df -hT /bdqn/yjs
Filesystem Type Size Used Avail Use%
Mounted on
/dev/mapper/vgbdqn-lvbdqn xfs 2.0G 33M 2.0G 2%
/bdqn/yjs

//LV是扩大了,但我们再看,挂载目录下文件系统的容量并没有增加,那么我们需要一条命令,让系统重新加载一下文件系统的大小。

[root@localhost ~]# xfs_info /bdqn/yjs
meta-data=/dev/mapper/vgbdqn-lvbdqn isize=512
agcount=4, agsize=131072 blks
= sectsz=512 attr=2,
projid32bit=1
= crc=1 finobt=0
spinodes=0
data = bsize=4096
blocks=524288, imaxpct=25
= sunit=0 swidth=0
blks
naming =version 2 bsize=4096 ascii-ci=0
ftype=1
log =internal bsize=4096 blocks=2560,
version=2
= sectsz=512 sunit=0
blks, lazy-count=1
realtime =none extsz=4096 blocks=0,
rtextents=0
[root@localhost ~]# xfs_growfs /bdqn/yjsmeta-data=/dev/mapper/vgbdqn-lvbdqn isize=512
agcount=4, agsize=131072 blks
= sectsz=512 attr=2,
projid32bit=1
= crc=1 finobt=0
spinodes=0
data = bsize=4096
blocks=524288, imaxpct=25
= sunit=0 swidth=0
blks
naming =version 2 bsize=4096 ascii-ci=0
ftype=1
log =internal bsize=4096 blocks=2560,
version=2
= sectsz=512 sunit=0
blks, lazy-count=1
realtime =none extsz=4096 blocks=0,
rtextents=0
data blocks changed from 524288 to 655360
[root@localhost ~]# xfs_info /bdqn/yjs
meta-data=/dev/mapper/vgbdqn-lvbdqn isize=512
agcount=5, agsize=131072 blks
= sectsz=512 attr=2,
projid32bit=1
= crc=1 finobt=0
spinodes=0
data = bsize=4096
blocks=655360, imaxpct=25
= sunit=0 swidth=0
blks
naming =version 2 bsize=4096 ascii-ci=0
ftype=1
log =internal bsize=4096 blocks=2560,
version=2
= sectsz=512 sunit=0
blks, lazy-count=1
realtime =none extsz=4096 blocks=0,
rtextents=0
[root@localhost ~]# df -hT /bdqn/yjs
Filesystem Type Size Used Avail Use%
Mounted on
/dev/mapper/vgbdqn-lvbdqn xfs 2.5G 33M 2.5G 2%
/bdqn/yjs

在上表中,注意看两次 xfs_info 的结果,你会发现到 1)整个 block group(agcount) 的数量增加一个!那个 blockgroup 就是纪录新的设备容量之文件系统所在! 而你也会 2)发现整体的 block 数量增加了!这样整个文件系统就给他放大了!同时,使用 df 去查阅时,就真的看到增加的量了!
最后,请注意!目前的 XFS 文件系统中,并没有缩小文件系统容量的设计!也就是说,文件系统只能放大不能缩小喔!如果你想要保有放大、缩小的本事, 那还请回去使用 EXT 家族最新的 EXT4 文件系统啰!XFS 目前是办不到的!

先做一个练习,文件系统格式先用xfs的,然后练习一下扩容,做一个PV,一个VG,然后做成LV

[root@localhost ~]# partprobe /dev/sdb
[root@localhost ~]# pvcreate /dev/sdb9
[root@localhost ~]# vgcreate testvg /dev/sdb9
[root@localhost ~]# lvcreate -L 500M -n testlv testvg
[root@localhost ~]# mkfs.xfs /dev/testvg/testlv
[root@localhost ~]# mkdir /TestLvm
[root@localhost ~]# mount /dev/testvg/testlv /TestLvm
[root@localhost ~]# lvextend -L +200M /dev/testlv/testvg
[root@localhost ~]# lvscan
[root@localhost ~]# df -hT /TestLvm
[root@localhost ~]# xfs_growfs /TestLvm
[root@localhost ~]# df -hT /TestLvm

ext4格式的扩容

[root@base ~]# mkfs.ext4 /dev/testvg/testlv
[root@base ~]# mount /dev/testvg/testlv /mnt/lvtest/
[root@base ~]# df -h /mnt/lvtest/ -T
Filesystem Type Size Used Avail Use%
Mounted on
/dev/mapper/testvg-testlv ext4 8.3G 37M 7.8G 1%
/mnt/lvtest
[root@base ~]# lvresize -L +500M /dev/testvg/testlv
Rounding size to boundary between physical extents:
512.00 MiB.
Size of logical volume testvg/testlv changed from 8.50
GiB (544 extents) to 9.00 GiB (576 extents).
Logical volume testvg/testlv successfully resized.
[root@base ~]# df -h /mnt/lvtest/ -T
Filesystem Type Size Used Avail Use%
Mounted on
/dev/mapper/testvg-testlv ext4 8.3G 37M 7.8G 1%
/mnt/lvtest

PS: 从上边步骤中发现,ext4格式和xfs格式一样,如果LV扩容之后,挂载的目录仍没办法直接识别到新的空间大小,在ext4格式扩容之后,磁盘中源存储的文件不受影响。

[root@base ~]# lvresize -L +200M /dev/testvg/testlv
//执行之前需要umount
[root@base ~]# umount /mnt/lvtest
[root@base ~]# e2fsck -f /dev/testvg/testlv
[root@base ~]# resize2fs /dev/testvg/testlv
[root@base ~]# mount /dev/testvg/testlv /mnt/lvtest/
[root@base ~]# df -hT /mnt/lvtest/
Filesystem Type Size Used Avail Use%
Mounted on
/dev/mapper/testvg-testlv ext4 9.0G 37M 8.5G 1%
/mnt/lvtest

ext4格式缩容

(必须先缩减逻辑卷的逻辑边界,再缩减物理边界)
注意:
1、不能在线缩减,得先卸载;
2、确保缩减后的空间大小依然能存储原有的所有数据;
3、在缩减之前应该先强行检查文件,以确保文件系统处于一致性状态。

[root@base ~]# lvs
LV VG Attr LSize Pool Origin Data%
Meta% Move Log Cpy%Sync Convert
bdqnlv bdqnvg -wi-a----- 9.00g

现在,将上述LV空间缩容至8G

[root@base ~]# umount /mnt/bdqn/

//对lv强制执行文件系统检测

[root@base ~]# e2fsck -f /dev/vgbdqn/lvbdqn
e2fsck 1.42.9 (28-Dec-2013)
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/vgbdqn/lvbdqn: 11/557056 files (0.0% non-contiguous),
76969/2228224 blocks

//使用resize2fs对lv逻辑卷的逻辑边界空间大小调整为缩减后的大小

[root@base ~]# resize2fs /dev/vgbdqn/lvbdqn 7G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vgbdqn/lvbdqn to 1835008
(4k) blocks.
The filesystem on /dev/vgbdqn/lvbdqn is now 1835008 blocks
long.

//使用lvreduce对lv逻辑卷的物理边界进行缩减

[root@base ~]# lvreduce -L 7G /dev/vgbdqn/lvbdqn
WARNING: Reducing active logical volume to 7.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vgbdqn/lvbdqn? [y/n]: y
Size of logical volume vgbdqn/lvbdqn changed from 8.50
GiB (544 extents) to 7.00 GiB (448 extents).
Logical volume vgbdqn/lvbdqn successfully resized.

//然后继续对lv进行挂载操作

[root@base ~]# mount /dev/vgbdqn/lvbdqn /mnt/LVM2/
[root@base ~]# df -hT /mnt/LVM2/
Filesystem Type Size Used Avail Use%
Mounted on
/dev/mapper/vgbdqn-lvbdqn ext4 6.8G 37M 6.4G 1%
/mnt/LVM2

码字不易,点个赞呗

初入Linux——LVM逻辑卷相关推荐

  1. Android逻辑卷管理LVM,LINUX——LVM逻辑卷管理

    LVM: logical volumes manager LVM逻辑卷部署 物理卷->卷组->逻辑卷 第一步:关机添加磁盘:两个磁盘可以构成一个磁盘组. 第二步:查看磁盘 # ls /de ...

  2. Linux LVM逻辑卷配置过程详解(创建,增加,减少,删除,卸载)

    Linux LVM逻辑卷配置过程详解(创建,增加,减少,删除,卸载) Linux LVM逻辑卷配置过程详解 许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量, ...

  3. linux删除配置信息,Linux LVM逻辑卷配置过程详解(创建、扩展、缩减、删除、卸载、快照创建)...

    一.预备知识 LVM全称为Logical Volume Manager逻辑卷管理器,LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上.文件系统之下的一个逻辑层,可提高磁盘分 ...

  4. Linux LVM逻辑卷管理及扩容(二)

    四.LVM扩展逻辑卷 我们当如何对lvm扩容呢,在vg组有空余的空间时,可以lvextend增加空间:在vg组无空间时,可以通过先增加pv,再lvextend实现扩容 点击(此处)折叠或打开 [roo ...

  5. linux lvm 逻辑卷 创建 扩容 缩减 删除

    目录 什么是LVM? 逻辑卷管理概念? 创建物理卷PV 创建卷组vg LVM的在线扩展 LVM的缩减操作 删除LVM 什么是LVM? LVM是逻辑盘卷管理(Logical Volume Manager ...

  6. linux LVM逻辑卷的创建,扩容,缩减和删除

    什么是LVM? LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管 ...

  7. linux查看逻辑卷lvlg,Linux LVM逻辑卷

    LVM的产生是因为传统的分区一旦分区好后就无法在线扩充空间,也存在一些工具能实现在线扩充空间但是还是会面临数据损坏的风险:传统的分区当分区空间不足时,一般的解决办法是再创建一个更大的分区将原分区卸载然 ...

  8. linux逻辑卷的作用,Linux LVM逻辑卷详解

    之前有新人问我LVM是什么鬼?我说是鸡蛋卷啊!开个玩笑啊,LVM是逻辑卷的意思. 可不能小看这个LVM的作用,它的用途重要着嘞! 下面我来科普一下LVM到底有什么作用: 要弄明白逻辑卷的作用,首先要熟 ...

  9. Linux LVM逻辑卷配置过程详解

    见:http://dreamfire.blog.51cto.com/418026/1084729/ 转载于:https://www.cnblogs.com/feral/p/6920848.html

最新文章

  1. 对象的指针指向哪里,oc的类信息存放在哪里
  2. 线程间操作无效: 从不是创建控件“button2”的线程访问它
  3. (JAVA)FileWriter
  4. leetcode 456. 132 Pattern 132模式 题解(栈)
  5. 网络高可用性99 999 9999 99999
  6. 拓端tecdat|matlab使用分位数随机森林(QRF)回归树检测异常值
  7. OPERA重要密码学习一
  8. windows10怎么卸载计算机,Win10怎么卸载声卡驱动?电脑声卡驱动怎么卸载?
  9. word未保存文件关闭之后,如何恢复
  10. WiFi密码破解亦或是WiFi热点软件?
  11. 【数据库系统】考虑题4所示的日志记录,假设开始时A、B、C的值都是0 (1) 如果系统故障发生在14之后,写出系统恢复后A、B、C的值
  12. 计算机硬件系统组装的论文,有关计算机硬件组装论文.docx
  13. 大三学生关于实习和考研的安排
  14. python创作txt文本文件字符画
  15. 游戏输入控制的五条黄金法则
  16. Python爬虫 | 获取股票行业资金流向
  17. php日历天气预报下载安装手机桌面_日历天气预报
  18. Can‘t resolve ‘@delon/chart/chart‘
  19. 黑苹果引导工具:Clover for Mac
  20. 飞机大战详解 C语言

热门文章

  1. 汉字注音与手输拼音对照
  2. USB 3.0规范中译本 第5章 机械结构
  3. ORACLE设置注释及默认的缺省值
  4. eNSP:实现不同网段主机之间的通信(直连路由)
  5. 金属晶体学之基本概念(一)
  6. 经理、总监、VP、CTO,如何通过CEO思考问题的方式,来提升自己
  7. Tessent专栏第二篇:Tessent Shell ETChecker介绍(1)
  8. 手机参数分析和以及对手机价格预测
  9. can总线rollingcounter_请问什么是汽车CAN通信中报文中信号checksum和rolling counter,具体有什么用?为什么要加在报文中。...
  10. 如何在微信订阅号里实现oauth授权登录