热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux常用命令之–逻辑卷

逻辑卷管理概述每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的

逻辑卷管理概述

每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值。如果估计不准确,当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬盘、重新对硬盘分区,然后恢复数据到新分区
逻辑卷管理器LVM(Logicl Volume Manager),通过使用逻辑卷管理器对硬盘存储设备进行管理,可以实现硬盘空间的动态划分和调整,而且可以将零碎的空间进行整合

逻辑卷管理组成部分

• 物理卷(PV-Physical Volume)
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘
• 卷组(VG-Volumne Group)
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组
• 逻辑卷(LV-Logical Volume)
逻辑卷建立在卷组之上,卷中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组

Linux常用命令之--逻辑卷
逻辑卷.png

逻辑卷管理器和是主分区还是逻辑分区没有关系

创建逻辑卷

[root@localhost /]# fdisk /dev/sdc
Command (m for help): p
Device Boot Start End Blocks Id System
#发现没有分区表
Command (m for help): n
#新建分区表,弄出4个主分区,然后t改分区标签(4个都改),都改成8e,过程不赘述
#不改成8e也可以。但是为了优化最好是改成8e
Command (m for help): p
 Device Boot Start End Blocks Id System
/dev/sdc1 2048 2099199 1048576 8e Linux LVM
/dev/sdc2 2099200 6293503 2097152 8e Linux LVM
/dev/sdc3 6293504 12584959 3145728 8e Linux LVM
/dev/sdc4 12584960 20973567 4194304 8e Linux LVM
不改成8e也可以。但是为了优化最好是改成8e
Command (m for help): w
[root@localhost /]# pvcreate  /dev/sdc{1..4}
[root@localhost /]# vgcreate vg1 /dev/sdc1 /dev/sdc2 /dev/sdc3 /dev/sdc4 
#也可以用花括号的形式添加
[root@localhost /]# vgs 
#看卷组的信息
VG #PV #LV #SN Attr  VSize VFree
vg1 4 0 0 wz--n- 9.98g 9.98g
[root@localhost /]# vgdisplay 
#看卷组的详细信息(如果后面加卷组的名称就只看这个卷组的信息)

vgdisplay 里的PE Size是指逻辑卷的最小单位。假设PE Size是4M;比如我向里写东西。我一个文件可能只占用1B的容量,但是我先占上4M,其他的也是,不足4M我也先占上4M。等到每个块都用了,但是每个块都有剩余位置的时候,会把每个区的剩余位置都拼凑一下,以供使用。但是只要还有没被占用的块,都不会使用用过的块。逻辑卷大小为这个PE Size的整数倍

[root@localhost /]# lvcreate -L 3G -n  lv1  vg1
#-L :PE 的大小,-l :个数
这里物理卷一共9.98g,这里我只指定3G,还有空间可以创建其他的逻辑卷
[root@localhost /]# lvs 
#查看lv情况
[root@localhost /]# lvdisplay 
#查看lv详细情况
[root@localhost /]# mkfs.xfs /dev/vg1/lv1  
#或者是mkfs.xfs /dev/mapper/vg1-lv1,它们其实是一个东西
#这一步进行格式化。格式不用非是xfs,是什么无所谓
[root@localhost /]# blkid
/dev/sdc1: UUID="8pZe8X-gmpo-czGC-a3VN-Egae-A1Hl-aKDlL1" TYPE="LVM2_member"
/dev/sdc2: UUID="LvDt5u-6PDB-hExx-b5Lw-r3E3-NQf9-sn5EHY" TYPE="LVM2_member"
/dev/sdc3: UUID="sUK3wP-groJ-9Z7K-QwJT-C8CY-TRm6-bz5Unk" TYPE="LVM2_member"
/dev/sdc4: UUID="uyeZ30-kS0u-lNDE-s8bY-L7r1-UpUd-3TknVC" TYPE="LVM2_member"
/dev/mapper/vg1-lv1: UUID="1575972f-8c9a-4cdf-bcd2-3f9fa39149ec" TYPE="xfs"
#这时/dev/sdc1-sdc4就不能再用来做挂载了,因为它现在变成逻辑卷lv1的东西了。
#能进行使用的是/dev/mapper/vg1-lv1: UUID="1575972f-8c9a-4cdf-bcd2-3f9fa39149ec"

[root@localhost /]# mkdir /mnt/xfs
[root@localhost /]# vim /etc/fstab
UUID="1575972f-8c9a-4cdf-bcd2-3f9fa39149ec " /mnt/xfs xfs defaults 0 0
[root@localhost /]#mount -a
[root@localhost /]#mount | grep xfs
#显示/dev/mapper/vg1-lv1 on /mnt/xfs type xfs (rw,relatime,seclabel,attr2,inode64,noquota),说明挂载成功

删除卷

处在它所在的文件夹的时候是无法卸载的

[root@localhost /]# umount /dev/mapper/vg1-lv1 
#需要将挂载卸载才能删除卷,如果卸载不掉的话加-f
[root@localhost /]# lvremove vg1 lv1 
#删除逻辑卷
[root@localhost /]# vgremove vg1 
#必须要下面没有逻辑卷才能删除卷组,否则删不掉
[root@localhost /]# pvremove /dev/sdc{1..4} 
#删除物理卷1,2,3,4

我现在想创建两个卷组,vg1和vg2。sdc1和sdc2给vg1,sdc3和sdc4给vg2

[root@localhost /]# pvcreate /dev/sdc{1..4}
[root@localhost /]# vgcreate vg1 /dev/sdc1
[root@localhost /]# vgcreate vg1 /dev/sdc2 
#发现添加不了,因为vg1已经创建过了
[root@localhost /]# vgextend vg1 /dev/sdc2 
#在vg1卷组里面添加sdc2
[root@localhost /]# vgextend vg1 /dev/sdc3     
[root@localhost /]# vgreduce vg1 /dev/sdc3       
#添加多了,把它移除出去
[root@localhost /]# vgdisplay vg1 
#看一下vg1卷组的状态
#vg2也如法炮制,不赘述                                

修改卷组属性,用来设置卷组是否处于活动状态,活跃状态的时候卷组无法被删除,非活动状态的卷组才能被删除掉。VG Status:resizable是表示可被调整大小的状态。lvremove时有可能因为逻辑卷里东西过多导致删除逻辑卷的时候假删除,即逻辑卷没了,但是里面东西还在,这时卷组觉得它里面还有东西,就会处于活跃状态,这时需要↓

[root@localhost /]# vgchange -ay vg1 
#让卷组vg1成非活跃状态
[root@localhost /]# vgrename       
#给卷组换名字,lv也可以被重命名,但是pv不可以,因为pv本来就没有名字
#换完名字之后需要在fstab里将挂载的名字也需要改。除非是用uuid进行挂载的,就不用改

[root@localhost /]# vgcreate -s 8M vg3 /dev/sdc3 /dev/sdc4
[root@localhost /]# vgdisplay vg3 
#发现PE size变成了8M
#但是vg如果已经存在,那么它的PE size无法变更
[root@localhost /]# lvcreate -n resize1 -l 100 vg3 
#100: 用一百个块(100*8M=800M),从vg3中拿
[root@localhost /]# lvcreate -n resize2 -L 777M vg3 
#但是发现给增加了784M,因为777M不是8(PE size为8)的整数倍

放大缩小逻辑卷

接下来resize1要用来做块(逻辑卷)的放大,resize2要用来做块的缩小。设备放大时不论是挂载状态下或非挂载状态下都可以做放大,即在线放大。但是缩小的话设备要是非挂载的状态,即离线缩小

mkfs.ext3 /dev/mapper/vg3-resize1
mkfs.ext3 /dev/mapper/vg3-resize2
mkdir /mnt/rs1
mkdir /mnt/rs2
mount /dev/mapper/vg3-resize1 /mnt/rs1
mount /dev/mapper/vg3-resize2 /mnt/rs2

df -lh

                                   size   used  avail  use% mounted 
mkfs.ext3 /dev/mapper/vg3-resize1  772M   828K   731M  1%  /mnt/rs1
mkfs.ext3 /dev/mapper/vg3-resize2   756M  812K   716M  1%  /mnt/rs2

发现size大小变小了。之前给的resize1是800M,resize2是784M,这里的大小表示文件系统(filesystem)大小(即这个设备能存多少东西),剩下的容量mkfs,挂载的时候都会损耗一定的容量大小。文件系统大小不会随着块的变大或缩小而改变,需要手动才能改变文件系统大小。
放大要先放大块的大小,再放大文件系统的大小

lvresize -L +200M /dev/vg3/resize1 放大逻辑卷
如果不带+,会出现warning,+时是在原有基础之上加200M,不加+的话就是将现有逻辑卷的大小调整成200M。如果比之前设置的逻辑卷小的话就证明是要将其缩小,会造成数据丢失
resize2fs /dev/vg3/resize1调整文件系统大小,但是不会管你到底是放大还是缩小,就是将文件系统调整到它可以变大的最大程度
df -lh 看设备容量变大了

                                   size   used  avail  use% mounted 
mkfs.ext3 /dev/mapper/vg3-resize1  970M   1.0M   925M  1%  /mnt/rs1

缩小的时候要先将文件系统缩小,再缩小逻辑卷的大小

umount /mnt/rs2/
resize2fs /dev/vg3/resize2 700M
出现提示 [请先输入e2fsck -f /dev/vg3/resize2 命令],将处于多个块当中的内容整理到一起,以便进行缩小。但是也不能百分百保证数据不丢失
e2fsck -f /dev/vg3/resize2
resize2fs /dev/vg3/resize2 700M
lvresize -L 700M /dev/vg3/resize2
mount /dev/vg3/resize2 /mnt/rs2/ 重新挂载回来
df -lh 看系统里设备和文件系统挂载的使用情况

                                   size   used  avail  use% mounted 
mkfs.ext3 /dev/mapper/vg3-resize2   674M  812K   638M  1%  /mnt/rs2

发现size变小了,缩小成功


推荐阅读
  • 1.dd命令dd命令的全称为diskdump,对系统所有用户开放。该命令用于复制磁盘的数据块,且可在复制文件的同时指定转换的文件格式。命令选项参数说明ifFILE:输入文件名称,默 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了win7系统休眠功能无法启动和关闭的解决方法,包括在控制面板中启用休眠功能、设置系统休眠的时间、通过命令行定时休眠、手动进入休眠状态等方法。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • 随着我司的应用都开始容器化,相应的ETL流程也需要迁移到容器中。常规的SQL和shell脚本迁移之后执行基本没有问题,主要的问题在于数据接入使用kettle的场景下,kettle启 ... [详细]
  • 如何搭建服务器环境php(2023年最新解答)
    导读:本篇文章编程笔记来给大家介绍有关如何搭建服务器环境php的相关内容,希望对大家有所帮助,一起来看看吧。本文目录一览:1、怎么搭建p ... [详细]
  • FIN7后门工具伪装成白帽工具进行传播
    fin7,后门,工具,伪装,成,白, ... [详细]
  • Linux ls只显示以.qcow2结尾的文件
    ls-al|grep-Eqcow2$ ... [详细]
  • Telnet的使用(Telnet远程连接Linux)
    一、环境描述:客户端:Win10操作系统 ... [详细]
author-avatar
love四叶草health
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有