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 

posted @ 2020-03-09 11:26  科子  阅读(310)  评论(0)    收藏  举报