在线扩容 online
数据迁移 online
====================================================================================
创建LVM LVM叫逻辑卷管理
VG扩展/缩小
LV扩容
文件系统扩容 在线扩容及在生产中 300G+900G硬盘 做单盘RAID0
基本分区(MBR|GPT) ----> Filesystem ----> mount // 大小固定+<br /> 逻辑卷LVM ----> Filesystem ----> mount<br /> VG叫做卷组<br /> extents 叫做扩展块<br /> PE: Physical extent 物理扩展 4M 8M 16M 32M 64M 创建VG时指定 -s 8M<br /> LE: Logical extent 逻辑扩展
①PE (Physical Extend) 物理拓展
②PV (Physical Volume) 物理卷
③VG (Volume Group) 卷组
④LV (Logical Volume) 逻辑卷
什么是LVM?
LVM(Logical Volume Manager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的 分区加入其中,这样可以实现一种磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性,使用普通的磁盘分区,当一个磁盘的分区空间不够使用的时候,可能就会带来很大的麻烦。使用LVM在一定程度上就可以解决普通磁盘分区带来的问题。
LVM基本术语
前面谈到,LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。首先我们讨论以下几个LVM术语:
「物理卷—PV(Physical Volume)」
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘。
「卷组—VG(Volume Group)」
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
「逻辑卷—LV(Logical Volume)」
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷属于同一个卷组,也可以属于不同的多个卷组。
「物理区域—PE(Physical Extent)」
物理区域是物理卷中可用于分配的最小存储单元,物理区域的大小可根据实际情况在建立物理卷时指定。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一致。
「逻辑区域—LE(Logical Extent)」
逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
「卷组描述区域—VGDA(Volume Group Descriptor Area)」
卷组描述区域存在于每个物理卷中,用于描述物理卷本身、物理卷所属卷组、卷组中的逻辑卷及逻辑卷中物理区域的分配等所有信息,卷组描述区域是在使用pvcreate建立物理卷时建立的。
下图是磁盘分区、卷组、逻辑卷和文件系统之间的逻辑关系的示意图:
系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的实际物理存储位置。当系统进行I/O操作时,就会根据VGDA建立的映射机制来访问实际的物理位置。
新浪实际工作中<br /> 启动VMware环境下的Linux操作系统,添加新分区,需要root账号身份。<br /> 3.1 【fdisk -l】 最大分区为/dev/sda3,说明新创建的分区将会是sda4<br /> 3.2 输入【fdisk /dev/sda】<br /> 3.2.1命令行提示下输入【m】<br /> 3.2.2输入命令【n】添加新分区。<br /> 3.2.3输入命令【p】创建主分区。<br /> 3.2.4输入【回车】,选择默认大小,这样不浪费空间<br /> 3.2.5输入【回车】,选择默认的start cylinder。<br /> 3.2.6输入【w】,保持修改<br /> 3.3 输入【reboot】 重启linux,必须reboot,否则/dev/sda4无法格式化。<br /> 3.4 这时在/dev/目录下,才能看到了新的分区比如/dev/sda4<br /> 3.5 【mkfs.ext2 /dev/sda4】格式化<br /> 3.6 在根目录下创建disk4目录<br /> 3.7 【mount /dev/sda4 /disk4/】将分区mount到/disk4/上<br /> 3.8 在vim修改/etc/fstab文件,加入【/dev/sda4 /disk4 ext2 defaults 0 0】一行,并保存,实现开机自动mount。<br /> 注意 带有快照虚拟机需要安装软件后添加硬盘<br /> ** 一、创建LVM**<br /> ** 0. 准备物理磁盘**<br /> 可以是: /dev/sdb /dev/sdc1<br /> [root@server0 ~]# ll /dev/vd{c,d,e}<br /> brw-rw----. 1 root disk 253, 32 Jun 6 17:38 /dev/vdc<br /> brw-rw----. 1 root disk 253, 48 Jun 6 17:38 /dev/vdd<br /> brw-rw----. 1 root disk 253, 64 Jun 6 17:38 /dev/vde<br /> ** 1. pv**<br /> [root@server0 ~]# pvcreate /dev/vdd<br /> Physical volume "/dev/vdd" successfully created<br /> [root@server0 ~]# pvscan<br /> PV /dev/vdd lvm2 [2.00 GiB]<br /> Total: 1 [2.00 GiB] / in use: 0 [0 ] / in no VG: 1 [2.00 GiB]<br /> [root@server0 ~]# pvs<br /> PV VG Fmt Attr PSize PFree<br /> /dev/vdd lvm2 a-- 2.00g 2.00g<br /> ** 2. vg**<br /> [root@server0 ~]# vgcreate vg1 /dev/vdd<br /> Volume group "vg1" successfully created<br /> [root@server0 ~]# vgs<br /> VG #PV #LV #SN Attr VSize VFree<br /> vg1 1 0 0 wz--n- 2.00g 2.00g<br /> [root@server0 ~]# vgscan<br /> Reading all physical volumes. This may take a while...<br /> Found volume group "vg1" using metadata type lvm2<br /> [root@server0 ~]# vgdisplay vgdisplay datevg<br /> --- Volume group ---<br /> VG Name vg1<br /> System ID<br /> Format lvm2<br /> Metadata Areas 1<br /> Metadata Sequence No 1<br /> VG Access read/write<br /> VG Status resizable<br /> MAX LV 0<br /> Cur LV 0<br /> Open LV 0<br /> Max PV 0<br /> Cur PV 1<br /> Act PV 1<br /> VG Size 2.00 GiB<br /> PE Size 4.00 MiB<br /> Total PE 511<br /> Alloc PE / Size 0 / 0<br /> Free PE / Size 511 / 2.00 GiB<br /> VG UUID 7E4tlj-l0a2-ph52-OytH-eaq7-58K6-2S4n8V<br /> ** 3. lv**<br /> [root@server0 ~]# lvcreate -l 10 -n lv1 vg1<br /> [root@server0 ~]# lvcreate -L 200M -n lv2 vg1<br /> [root@server0 ~]# lvscan<br /> ACTIVE '/dev/vg1/lv1' [640.00 MiB] inherit<br /> ACTIVE '/dev/vg1/lv2' [256.00 MiB] inherit<br /> ** 4. 创建文件系统并挂载**<br /> [root@server0 ~]# mkfs.xfs /dev/vg1/lv1<br /> [root@server0 ~]# mkfs.ext4 /dev/vg1/lv2<br /> [root@server0 ~]# mkdir /mnt/lv1 /mnt/lv2<br /> [root@server0 ~]# vim /etc/fstab<br /> /dev/vg1/lv1 /mnt/lv1 xfs defaults 0 0<br /> /dev/vg1/lv2 /mnt/lv2 ext4 defaults 0 0<br /> [root@server0 ~]# mount -a<br /> [root@server0 ~]# df<br /> Filesystem 1K-blocks Used Available Use% Mounted on<br /> /dev/mapper/vg1-lv1 651948 32928 619020 6% /mnt/lv1<br /> /dev/mapper/vg1-lv2 245671 2062 226406 1% /mnt/lv2
** 二、VG管理**<br /> ==扩大VG vgextend==<br /> ** 1. pv**<br /> [root@server0 ~]# pvcreate /dev/vde<br /> ** 2. vgextend**<br /> [root@server0 ~]# vgextend vg1 /dev/vde<br /> Volume group "vg1" successfully extended<br /> [root@server0 ~]# vgs<br /> VG #PV #LV #SN Attr VSize VFree<br /> vg1 2 2 0 wz--n- 3.99g 3.76g<br /> ==减小VG vgreduce==<br /> ** 通常先做数据的迁移**<br />**<br /> ** 1.查看当前的VG中PV的使用情况**<br /> [root@server0 ~]# pvs<br /> PV VG Fmt Attr PSize PFree<br /> /dev/vdd vg1 lvm2 a-- 2.00g 1.76g<br /> /dev/vde vg1 lvm2 a-- 2.00g 2.00g<br /> ** 2. pvmove数据到其它PV**<br /> [root@server0 ~]# pvmove /dev/vdd<br /> /dev/vdd: Moved: 16.7%<br /> /dev/vdd: Moved: 100.0%<br /> [root@server0 ~]# pvs<br /> PV VG Fmt Attr PSize PFree<br /> /dev/vdd vg1 lvm2 a-- 2.00g 2.00g<br /> /dev/vde vg1 lvm2 a-- 2.00g 1.76g<br /> ** 3.vgreduce VG**<br /> [root@server0 ~]# vgreduce vg1 /dev/vdd<br /> Removed "/dev/vdd" from volume group "vg1"<br /> [root@server0 ~]# vgs<br /> VG #PV #LV #SN Attr VSize VFree<br /> vg1 1 2 0 wz--n- 2.00g 1.76g
** 三、LV扩容**<br /> ** 1. lv扩容**<br /> [root@server0 ~]# vgs<br /> VG #PV #LV #SN Attr VSize VFree<br /> vg1 2 2 0 wz--n- 1.88g 1.00g<br /> [root@server0 ~]# lvextend -L 800M /dev/vg1/lv1<br /> [root@server0 ~]# lvextend -L +800M /dev/vg1/lv1<br /> [root@server0 ~]# lvextend -l 15 /dev/vg1/lv1<br /> [root@server0 ~]# lvextend -l +15 /dev/vg1/lv1<br /> =======================================<br /> +50%FREE<br /> lvcreate -l 100%FREE -n lv3 datavg<br />lvextend -l +50%FREE /dev/vg1/lv1<br /> =======================================<br /> [root@server0 ~]# lvscan<br /> ACTIVE '/dev/vg1/lv1' [768.00 MiB] inherit<br /> ACTIVE '/dev/vg1/lv2' [512.00 MiB] inherit<br /> ** 2. FS扩容**<br /> [root@server0 ~]# df -Th<br /> /dev/mapper/vg1-lv1 xfs 637M 67M 570M 11% /mnt/lv1<br /> /dev/mapper/vg1-lv2 ext4 240M 32M 192M 15% /mnt/lv2<br /> a. xfs<br /> [root@server0 ~]# xfs_growfs /dev/vg1/lv1<br /> b. ext2/3/4<br /> [root@server0 ~]# resize2fs /dev/vg1/lv2<br /> [root@server0 ~]# df -Th<br /> Filesystem Type Size Used Avail Use% Mounted on<br /> /dev/mapper/vg1-lv1 xfs 765M 67M 698M 9% /mnt/lv1<br /> /dev/mapper/vg1-lv2 ext4 488M 32M 429M 7% /mnt/lv2<br /> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br /> 1.创建pv<br /> [root@localhost ~]# pvcreate /dev/sda5 /dev/sda6<br /> [root@localhost ~]# pvdisplay<br /> [root@localhost ~]# pvs<br /> 2.创建vg<br /> [root@localhost ~]# vgcreate vg0 /dev/sda5 /dev/sda6<br /> [root@localhost ~]# vgdisplay<br /> [root@localhost ~]# vgs<br /> 3.创建lv<br /> [root@localhost ~]# lvcreate -L 250M -n /dev/vg0/lv0 vg0<br /> [root@localhost ~]# lvdisplay<br /> [root@localhost ~]# lvs<br /> 注意:<br /> pv不能跨越vg<br /> lv不能跨越vg<br /> 系统中可以创建多个vg<br /> vg中可以创建多个lv<br /> 删除lvm<br /> 1.umount /dev/vg0/lv0<br /> 2.[root@localhost ~]# lvremove /dev/vg0/lv0<br /> 3.[root@localhost ~]# vgremove vg0<br /> 4.[root@localhost ~]# pvremove /dev/sda{5,6,8}<br /> 企业中的应用 如果根分区满了 怎么做??<br /> df -h 查看<br /> pvcreate /dev/sdb<br /> vgs<br /> vgextend centos /dev/sdb<br /> lvscan<br /> lvextend -L +5G /dev/centos/root<br /> df -T<br /> xfs_growfs /dev/centos/root<br /> df -Th<br /> lvextend -L +5G /dev/centos/root<br /> xfs_growfs /dev/centos/root<br /> df -h<br /> 准备3块硬盘 可不分区 思路---PV----VG---LV<br /> lsblk<br /> ##创建PV<br /> pvcreate /dev/sdb<br /> ##查看当前PV<br /> pvscan<br /> pvs<br /> vgcreate datavg /dev/sdb (datavg是起的名字)<br /> vgscan<br /> pvscan ##得到回显 pv/dev/sdb 加入到了VG datevg 容量XXfree<br /> #创建LV<br /> lvcreate -L 200M -n lv1 datavg -L(指定lv的大小) 指定为200m lv1为起的名字 从datevg里创建<br /> lvcreate -L 300M -n lv2 datavg<br /> lvscan ## 得到回显 /dev/datevg/lv1 200m<br /> /dev/datevg/lv2 300m<br /> 这时候看lsblk 去看看/dev/sdb????<br /> ##格式化,创建文件系统挂载<br /> mkfs.xfs /dev/datevg/lv1<br /> mkfs.ext4 /dev/datevg/lv2<br /> mkdir /mnt/lv1 /mnt/lv2<br /> 挂载<br /> mount /dev/datevg/lv1 /mnt/lv1<br /> mount /dev/datevg/lv2 /mnt/lv2<br /> mount -a<br /> df -h (df-Th) 加上TYPE 类型<br /> LVM完成<br /> #########################################################<br /> 扩大VG<br /> vgs<br /> pvcreate /dev/sdc 先变成PV<br /> vgextend datevg /dev/sdc 查看pvscan<br /> vgs free变大 实验成功<br /> 继续扩容<br /> pvcreate /dev/sdd<br /> vgextend datevg /dev/sdd<br /> 继续查看 VFree 继续变大<br /> ###############################################################<br /> 减小VG 数据迁移 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!<br /> pvs 查看<br /> pvmove /dev/sdb /dev/sdc 将sdb数据仍到sdc<br /> vgreduce datevg /dev/sdb<br /> pvscan<br /> 查看变化。数据迁移完成<br /> 注意:<br /> pv不能跨越vg<br /> lv不能跨越vg<br /> 系统中可以创建多个vg<br /> vg中可以创建多个lv