一、背景及特性
LVM是Logical Volume Manager逻辑卷管理,包括分配磁盘,以及对逻辑卷进行striping/mirroring/resizing操作. 将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,相对于普通的磁盘分区有很大的灵活性:
1.使系统管理员可以更方便的为应用与用户分配存储空间。
2.在LVM管理下的存储卷可以按需要随时改变大小与移除 。
3.LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如"sales'、'development')代替物理磁盘名(如'sda'、'sdb')来标识存储卷。
二、原理
LVM的基本术语
术语 | 术语解释 |
---|---|
physicalvolume/PV物理卷 | 物理的磁盘分区,是lvm的基本存储逻辑块. |
Volume group/VG 卷组 | 由一个或者多个物理卷组成,可以在卷组上面创建一个或多个逻辑卷. |
Logicalvolume/LV逻辑卷 | 就是从VG中划分的逻辑分区,在逻辑卷上可以创建文件系统(比如/home,/usr等) |
physical extent/PE | 每一个物理卷被划分为称为PE(PhysicalExtents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。 |
Logical extent/LE | 逻辑卷也被划分为被称为LE(LogicalExtents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。 |
将一个或多个硬盘的分区即PV在逻辑上集合,相当于一个大硬盘即VG来使用./boot分区不可以在逻辑卷组上,否则bootloader会无法读取.
逻辑卷组可以分成一个或多个逻辑卷中,逻辑卷挂在到不同的挂在点上,如/home,/等.当逻辑卷空间不够时,也可以通过freespace来扩大空间.
三、创建及查询命令
创建一个LVM系统
1.创建分区
sudo fdisk -l 查看磁盘分区表
$ fdisk -l
Disk /dev/sda: 1073.7 GB, 1073741824000 bytes
255 heads, 63 sectors/track, 130541 cylinders, total 2097152000 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 identifier: 0x0004caf1
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 3905535 1951744 83 Linux
/dev/sda2 3905536 2097149951 1046622208 8e Linux LVM
sudo fdisk /dev/sdb 使用fdisk创建分区,根据设备文件的绝对路径(/dev/sda2)进入分区管理,进行各种操作和配置
$ sudo fdisk/dev/sdb
Device containsneither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOSdisklabel with disk identifier 0x181c01b0.
Changes will remainin memory only, until you decide to write them.
After that, ofcourse, the previous content won't be recoverable.
Warning: invalidflag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m forhelp): m
Command action
a toggle abootable flag
b edit bsddisklabel
c toggle thedos compatibility flag
d delete apartition
l list knownpartition types
m print thismenu
n add a newpartition
o create a newempty DOS partition table
p print thepartition table
q quit withoutsaving changes
s create a newempty Sun disklabel
t change apartition's system id
u changedisplay/entry units
v verify thepartition table
w write tableto disk and exit
x extrafunctionality (experts only)
如下链接有非常详细的图片过程:
http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html
https://www.howtoforge.com/linux_lvm
parttprope #使分区表生效,不用重启
fdisk -l
cat/proc/partitons #查看验证
注意:一定要指定分区的格式为8e,这是LVM的分区格式;一个物理硬盘可以分成一个或多个分区,分区所用空间总和可以小于等于硬盘的大小,剩下的为freespace, 可以以后再用.
2.创建PV物理卷
pvcreate /dev/sdb1/dev/sdb2或者pvcreate vg00 /dev/sdb{1,2}
pvdisplay #或者pvs或者pvscan查看已存在pv
$ pvdisplay
--- Physicalvolume ---
PV Name /dev/sda2
VG Name vg00
PV Size 998.14 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 255522
Free PE 111120
Allocated PE 144402
PV UUID YfhPzW-8kE4-suZM-97ON-uIdC-nOwr-hYuu4J
3.创建vg卷组
vgcreate vg00/dev/sdb1 /dev/sdb2 #利用一个或多个物理卷来创建逻辑卷组.
vgdisplay #或者vgs或者vgscan查看验证
4.创建lv逻辑卷
PV创建好了才能建立VG,VG建立好了才能创建逻辑卷.
lvcreate -L 100M -nlv-test1 vg00 #在vg00卷组创建一个大小为100M,名为lv-test1的逻辑卷.
lvdisplay #或者lvs或者lvscan显示lv信息
$ lvdisplay
--- Logical volume---
LV Path /dev/vg00/swap
LV Name swap
VG Name vg00
LV UUID Xlal23-STfh-khN6-Drh8-dYMY-UCIn-I77H2y
LV Write Access read/write
LV Creation host,time mali-builder6, 2018-04-24 15:44:56 +0800
LV Status available
# open 2
LV Size 29.80 GiB
Current LE 7629
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
--- Logical volume---
LV Path /dev/vg00/root
LV Name root
VG Name vg00
LV UUID Qi6h7X-qPuw-O3Eg-wxEW-qNTc-AulQ-ux8KRP
LV Write Access read/write
LV Creation host,time mali-builder6, 2018-04-24 15:44:56 +0800
LV Status available
# open 1
LV Size 13.97 GiB
Current LE 3576
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:1
--- Logical volume---
LV Path /dev/vg00/tmp
LV Name tmp
VG Name vg00
LV UUID twQEC7-PD5h-VgKW-AW5L-Azb9-hnY0-ylW8QB
LV Write Access read/write
LV Creation host,time mali-builder6, 2018-04-24 17:50:26 +0800
LV Status available
# open 0
LV Size 20.00 GiB
Current LE 5120
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:2
5.lv格式化和挂载
逻辑卷创建好了之后,就可以在上面创建文件系统了.
注意:逻辑卷的引用需要逻辑卷的设备文件,逻辑卷的设备文件有两种书写形式:
/dev/vg_name/lv_name
/dev/mapper/vg_name-lv_name
经过格式化操作之后,LV才能存储数据
mkfs -t ext4/dev/vg00/lv-test1
将格式化后的LV分区挂载到指定的目录下面.
mkdir /root/test
mount/dev/vg00/lv-test1 /root/test/
(创建好之后,会在/dev/mapper/生成一个软连接名字为”卷组-逻辑卷”)
ll /dev/vgdata/vg00
df -h
/etc/fstab里面添加自动mount
四、管理命令
任务 | PV阶段 | VG阶段 | LV阶段 |
---|---|---|---|
查找(scan) | pvscan | vgscan | lvscan |
新建(create) | pvcreate | vgcreate | lvcreate |
显示(display) | pvdisplay | vgdisplay | lvdisplay |
增加(extend) | vgextend | lvextend | |
减少(reduce) | vgreduce | lvreduce | |
删除(remove) | pvremove | vgremove | lvremove |
改变容量(resize) | pvresize | lvresize | |
改变属性(attribute) | pvchange | vgchange | lvchange |
1.扩大卷组
pvcreate /dev/sdb3#再创建一个物理卷分区
vgextend vg00/dev/sdb3 #将创建好的分区加入到需要扩大的卷组中
vgs #查看
2.扩大逻辑卷
首先要确定逻辑卷对应的卷组下有足够扩充的空间.
lvextend -L +66gG/dev/mapper/vg00-root
resize2fs/dev/mapper/vg00-root
lvs
3.缩减卷组
有时候,某些分区坏了,可能需要移除逻辑卷.同时卷组的空间大小也减少了.
pvmove /dev/sdb1/dev/sdb2 #通过pvmove命令转移空间数据
vgreduce vg00/dev/sdb1 #将分区从卷组vg00里面移除除去
pvremove /dev/sdb1 #通过pvremove命令将分区从系统中删除掉(不一定需要)
4.缩减逻辑卷
umount mount_point #先卸载逻辑卷
e2fsck -f/dev/vg00/lv_name #通过e2fsck命令检测逻辑卷上空余空间
resize2fs/dev/vg00/lv_name size_new #将文件系统减小至size_new大小
lvreduce -L size_new /dev/vg00/lv_name #将逻辑卷大小减小至size_new
df -hl查看
mount/dev/vg00/lv_name /mount_point #重新挂载,继续使用
注意:文件系统大小和逻辑卷大小一定要保持一致才行。如果逻辑卷大于文件系统,由于部分区域未格式化成文件系统会造成空间的浪费。如果逻辑卷小于文件系统,哪数据就出问题了。
5.删除逻辑卷,卷组和物理卷
umount /mount_point #先卸载逻辑卷
vim /etc/fstab #修改下fstab里面逻辑卷的自动挂载信息
lvremove/dev/vg00/lv_name #删除逻辑卷
vgremove vg00 #删除卷组
pvremove /devsdb1/dev/sdb2 #将物理卷转化成普通分区
用pvs/vgs/lvs查看
sudo fdisk /dev/sdb1#更改分区ID标识,修改成普通linux分区,而不是8e.
6.创建快照卷
https://www.tecmint.com/take-snapshot-of-logical-volume-and-restore-in-lvm/ 这个文章说的非常详细,推荐下。
快照(snapshot)是LVM所提供的一个非常有用的特性。它的原理是复制Origin原始卷的元数据(metadata)来创建一个逻辑卷,并没有复制物理卷上的任何数据,因此它的创建过程是实时瞬间完成的。快照是特殊类型的逻辑卷,它含有创建时刻所指定的原始逻辑卷的完整数据,您可以操作快照而无需担心数据的变更令备份失效。
当一个snapshot创建的时候,仅拷贝原始卷里的源数据,这不是物理上的数据拷贝,因此snapshot的创建特别快,当原始卷里的数据有写入时,备份卷开始记录原始卷哪些数据发生了变化,然后在原始卷新数据覆盖旧数据时,将旧数据拷贝到snapshot的预留空间里,起到备份数据的作用,就保证了所有数据和创建备份卷之前的数据一致性。
而对于snapshot的读操作,如果是读取数据块是没有修改过的,那么会将读操作直接重定向到原始卷上,如果是要读取已经修改过的块,那么就读取拷贝到snapshot中的块。所以当原始卷破坏了之后还能用snapshot备份的数据还原.
注意:snapshot其实是一个逻辑卷;snapshot只能对同一个卷组的逻辑卷进行备份.
#创建快照
lvcreate --snapshot--size 50g --name snapshot_name /dev/vg00/lv_name
lvscan #查看
#挂在快照卷
mkdir /tmp/snapshot
mount/dev/vg00/snapshot_name /tmp/snapshot
#此时的快照卷就像是普通的逻辑卷,可以进行增加,缩小,删除等操作
#此时你可以在原来的逻辑卷内进行修改等操作
#恢复快照
umount /tmp/snapshot #卸载
lvconvert --merge /dev/vg00/snapshot_name #方法一
#或者方法二
lvchange --refresh vg00/snapshot_name
lvremove --force vg00/snapshot_name
网友评论