LVM是逻辑盘卷管理(Logical Volume Manager)的简称,他是磁盘管理的一种工具,就目前基本上所有操作系统均支持,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组(volume group),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logical volumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“DBdata”和“DBSoft”,而不是使用物理磁盘名“sda”和“sdb”或”hda”和”hdb”。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可,架构可以参考如下图:
<a href="https://s1.51cto.com/wyfs02/M00/95/76/wKiom1kVYH2BoTpXAACMblYojJA055.png" target="_blank"></a>
1、基本概念介绍
物理存储介质(The physical media)
这里指系统的存储设备:硬盘,如:/dev/hda、/dev/sda等等,是存储系统最低层的存储单元。
物理卷(PV physical volume)
物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
卷组(VG Volume Group)
LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
逻辑卷(LV logical volume)
LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
PE(physical extent)
每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
LE(logical extent)
逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
首先可以看到,物理卷(PV)被由大小等同的基本单元PE组成。
一个卷组由一个或多个物理卷组成:
从上图可以看到,PE和LE有着一一对应的关系。逻辑卷建立在卷组上。逻辑卷就相当于非LVM系统的磁盘分区,可以在其上创建文件系统。
下图是磁盘分区、卷组、逻辑卷和文件系统之间的逻辑关系的示意图:
和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷起始处的VGDA(卷组描述符区域)中。VGDA包括以下内容: PV描述符、VG描述符、LV描述符、和一些PE描述符 。
系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的实际物理存储位置。当系统进行I/O操作时,就会根据VGDA建立的映射机制来访问实际的物理位置。
2、LVM创建和管理
1)虚拟机添加两块磁盘,并识别为sdb和sdc
<a href="https://s2.51cto.com/wyfs02/M01/95/76/wKiom1kVY8_BOBySAACeNYzuqv8009.png" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M01/95/77/wKiom1kVZP6xYHQiAABTHWh703o985.png" target="_blank"></a>
2)创建PV,使用sdb和sdc
<code>[root@localhost ~]</code><code># pvcreate /dev/sdb</code>
<code> </code><code>Physical volume </code><code>"/dev/sdb"</code> <code>successfully created</code>
<code>[root@localhost ~]</code><code># pvcreate /dev/sdc</code>
<code> </code><code>Physical volume </code><code>"/dev/sdc"</code> <code>successfully created</code>
<code>[root@localhost ~]</code><code># pvs</code>
<code> </code><code>PV VG Fmt Attr PSize PFree</code>
<code> </code><code>/dev/sda2</code> <code>vg00 lvm2 a-- 7.80g 0 </code>
<code> </code><code>/dev/sdb</code> <code>vgzx lvm2 a-- 8.00g 8.00g</code>
<code> </code><code>/dev/sdc</code> <code>vgzx lvm2 a-- 8.00g 8.00g</code>
3)创建VG,使用刚创建的两个PV
<code>[root@localhost ~]</code><code># vgcreate vgzx /dev/sdb /dev/sdc</code>
<code> </code><code>Volume group </code><code>"vgzx"</code> <code>successfully created</code>
<code>[root@localhost ~]</code><code># vgs</code>
<code> </code><code>VG </code><code>#PV #LV #SN Attr VSize VFree </code>
<code> </code><code>vg00 1 2 0 wz--n- 7.80g 0 </code>
<code> </code><code>vgzx 2 0 0 wz--n- 15.99g 15.99g</code>
4)创建LV,在刚创建的VG上创建两个LV
<code>[root@localhost ~]</code><code># lvcreate -L 2G -n lvzx01 vgzx</code>
<code> </code><code>Logical volume </code><code>"lvzx01"</code> <code>created.</code>
<code>[root@localhost ~]</code><code># lvcreate -L 2G -n lvzx02 vgzx</code>
<code> </code><code>Logical volume </code><code>"lvzx02"</code> <code>created.</code>
<code>[root@localhost ~]</code><code># lvs</code>
<code> </code><code>LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert</code>
<code> </code><code>data vg00 -wi-ao---- 5.85g </code>
<code> </code><code>swap vg00 -wi-ao---- 1.95g </code>
<code> </code><code>lvzx01 vgzx -wi-a----- 2.00g </code>
<code> </code><code>lvzx02 vgzx -wi-a----- 2.00g</code>
5)使用刚创建的LV创建文件系统并挂载到操作系统
<code>[root@localhost ~]# mkfs.ext4 /dev/vgzx/lvzx01 </code>
<code>mke2fs 1.41.12 (17-May-2010)</code>
<code>Filesystem label=</code>
<code>OS type: Linux</code>
<code>Block </code><code>size</code><code>=4096 (log=2)</code>
<code>Fragment </code><code>size</code><code>=4096 (log=2)</code>
<code>Stride=0 blocks, Stripe width=0 blocks</code>
<code>131072 inodes, 524288 blocks</code>
<code>26214 blocks (5.00%) reserved </code><code>for</code> <code>the super </code><code>user</code>
<code>First</code> <code>data block=0</code>
<code>Maximum filesystem blocks=536870912</code>
<code>16 block groups</code>
<code>32768 blocks per </code><code>group</code><code>, 32768 fragments per </code><code>group</code>
<code>8192 inodes per </code><code>group</code>
<code>Superblock backups stored </code><code>on</code> <code>blocks: </code>
<code> </code><code>32768, 98304, 163840, 229376, 294912</code>
<code>Writing inode tables: done </code>
<code>Creating journal (16384 blocks): done</code>
<code>Writing superblocks </code><code>and</code> <code>filesystem accounting information: done</code>
<code>This filesystem will be automatically checked every 35 mounts </code><code>or</code>
<code>180 days, whichever comes </code><code>first</code><code>. Use tune2fs -c </code><code>or</code> <code>-i </code><code>to</code> <code>override.</code>
<code>[root@localhost ~]# mkfs.ext4 /dev/vgzx/lvzx02 </code>
<code>This filesystem will be automatically checked every 20 mounts </code><code>or</code>
<code>[root@localhost ~]# mkdir /orasoft</code>
<code>[root@localhost ~]# mkdir /oradata</code>
<code>[root@localhost ~]# mount /dev/mapper/vgzx-lvzx01 </code>
<code>mount: can't find /dev/mapper/vgzx-lvzx01 </code><code>in</code> <code>/etc/fstab </code><code>or</code> <code>/etc/mtab</code>
<code>[root@localhost ~]# mount /dev/mapper/vgzx-lvzx01 /oradata/</code>
<code>[root@localhost ~]# mount /dev/mapper/vgzx-lvzx02 /orasoft/</code>
<code>[root@localhost ~]# df -h</code>
<code>Filesystem </code><code>Size</code> <code>Used Avail Use% Mounted </code><code>on</code>
<code>/dev/mapper/vg00-data</code>
<code> </code><code>5.7G 1.9G 3.6G 34% /</code>
<code>tmpfs 499M 0 499M 0% /dev/shm</code>
<code>/dev/sda1 190M 36M 145M 20% /boot</code>
<code>/dev/mapper/vgzx-lvzx01</code>
<code> </code><code>2.0G 3.0M 1.9G 1% /oradata</code>
<code>/dev/mapper/vgzx-lvzx02</code>
<code> </code><code>2.0G 3.0M 1.9G 1% /orasoft</code>
如果想挂载随机启动需要修改/etc/fastab文件。
6)扩展LV
<code>[root@localhost ~]# lvextend -L +2G /dev/mapper/vgzx-lvzx01 </code>
<code> </code><code>Size</code> <code>of</code> <code>logical volume vgzx/lvzx01 changed </code><code>from</code> <code>2.00 GiB (512 extents) </code><code>to</code> <code>4.00 GiB (1024 extents).</code>
<code> </code><code>Logical volume lvzx01 successfully resized</code>
<code>[root@localhost ~]# lvextend -L +3G /dev/mapper/vgzx-lvzx02</code>
<code> </code><code>Size</code> <code>of</code> <code>logical volume vgzx/lvzx02 changed </code><code>from</code> <code>2.00 GiB (512 extents) </code><code>to</code> <code>5.00 GiB (1280 extents).</code>
<code> </code><code>Logical volume lvzx02 successfully resized</code>
<code>[root@localhost ~]# lvs</code>
<code> </code><code>LV VG Attr LSize Pool Origin Data% Meta% </code><code>Move</code> <code>Log Cpy%Sync </code><code>Convert</code>
<code> </code><code>data vg00 -wi-ao</code><code>---- 5.85g </code>
<code> </code><code>swap vg00 -wi-ao</code><code>---- 1.95g </code>
<code> </code><code>lvzx01 vgzx -wi-ao</code><code>---- 4.00g </code>
<code> </code><code>lvzx02 vgzx -wi-ao</code><code>---- 5.00g </code>
7)扩展文件系统resize2fs
从上面可以看出,LV分别做了扩展,但在操作系统上还没有显示为扩展
<code>[root@localhost ~]# resize2fs /dev/mapper/vgzx-lvzx01 </code>
<code>resize2fs 1.41.12 (17-May-2010)</code>
<code>Filesystem </code><code>at</code> <code>/dev/mapper/vgzx-lvzx01 </code><code>is</code> <code>mounted </code><code>on</code> <code>/oradata; </code><code>on</code><code>-line resizing required</code>
<code>old desc_blocks = 1, new_desc_blocks = 1</code>
<code>Performing an </code><code>on</code><code>-line resize </code><code>of</code> <code>/dev/mapper/vgzx-lvzx01 </code><code>to</code> <code>1048576 (4k) blocks.</code>
<code>The filesystem </code><code>on</code> <code>/dev/mapper/vgzx-lvzx01 </code><code>is</code> <code>now 1048576 blocks long.</code>
<code>[root@localhost ~]# resize2fs /dev/mapper/vgzx-lvzx02</code>
<code>Filesystem </code><code>at</code> <code>/dev/mapper/vgzx-lvzx02 </code><code>is</code> <code>mounted </code><code>on</code> <code>/orasoft; </code><code>on</code><code>-line resizing required</code>
<code>Performing an </code><code>on</code><code>-line resize </code><code>of</code> <code>/dev/mapper/vgzx-lvzx02 </code><code>to</code> <code>1310720 (4k) blocks.</code>
<code>The filesystem </code><code>on</code> <code>/dev/mapper/vgzx-lvzx02 </code><code>is</code> <code>now 1310720 blocks long.</code>
<code> </code><code>3.9G 4.0M 3.7G 1% /oradata</code>
<code> </code><code>4.9G 4.0M 4.7G 1% /orasoft</code>
如果是文件系统是xfs格式的,需要使用xfs_growfs命令执行扩展文件系统。
本文转自hbxztc 51CTO博客,原文链接:http://blog.51cto.com/hbxztc/1925107,如需转载请自行联系原作者