linux-LVM管理
linux-LVM管理
1、LVM的工作原理
2、创建LVM的基本步骤
1、1 LVM的工作原理
LVM( Logical Volume Manager)逻辑卷管理,是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。
管理员利用LVM可以在磁盘不用重新分区的情况下动态调整文件系统的大小,并且利用LVM管理的文件系统可以跨越磁盘,当服务器添加了新的磁盘后,管理员不必将原有的文件移动到新的磁盘上,而是通过LVM可以直接扩展文件系统跨越磁盘
1.2 LVM常用的术语
物理存储介质(The physical media):LVM存储介质可以是磁盘分区,整个磁盘,RAID阵列或SAN磁盘,设备必须初始化为LVM物理卷,才能与LVM结合使用
物理卷PV(physical volume) :物理卷就是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数,创建物理卷它可以用硬盘分区,也可以用硬盘本身;
卷组VG(Volume Group) :一个LVM卷组由一个或多个物理卷组成
逻辑卷LV(logical volume) :LV建立在VG之上,可以在LV之上建立文件系统
PE(physical extents) :PV物理卷中可以分配的最小存储单元,PE的大小是可以指定的,默认为4MB
LE(logical extent) : LV逻辑卷中可以分配的最小存储单元,在同一个卷组中,LE的大小和PE是相同的,
最小存储单位总结:
名称 最小存储单位
硬盘 扇区(512字节)
文件系统 block(1K或4K )# mkfs.ext4 -b 2048 /dev/sdb1 ,最大支持到4096
raid chunk (512K) #mdadm -C -v /dev/md5 -l 5 -n 3 -c 512 -x 1 /dev/sde{1,2,3,5}
LVM PE (4M) # vgcreate -s 4M vg1 /dev/sdb{1,2}
多个磁盘/分区/raid-》多个物理卷PV-》合成卷组VG-》从VG划出逻辑卷LV-》格式化LV挂载使用
1.3 LVM优点
使用卷组,使多个硬盘空间看起来像是一个大的硬盘
使用逻辑卷,可以跨多个硬盘空间的分区 sdb1 sdb2 sdc1 sdd2 sdf
在使用逻辑卷时,它可以在空间不足时动态调整它的大小
在调整逻辑卷大小时,不需要考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间
可以在线对LV,VG 进行创建,删除,调整大小等操作。LVM上的文件系统也需要重新调整大小。
允许创建快照,可以用来保存文件系统的备份。
RAID+LVM一起用:LVM是软件的卷管理方式,而RAID是磁盘管理的方法。对于重要的数据,使用RAID来保护物理的磁盘不会因为故障而中断业务,再用LVM用来实现对卷的良性的管理,更好的利用磁盘资源。
2、创建LVM的基本步骤
1) 物理磁盘被格式化为PV,(空间被划分为一个个的PE) #PV包含PE
2) 不同的PV加入到同一个VG中,(不同PV的PE全部进入到了VG的PE池内) #VG包含PV
3) 在VG中创建LV逻辑卷,基于PE创建,(组成LV的PE可能来自不同的物理磁盘) #LV基于PE创建
4) LV直接可以格式化后挂载使用 #格式化挂载使用
5) LV的扩充缩减实际上就是增加或减少组成该LV的PE数量,其过程不会丢失原始数据
2.1 lvm常用的命令
|
功能 |
PV管理命令 |
VG管理命令 |
LV管理命令 |
|
scan 扫描 |
pvscan |
vgscan |
lvscan |
|
create 创建 |
pvcreate |
vgcreate |
lvcreate |
|
display显示 |
pvdisplay |
vgdisplay |
lvdisplay |
|
remove 移除 |
pvremove |
vgremove |
lvremove |
|
extend 扩展 |
|
vgextend |
lvextend |
|
reduce减少 |
|
vgreduce |
lvreduce |
|
查看卷名 |
简单对应卷信息的查看 |
扫描相关的所有的对应卷 |
详细对应卷信息的查看 |
|
物理卷 |
pvs |
pvscan |
pvdisplay |
|
卷组 |
vgs |
vgscan |
vgdisplay |
|
逻辑卷 |
lvs |
lvscan |
lvdisplay |
2.2 创建并使用LVM逻辑卷
(1)pv 创建

(2)vg创建
创建vg卷组:
语法: vgcreate vg名字 pv的名字 可以跟多个pv

(3)lv 创建
创建LV
lvcreate -n 指定新逻辑卷的名称 -L指定lv大小的SIZE(M,G) (-l:小l 指定LE的数量) vgname [root@localhost ~]# lvcreate -n lv01 -L 16M vg01 Logical volume "lv01" created. [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv01 vg01 -wi-a----- 16.00m [root@localhost ~]# lvcreate -n lv02 -l 4 vg01 Logical volume "lv02" created. [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv01 vg01 -wi-a----- 16.00m lv02 vg01 -wi-a----- 16.00m
2.3文件系统格式与挂载
[root@localhost ~]# lvscan ACTIVE '/dev/vg01/lv01' [16.00 MiB] inherit ACTIVE '/dev/vg01/lv02' [16.00 MiB] inherit [root@localhost ~]# mkfs.xfs /dev/vgo1/lv01 /dev/vgo1/lv01: No such file or directory Usage: mkfs.xfs /* blocksize */ [-b log=n|size=num] /* metadata */ [-m crc=0|1,finobt=0|1,uuid=xxx] /* data subvol */ [-d agcount=n,agsize=n,file,name=xxx,size=num, (sunit=value,swidth=value|su=num,sw=num|noalign), sectlog=n|sectsize=num /* force overwrite */ [-f] /* inode size */ [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2, projid32bit=0|1] /* no discard */ [-K] /* log subvol */ [-l agnum=n,internal,size=num,logdev=xxx,version=n sunit=value|su=num,sectlog=n|sectsize=num, lazy-count=0|1] /* label */ [-L label (maximum 12 characters)] /* naming */ [-n log=n|size=num,version=2|ci,ftype=0|1] /* no-op info only */ [-N] /* prototype file */ [-p fname] /* quiet */ [-q] /* realtime subvol */ [-r extsize=num,size=num,rtdev=xxx] /* sectorsize */ [-s log=n|size=num] /* version */ [-V] devicename <devicename> is required unless -d name=xxx is given. <num> is xxx (bytes), xxxs (sectors), xxxb (fs blocks), xxxk (xxx KiB), xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB). <value> is xxx (512 byte blocks). [root@localhost ~]# partprobe /dev/vg01/lv0 lv01 lv02 [root@localhost ~]# partprobe /dev/vg01/lv0 lv01 lv02 [root@localhost ~]# partprobe /dev/vg01/lv01 [root@localhost ~]# mkdir lv01 [root@localhost ~]# mount /dev/vg01/lv0 lv01 lv02 [root@localhost ~]# mkfs.xfs /dev/vg01/lv01 meta-data=/dev/vg01/lv01 isize=512 agcount=1, agsize=4096 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=4096, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=855, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [root@localhost ~]# mount /dev/vg01/lv01 lv01 [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 28G 4.8G 23G 18% / /dev/mapper/vg01-lv01 13M 896K 12M 7% /root/lv01
2.4 指定PE大小用
指定PE大小用的参数: -s ,如果存储的数据都是大文件,那么PE尽量调大,读取速度快
PE的大小只有为2的幂数,且最大为512M
vgcreate -s 16M vg02 /dev/sdb2
2.5LV扩容
首先,确定一下是否有可用的扩容空间,因为空间是从VG里面创建的,并且LV不能跨VG扩容
vgs
用的命令如下:
|
extend扩展 |
vgextend |
lvextend |
扩容逻辑卷
vextend -L +30m /dev/vg01/lv01
说明:在指定大小的时候,扩容30m和扩容到30m是不一样的写法
扩容30m ====> -L +30M
扩容到30m =====> -L 30M
lvextend -L +30m /dev/vg01/lv01
lvextend -L 30m /dev/vg01/lv01
lvs
可以看到LV虽然扩展了,但是文件系统大小还是原来的,下面开始扩容文件系统
ext4文件系统扩容使用命令语法: resize2fs 逻辑卷名称
xfs文件系统扩容使用命令语法: xfs_growfs 挂载点
resize2fs和xfs_growfs 两者的区别是传递的参数不一样的,xfs_growfs是采用的挂载点;resize2fs是逻辑卷名称,而且resize2fs命令不能对xfs类型文件系统使用
resize2fs /dev/vg01/lv01
lvextend -L 80M -r /dev/vg01/lv01
2.6VG扩容
vgextend vg01 /dev/sdb3
2.7 LVM缩小
LVM可以动态增加,也可以动态缩小,但是XFS不支持动态缩小,所以我们无法实现基于xfs的动态缩小。btrfs文件系统支持在线缩小。
lvreduce -L -20m /dev/vg01/lv01
lvextend -L 10M -r /dev/vg01/lv01
resize2fs /dev/vg01/lv01
2.8移动数据:
pvmove /dev/sdb1 /dev/sdb3
vgreduce vg01 /dev/sdb1 #移完数据再移出
2.9 LVM删除
创建LVM流程:
pvcreate创建pv -> vgcreate创建卷组 -> lvcreate创建逻辑卷 -> mkfs.xfs lv 格式化-> mount挂载
删除LVM流程:
umount卸载 -> lvremove lv移出卷组中所有逻辑卷-> vgremove vg移出卷组-> pvremove 移出pv
umount /lv01
lvremove /dev/vg01/lv01
vgremove vg01
移出pv sdb1
pvremove /dev/sdb1

浙公网安备 33010602011771号