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磁盘管理的一些个人总结经验,如果觉得写不错,点个赞,你的举手之劳是我强大的动力
版权归原作者 shirleysman 所有, 如有侵权,请联系我们删除。