热门标签 | 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变小了,缩小成功


推荐阅读
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本文介绍了如何通过安装 rpm 包来使用 resize2fs 和 ext2online 工具进行系统文件的扩容。提供了详细的步骤和注意事项。 ... [详细]
  • macOS SwiftUI 组件之 实用下拉菜单 (教程含源码)
    macOS SwiftUI 组件之 实用下拉菜单 (教程含源码) ... [详细]
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
  • 本文介绍了在 iOS 开发中设置图片和视图圆角的几种方法,包括通过 layer 设置圆角、使用贝塞尔曲线和 Core Graphics 框架,以及使用 CAShapeLayer 和 UIBezierPath。每种方法都有其优缺点,适用于不同的场景。 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • Ubuntu 22.04 安装搜狗输入法详细指南及常见问题解决方案
    本文将详细介绍如何在 Ubuntu 22.04 上安装搜狗输入法,并提供常见问题的解决方法。包括下载安装包、更新源、安装依赖项等步骤。 ... [详细]
  • 探讨PHP中不同文件读取方法的性能差异,特别是针对大文件的处理。 ... [详细]
  • Leetcode学习成长记:天池leetcode基础训练营Task01数组
    前言这是本人第一次参加由Datawhale举办的组队学习活动,这个活动每月一次,之前也一直关注,但未亲身参与过,这次看到活动 ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • 本文深入解析了Linux系统中常用的文件和目录操作命令,包括但不限于`ls`、`cd`等。通过详细讲解每个命令的功能、语法及应用场景,帮助读者掌握这些基本工具的使用方法,提升在Linux环境下的操作效率。此外,文章还介绍了如何结合选项和参数来实现更复杂的文件管理任务,为初学者提供了丰富的实践示例和技巧。 ... [详细]
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社区 版权所有