一文搞懂linux磁盘管理以及各场景扩容需求(实操)
Linux常见磁盘分类
在linux上面,我们经常见到sda,sdb,hda,hdb这样的磁盘显示,sd,hd表示硬盘,sd表示硬盘是scsi接口, a表示第一块插槽盘,b表示第二块插槽盘,hd表示硬盘是IDE接口,同理a表示第一块插槽盘,b表示第二块插槽盘
Linux磁盘分区
|分区格式| 支持最大磁盘容量 | 支持分区数量
|MBR|2TB|4个主分区或者3个主分区和1个扩展分区(扩展分区下可以有多个分区)
|GPT |18EB |不限制分区数量
目前linux磁盘常见的还是MBR模式,那sda1就表示scsi接口的第一个插槽下硬盘的第一个分区(其实真正的第一个分区被相应分区模式的分区表所占用)
LVM模式磁盘管理
LVM 逻辑卷管理,是对磁盘以及磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,建立在硬盘和分区之上,文件系统之下的一个逻辑层,基于物理设备创建管理模式,可以提高磁盘和分区管理的灵活性,基于lvm可以实现文件系统的动态扩容
理解LVM模式,只需搞清楚三个概念即可:
PV:Physical Volumes,物理卷,他可由我们磁盘或者磁盘分区创建而来
VG:Volume Groups,卷组,可以从我们创建的PV直接创建VG,也可以将新创建的PV添加到我们现有的VG,可以把它理解成为一个比较大的数据盘池,可以动态任意添加
LV:Logical Volumes,逻辑卷,从VG创建而来,相当于给实际挂载点(/data)提供底层存储介质,mount给实际挂载点。
以下为手画的简图,可以很好理解一整个磁盘管理:
相关解释:
- PV的创建我们可以直接从磁盘创建,也可以对磁盘进行分区然后从分区创建。
既然可以直接从磁盘创建PV,那为什么我们还要先进行分区然后在创建PV呢?
试想一下如果服务器只有一个插槽,但是我们需要对磁盘上的数据进行业务区分,并且需要防止磁盘的意外损坏而带来的一整个数据盘的无法访问,我们就可以先进行分区,不同的的分区做不一样的数据隔离 - 同一个VG中可以添加来自不同磁盘直接创建的PV,以及来自不同磁盘下的分区创建的PV,不同VG中甚至可以存在来自相同磁盘的不同分区创建的PV,可能更好的能理解LVM管理的灵活性
- LV从VG创建,最终格式化挂载给文件系统,所以文件系统的的扩容其实就是LV的扩容,LV的扩容只能基于所属的VG的容量剩余来判定
- 磁盘或者磁盘下的分区我们也可以直接进行格式化并直接挂载给文件系统,但是不同于lvm管理磁盘对扩容需求的灵活性
LVM模式磁盘管理实操
- [ vmware创建centos7虚拟机]
- [ 基于LVM模式创建一个文件系统]
- [ 各场景下的文件系统扩容]
vmware创建centos7虚拟机
首先我们从vmware安装一个centos虚拟机分配磁盘开始,先按照如下步骤在vmware创建一个centos虚拟机,我安装的是vmware10,高版本的大致步骤也不会有变化,只是可能界面有所不一样
选择典型
选择稍后安装操作系统
选择操作系统以及版本(此项只是为了vmware给此创建虚拟机分配一个默认的cpu以及内存)
填写虚拟机名称以及选择虚拟机文件目录
选择给此虚拟机分配的磁盘大小以及磁盘文件模式
确认信息,点击完成
点击此处选择linux启动光盘镜像文件位置
选择使用ISO镜像,选择位置,点击确认,并且开启虚拟机
可选第一项和第二项
选择安装过程语言11. 点击安装位置,我们需要选择手动分区,否则他vmware用光磁盘
点击网络和主机名,打开网络开关,并且配置主机名
选择我要配置分区并且点击完成,进入创建分区页面(此处我们可以看到vmware默认创建的磁盘为scsi接口类型)
点击+号,我们依次创建三个挂载点分为为/ , /boot ,swap即可,容量分别为10G,200MB,1G,即可点击完成,点击接受更改,点击开始安装,如图
设置root密码以及创建普通用户以及设置密码,等待安装完成并且重启
启动完成后,登录linux,ip addr 查看ip地址,用ssh工具连接完成
- 系统安装完成,从sda创建了两个分区sda1,sda2
- 该磁盘sda大小以及拥有扇区(磁盘存储最小逻辑单元)个数
- sda磁盘分区格式为MBR
- 各分区详细信息以及以及开始扇区和结束扇区位置,以及分区的格式,看到第一个分区sda1从第2048扇区分配大小,其实2048之前的扇区属于MBR分区表,sdb2结束扇区位置并非磁盘总扇区大小,可以判断此磁盘还有剩余空间,结合1中也可以看到此磁盘还有空间剩余
- PV列表,以分区sda2创建了一个PV,PV大小11G
- VG列表,VG中PV个数,以及属于这个VG的LV个数,以及VG大小
- LV列表,LV所属VG,LV大小
- LV详细信息,大小和所拥有扇区个数
命令总结:
#查看系统块设备
lsblk
#查看系统磁盘详细信息
fdisk -l
#查看pv列表
pvs
#查看vg列表
vgs
#查看lv列表
lvs
基于LVM模式创建一个文件系统
前面说过基于lvm模式创建文件系统需要从lv创建,lv属于vg,vg从pv创建而来,那么首先我们需要创建pv,在vmware上面我们给机器添加两块10G磁盘备用,重启机器
此处我们可以看到新加的两块10G磁盘sdb,sdc,以下我们创建一个15G的文件系统/data为列,有两种办法,如下:
1.以sdb,sdc创建pv,从sdb,sdc创建的pv创建vg,在新的vg创建lv,再格式化创建文件系统,这样的话两块磁盘都会被全部用掉,并且vg中会有5G剩余
2.sdb创建pv,sdc创建一个5G分区并创建pv,以这两个pv创建vg,在新的vg创建lv,再格式化创建文件系统,这样的话sdc磁盘会有5G剩余
这里我们采用第二种方法,磁盘的5G另做他用,步骤如下:
先对sdc进行分区:
此处我们可以看到在sdc上面新建了一个分区sdc1,分区格式为linux lvm模式
现在创建pv,vg,lv以及挂载文件系统
命令总结:
#以 /dev/sdb /dev/sdc1两个磁盘设备创建pv
pvcreate /dev/sdb /dev/sdc1
#从/dev/sdb /dev/sdc1两个pv创建datavg
vgcreate datavg /dev/sdb /dev/sdc1
#从datavg创建名为datalv的lv
lvcreate -n datalv -L 14.5G datavg
#格式化datalv为xfs文件系统
mkfs.xfs /dev/datavg/datalv
#挂载文件系统
mount /dev/datavg/datalv /data
各场景下的文件系统扩容
模拟两种情况:
- 磁盘或者分区格式化后直接挂载了文件系统/data01和/data02,对现有文件系统/data01和/data02扩容
- 现有vg中有剩余容量,可直接对vg中的lv进行扩容
- 现有vg无法满足扩容需求,该vg中现有pv从磁盘和分区创建而来,只能对pv所属的磁盘进行扩容
- 现有vg无法满足扩容需求,需要添加磁盘对文件系统扩容
模拟1
磁盘或者分区格式化后直接挂载了文件系统/data01和/data02,对现有文件系统/data01和/data02扩容
我们先添加两块磁盘分别为1G的sdd和5G的sde,将sdd直接挂载文件系统/data01,sde分区1设置1G直接挂载文件系统/data02
sdd直接挂载文件系统:
命令总结:
#直接格式化磁盘为xfs文件系统mkfs.xfs /dev/sdd
#挂载文件系统(前提挂载点/data01已经创建)
mount /dev/sdd /data01
sde创建分区1,挂载文件系统/data02(和上面创建分区不同地方在于无需修改分区格式,采用默认即可)
命令总结:
#直接格式化磁盘为xfs文件系统mkfs.xfs /dev/sde1
#挂载文件系统(前提挂载点/data01已经创建)
mount /dev/sde1 /data02
#查看文件系统
df -Th
然后我们在vmware上面把两块磁盘都扩大1G,sdd扩大到2G,sde扩大到6G(需要关机操作然后重启),此时扩容的前置条件已具备
我们看到相应的磁盘大小已经改变,但是文件系统没有改变大小,执行以下操作扩容
首先磁盘或者分区的直接挂载文件系统的扩容需要借助一个扩容工具来实现,执行以下安装扩容工具
#获取阿里yum base源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
#安装wget工具
yum install -y wget
#获取阿里epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#安装扩容工具
yum install -y cloud-utils-growpart cloud-init
注意点安装完工具需要修改/etc/ssh/sshd_config配置文件打开配置项并且重启sshd服务,否则无法ssh工具密码登录(该配置项为安装完工具后关闭)
PasswordAuthentication yes
systemctl restart sshd
扩容sdd磁盘直接挂载的/data01文件系统
命令总结:
#扩容文件系统(文件系统格式为xfs,ext文件系统为resize2fs /dev/sdd)xfs_growfs /data01
扩容sde1直接挂载的文件系统/data02
命令总结:
#确保系统语言格式为中文
LANG=en_US.UTF-8
#将/dev/sde磁盘未分区部分全部扩容给该磁盘的第一个分区
growpart /dev/sde 1
#扩容文件系统(文件系统格式为xfs,ext文件系统为resize2fs /dev/sde1)
xfs_growfs /data02
模拟2
现有vg中有剩余容量,可直接对vg中的lv进行扩容
lvm模式创建文件系统中我们看到/data文件系统的lv datalv所属vg datavg还有504m 剩余,那么我们就可以直接对datalv进行扩容,然后扩容/data文件系统
因为扩容的100M对15G来说较小,所以这里显示不明显,从执行效果来看大小已经更改了
命令总结:
#对lv扩容100M,命令执行会找相应属于的vg,并且检查vg所剩容量是否够用lvextend -L +100M /dev/datavg/datalv#文件系统扩容(文件系统格式为xfs,ext文件系统为resize2fs /dev/datavg/datalv)xfs_growfs /data
模拟3
现有vg无法满足扩容需求,该vg中现有pv从磁盘和分区创建而来,只能对pv所属的磁盘进行扩容
我们使用先前的以lvm模式创建的文件系统所使用的的磁盘为例
两块10G磁盘sdb,sdc,sdb10G和sdc的分区sdc1 5G创建了pv,在此之上创建了vg,在此vg中创建了15G lv,并且格式化挂载给了文件系统/data
现在我们需要对/data文件系统从15G扩容至35G,现在还缺少20G,我们看到上面sdc中还有5G并未使用,并且所属vg容量不可以满足需求,并且现在我们只能对sdb和sdc进行扩容,我们将sdb扩大10G为20G,sdc扩大10G为15G,加上之前磁盘5G未使用正好10G未使用,总量20G满足需求,操作vmware 关机虚拟机,进行磁盘扩容
我们看到磁盘大小已经更改,但是所属于pv大小并没有改变,这边有两种办法进行扩容
- 将sdc再进行分区,将加进来的磁盘容量以及之前的剩余容量分为一个分区10G并且创建pv加入datavg,然后扩容lv,扩容文件系统
- 扩容原有的sdc1,扩容pv,vg就会自动扩容
以上两种办法首先都需要扩容pv sdb,pv扩容完成后,vg容量会自动扩容,无需操作,我们选用第二种办法,因为分区然后创建pv加入vg在lvm模式创建文件系统中已经介绍
命令总结:
#设置系统语言
LANG=en_US.UTF-8
#扩容分区,将sdc剩下容量全部分配给sdc第一个分区
growpart /dev/sdc 1
#扩容pv sdc1
pvresize /dev/sdc1
#扩容pv sdb
pvresize /dev/sdb
#扩容lv大小20G
lvextend -L +20G /dev/datavg/datalv
#文件系统扩容(文件系统格式为xfs,ext文件系统为resize2fs /dev/datavg/datalv)
xfs_growfs /data
模拟4
现有vg无法满足扩容需求,需要添加磁盘对文件系统扩容
接着模拟3,现有文件系统/data35G需要扩容至40G,实际场景可能是sdb,sdc大小已经扩容至MBR分区表的最大容量限制2TB,此时就要新加磁盘并创建pv加入datavg,扩容lv,扩容文件系统(当然新加的磁盘是无法扩容至现有磁盘的,那么基于lvm的vg磁盘管理池,就相当于把新加的磁盘在逻辑上扩容至现有的磁盘了),我们关机虚拟机,操作vmware,添加磁盘一个5G磁盘
下面进行扩容操作
命令总结:
#创建pv /dev/sdf
pvcreate /dev/sdf
#扩容vg,向vg添加一个新的pv /dev/sdf
vgextend datavg /dev/sdf
#扩容lv增加5G
lvextend -L 5G /dev/datavg/datalv
#文件系统扩容(文件系统格式为xfs,ext文件系统为resize2fs /dev/datavg/datalv)
xfs_growfs /data
以上就是就是linux磁盘管理的一些个人总结经验,如果觉得写不错,点个赞,你的举手之劳是我强大的动力
一文搞懂linux磁盘管理以及各场景扩容需求(实操)相关推荐
- 一文搞懂Linux 内存管理原理
导语 linux 内存是后台开发人员,需要深入了解的计算机资源.合理的使用内存,有助于提升机器的性能和稳定性.本文主要介绍 linux 内存组织结构和页面布局,内存碎片产生原因和优化算法,linux ...
- 一文搞懂Linux内核怎么提升UDP收包的效率
现在很多人都在诟病Linux内核协议栈收包效率低,不管他们是真的懂还是一点都不懂只是听别人说的,反正就是在一味地怼Linux内核协议栈,他们的武器貌似只有DPDK. 但是,即便Linux内核协议栈收包 ...
- 一文搞懂 | Linux 驱动的来龙去脉
驱动相关的学习资料网上很多,但大部分都是碎片化的记录,很少有系统化的总结整理.本文旨在系统化的讲清楚 Linux 驱动的来龙去脉.先从总线,设备,驱动介绍内核对于驱动的模型设计:然后引入设备树的概念, ...
- 一文搞懂linux的proc文件
目录 proc文件夹是干嘛用? proc下都有什么系统信息? /proc/bus /proc/buddyinfo /proc/cgroups /proc/cmdline /proc/consoles ...
- fseek linux 大文件_一文搞懂Linux系统开发
文章目录 Linux系统开发会用到什么? C语言基础 shell脚本 慢慢学会使用Makefile 常规Linux系统编程知识都有什么?哪些常用?哪些不常用? 常规Linux编程知识 文件IO 文件与 ...
- 一文搞懂Linux系统开发
列一下Linux系统开发要掌握的知识. 欢迎关注我的微信公众号:fensnote 文章目录 Linux系统开发会用到什么? C语言基础 shell脚本 学会使用Makefile 常规Linux系统编程 ...
- 一文搞懂linux时间片,硬件时钟,软件时钟,实时时钟,时间中断,墙上时间
时间片: 时间片是一个数值,它表明程序在被抢占前所持续运行的时间. 相对时间绝对时间区别: 如果某个时间在5s后呗调度执行,那么系统所需要的不是绝对时间,而是相对时间(比如,相对现在5s后): ...
- linux程序打桩,一文搞懂linux的库打桩
Linux下的链接器支持一个强大的库打桩(library interpositioning),允许你阻拦对系统标准库中某个目标函数的调用,取而代之执行自己的包装函数.它可以给我们带来两个好处,一是通过 ...
- 一文搞懂Linux系统内核升级及下载当前内核源代码
1. 下载当前内核源代码 为什么下载内核源代? 一是便于查看或学习linux内核代码的底层实现方法: 二是便于编写或调试Linux设备驱动程序,因为驱动程序的编译需要内核源代码. 怎么下载? 如果你是 ...
- 一文搞懂Linux rm命令 删除文件/文件夹
文章目录 一 rm命令简介 二 rm命令通用格式 三 使用示例 删除文件/文件夹 3.1 rm删除文件 3.2 rm删除文件夹 四 总结 一 rm命令简介 rm命令是Linux系统的一个命令.rm命令 ...
最新文章
- profibus 主站软件_SIMATIC S71500与TIA博途软件的使用连载63
- ruhr启动mysql数据库_Mysql表类型(存储引擎)的选择
- 生产环境 direct path read 与log file sync等待事件问题处理
- 视讯稳定对接出现的问题
- 低解密指数攻击_CTF中RSA的一些攻击思路
- 2021-08-08 事务的提交,回滚
- CM311-1_YST_S905L3(B)_安卓9.0_设置无密码_默认打开adb_完美AI语音_线刷固件包
- 农村土地确权之调查公示 —— ArcGIS中地块分布图标注设置说明[地块分布图制作]
- 生活心语--幸福在哪里
- 谷歌浏览器如何配置SSL证书
- 中国社会科学院大学与美国杜兰大学金融管理硕士项目—在光阴的故事里慢慢说着永远
- android zooming bitmap
- 《读者》的“卷首语” (二)
- 2011年全球手机市场十大事件
- 数据挖掘实战(2)——糖尿病数据集(回归问题)
- python爬取京东手机参数_python爬虫——分页爬取京东商城商品信息(手机为例)...
- 手机如何测光照度_如何3分钟学会用手机的专业模式拍照?
- 【排故篇】_啥是无效对象,出现时如何破?
- 电力电子技术:电力电子器件
- el-select下拉框不同证件类型校验思路
热门文章
- 基本的ps快捷键(图文)
- jquery ajax回调函数带入参数
- 扁球 matlab,扁球体表面积计算公式
- 我的世界java1.16.3村庄种子,我的世界基岩版1.16种子
- 华为路由器配置命令——【简单实用的华为路由器配置命令】
- 8.《创业邦》:十大创业困境
- 台式计算机主板接口识别,硬件丨当前台式机主板接口知识普及与主板结构全讲解...
- 小米、红米手机如何打开开发者模式,如何测试安装App
- 如何用计算机做牛顿迭代公式,牛顿迭代法
- 如何在DOS命令窗口中进入D盘?