3.5.1 磁盘分区概念
linux系统磁盘分区有两种分区方式,主分区(Primary Partion)和扩展分区(extended partion)。每个磁盘设备最多四个分区,也就是说,主分区加上扩展分区的数量之和不能超过4;主分区最少1个最多4个;扩展分区可以没有,最多1个;对于大型的应用系统来说,4个分区可能无法满足需求,于是就有了逻辑分区(logical partion),它是在扩展分区下的分区,逻辑分区无分区数量限制。
磁盘的分区顺序,常有sda1/sda2/sda3/sda4,分别代表第一、二、三、四分区;当磁盘有了分区后是不能直接使用的,必须对分区进行格式化并将其挂载在系统目录上方可使用。所以,在磁盘的管理上就有了一些满足对磁盘查询查看,分区、格式化、挂载、扩容、修复等命令工具,这些工具是磁盘管理的重要技能,务必熟识。
3.5.2 磁盘管理命令
1)文件系统磁盘统计----df
作用:查看系统磁盘使用信息
参数:-h 自动选择合适单位显示磁盘大小;-i 显示磁盘iNode信息; -T显示文件系统类型。
[root@centos7 ~]# df #默认KB单位显示信息
[root@centos7 ~]# df -h #自适应单位显示磁盘信息
[root@centos7 ~]# df -i #查看磁盘的inode信息
[root@centos7 ~]# df -T #显示磁盘文件系统类型(格式)
2)目录文件容量统计----du
作用:查看目录或文件的大小
参数:-h 自动选择合适单位显示磁盘大小;-s 仅显示统计总量。
[root@centos7 ~]# du -h u.txt #查看指定文件大小
[root@centos7 ~]# du -h /home/ #列出查看home目录下文件目录大小
[root@centos7 ~]# du -sh /home #查看home目录的总大小
[root@centos7 tmp]# du -sh * #查看tmp目录下的所有文件目录大小
3)查看块设备----lsblk
作用:查看块设备详细信息
[root@centos7 ~]# lsblk #默认查看设备信息
[root@centos7 ~]# lsblk -m #显示磁盘权限属性信息
[root@centos7 ~]# lsblk -f #显示磁盘分区的文件系统类型
4)编辑分区表----fdisk
作用:编辑分区表,划分磁盘
[root@centos7 ~]# fdisk -l #列出分区表
[root@centos7 ~]# fdisk /dev/sdb #编辑分区表
编辑分区表常用参数:
m :显示菜单和帮助信息
d :删除分区
l :显示分区类型
n :新建分区
p :显示分区信息
q :退出不保存
t :设置分区号
v :进行分区检查
w :保存修改
5)格式化分区----mkfs
作用:把磁盘格式化成指定的文件系统
[root@centos7 ~]# mkfs -t xfs /dev/sda2 #将设备sda2格式化成xfs文件系统
[root@centos7 ~]# mkfs -t ext4 /dev/sdb2 #将设备sdb2格式化成ext4文件系统
6)挂载与卸载----mount / umount
作用:挂载卸载文件系统
参数:-t 执行文件系统类型;-o 指定ro(只读)/rw(读写);-a 加载分区配置。
[root@centos7 ~]# mount /dev/sdb3 /data #将sdb3分区磁盘挂载到data目录
[root@centos7 ~]# mount -o ro /dev/sdb2 /test #将只读的设备挂载到test目录
[root@centos7 ~]# mount -a #加载分区表/etc/fstab所有配置
[root@centos7 ~]# mount /dev/cdrom /mnt #将光驱挂载到mnt
[root@centos7 ~]# mount centos7.iso /mnt #将镜像挂载到mnt
[root@centos7 ~]# umount /dev/sdb2 #卸载磁盘sdb2
提示:当卸载磁盘时出现设备忙的提示,说明磁盘正在被程序使用,停止应用进程即可卸载,使用yum install -y psmisc安装fuser命令,fuser -m /dev/sdb1 就可查看使用磁盘的进程,根据进程号停止服务,kill - 9 pid。
7)扩容----resizefs/xfs_growfs
作用:扩展磁盘的容量
[root@centos7 ~]# xfs_growfs /dev/sdb1 #xfs格式非LVM扩容sdb1
[root@centos7 ~]# xfs_growfs /dev/centos/root #xfs格式LVM扩容根分区
[root@centos7 ~]# resize2fs /dev/sdb2 #ext4格式非LVM扩容sdb2
提示:扩容是一个复杂的操作过程,上面是扩容的最后扩容命令。
8)磁盘修复----fsck
作用:检查修复文件系统
[root@centos7 ~]# fsck -p /dev/sdb1 #自动检测修复文件系统错误
[root@centos7 ~]# fsck -f /dev/sdb1 #强制检查文件系统
[root@centos7 ~]# fsck -rv -t xfs /dev/sdb1 #指定xfs文件系统的交互式检查
3.5.3 fdisk磁盘分区管理实例
使用fdisk管理分区表,首先给机器加上一个新磁盘设备sdb,大小20G,下面是分区管理操作示例。
1)创建分区
使用命令fdisk /dev/sdb对sdb执行分区如下图,m是查看交互式参数命令
1 创建第一个分区sdb1,创建过程是n-->p-->1--默认-->+5G-->w。
2 创建第二个分区sdb2,创建过程是p--n-->p-->2-->默认-->+6G-->w。
3 创建一个扩展分区sdb3,创建过程是n-->e-->3-->默认-->+3G-->w。
4 创建一个逻辑分区sdb5,创建过程是n-->l-->5-->默认-->+1G-->w。
2)格式化分区
当分区创建完成后,需要对分区进行格式化
[root@centos7 ~]# mkfs -t xfs -f /dev/sdb1 #将sdb1格式化为xfs文件系统
[root@centos7 ~]# mkfs -t ext4 /dev/sdb2 #将sdb2格式化为ext4文件系统
[root@centos7 ~]# mkfs -t xfs -f /dev/sdb5 #将sdb5格式化为xfs文件系统
3)挂载分区
1 执行临时挂载,机器重启后挂载将失效
[root@centos7 ~]# mkdir /data /test /prod #创建挂载目录
[root@centos7 ~]# mount /dev/sdb5 /test #将sdb5挂载到test目录
[root@centos7 ~]# mount /dev/sdb2 /prod #将sdb2挂载到prod目录
[root@centos7 ~]# mount /dev/sdb1 /data #将sdb1挂载到data目录
2 永久挂载,将挂载配置写到fstab文件
将需要挂载的配置写入/etc/fstab中,执行mount -a 加载配置。
[root@centos7 ~]# vi /etc/fstab
添加下载挂载配置
/dev/sdb5 /test xfs defaults 0 0
/dev/sdb2 /prod ext4 defaults 0 0
/dev/sdb1 /data xfs defaults 0 0
保存后
[root@centos7 ~]# mount -a
4)卸载分区
卸载分区可以直接使用umount卸载,当有进程正在使用该磁盘时,无法成功卸载;必须停止占用磁盘的进程方能正常卸载,其中fuser命令可以查看到占用磁盘的进程,然后停止该进程即可执行卸载。
[root@centos7 ~]# umount /dev/sdb5 #卸载sdb5
[root@centos7 ~]# yum install -y psmisc #安装fuser命令
[root@centos7 ~]# fuser -m /dev/sdb5 #查看正在使用磁盘的进程
[root@centos7 ~]# kill -9 12356 #强制停止该pid进程
[root@centos7 ~]# umount /dev/sdb2 #卸载sdb2
3.5.4 LVM逻辑卷概念
1)LVM概念
LVM(Logical volume Manager)是逻辑卷管理的简称,它是磁盘分区的一种管理机制,将多个存储设备统一管理成一种逻辑磁盘设备,划分逻辑卷磁盘分区,并允许动态调整逻辑卷分区的大小。LVM创建中主要使用下面几个概念。
PV(Physical Volume):物理卷是逻辑存储块设备,它与底层的磁盘设备或分区是逻辑对应关系。
VG(Volume Group):卷组是逻辑概念上的磁盘,由一个或多个物理卷组和而成。
PE(Physical Extent):物理域是将物理卷组合成卷组后划分的最小存储单位,默认是4MB。
LV(Logical Volume):逻辑卷是逻辑上的磁盘分区。
2)LVM命令工具
1 pvcreate / pvdisplay / pvremove
作用:创建/查看/删除物理卷,pvcreate本质是对磁盘或分区进行初始化
[root@centos7 ~]# pvcreate /dev/sdb{1,2,3} #创建物理卷
[root@centos7 ~]# pvscan #列出查看物理卷
[root@centos7 ~]# pvdisplay #查看详细物理卷信息
[root@centos7 ~]# pvremove /dev/sdb{1,2,3} #删除物理卷
2 vgcreate / vgdisplay / vgextend / vgremove
作用:创建/查看/扩展/删除卷组
[root@centos7 ~]# vgcreate lidao_vg1 /dev/sdb1 /dev/sdb2 #创建卷组lidao_vg1
[root@centos7 ~]# vgscan #列出查看卷组
[root@centos7 ~]# vgdisplay #查看卷组详情
[root@centos7 ~]# vgextend lidao_vg1 /dev/sdb3 #给卷组lidao_vg1增加物理卷扩容
[root@centos7 ~]# vgremove lidao_vg1 #删除卷组lidao_vg1
3 lvcreate / lvdisplay / lvextend / lvremove
作用:创建/查看/扩展/删除逻辑卷
参数:-L 指定逻辑卷大小;-n 指定逻辑卷名称
[root@centos7 ~]# lvcreate -L 3G -n data_lv1 lidao_vg1 #创建3G的逻辑卷data_lv1
[root@centos7 ~]# lvscan #列出查看逻辑卷
[root@centos7 ~]# lvdisplay #查看逻辑卷详情
[root@centos7 ~]# lvextend -L +5G /dev/lidao_vg1/data_lv1 #给逻辑卷data_lv1扩容5G
[root@centos7 ~]# lvremove /dev/lidao_vg1/data_lv1 #删除逻辑卷data_lv1
3.5.5 LVM分区管理实例
lvm创建过程:创建pv--->创建vg--->创建lv--->格式化lv--->挂载lv
lvm扩容过程:增加pv----加入vg---扩容lv--->更新文件系统
lvm删除过程:卸载lv--->删除lv--->删除vg--->删除pv
1)创建lvm分区实例
限于本机电脑磁盘的大小,这里使用一个20G大小的磁盘sdb作为实例磁盘,首先创建四个分区sdb1/sdb2/sdb3/sdb4,使用前两个磁盘分区创建一个逻辑卷组vg_ops,然后从该卷组中创建两个逻辑卷ops_app、ops_web,并执行格式化和挂载。
1 创建分区
[root@centos7 ~]# fdisk /dev/sdb
n-->p-->1-->默认-->+5G;n-->p-->2-->默认-->+4G;n-->p-->3-->默认-->+5G;n-->p-->4->默认-->+4G--->w。
创建四个分区过程如下图:
2 创建卷组
这里使用sdb1和sdb2两个磁盘来创建卷组vg_ops,具体步骤如下:
[root@centos7 ~]# pvcreate /dev/sdb1 /dev/sdb2
[root@centos7 ~]# vgcreate vg_ops /dev/sdb1 /dev/sdb2
3 创建逻辑卷
使用vg_ops卷组创建两个逻辑卷ops_app、ops_web步骤如下:
[root@centos7 ~]# lvcreate -n ops_app -L 3G vg_ops
[root@centos7 ~]# lvcreate -n ops_web -L 3G vg_ops
4 格式化与挂载
将ops_web卷格式化成ext4格式文件系统,将ops_app格式化成xfs格式文件系统,并将其分别挂载到web、app目录
[root@centos7 ~]# mkfs -t ext4 /dev/vg_ops/ops_web
[root@centos7 ~]# mkfs -t xfs -f /dev/vg_ops/ops_app
[root@centos7 ~]# mkdir /web /app
[root@centos7 ~]# mount /dev/vg_ops/ops_web /web
[root@centos7 ~]# mount /dev/vg_ops/ops_app /app
[root@centos7 ~]# df -Th
2)lvm分区扩容实例
lvm分区扩容有两种情况,一种是vg卷组容量不足,一种是lv逻辑卷容量不足,下面统一扩容。将新磁盘或分区加入到卷组,执行卷组扩容命令即可;逻辑卷大小调整,需要执行逻辑卷扩容命令,并且要执行更新到文件系统才会生效。下面是扩容操作实例。
1 卷组扩容
将sdb3磁盘分区添加到vg_ops卷组中,首先使用pvcreate初始化,然后用vgextend进行扩容。
[root@centos7 ~]# pvcreate /dev/sdb3
[root@centos7 ~]# vgextend vg_ops /dev/sdb3
[root@centos7 ~]# vgdisplay vg_ops
2 逻辑卷扩容
逻辑卷扩容,首先查看所在卷组的容量是否还能满足需求,若卷组容量不足则先扩容卷组(如上);在卷组能够满足逻辑卷扩容需求时,按照下面步骤执行lv扩容,先试用lvextend扩容逻辑卷ops_web和ops_app,然后根据文件系统格式选择合适的更新命令,相当于对新增空间的格式化,ext4格式使用resize2fs,xfs格式使用xfs_growfs。
[root@centos7 ~]# lvextend -L +2G /dev/vg_ops/ops_web
[root@centos7 ~]# lvextend -L +2G /dev/vg_ops/ops_app
[root@centos7 ~]# resize2fs /dev/vg_ops/ops_web
[root@centos7 ~]# xfs_growfs /dev/vg_ops/ops_app
[root@centos7 ~]# df -Th
3)删除lvm实例
当逻辑卷分区不再使用时,可以删除以释放磁盘设备。删除时要先卸载文件系统,接着删除逻辑卷,然后删除卷组,最后清理物理卷,这个顺序与创建时顺序相反。
[root@centos7 ~]# umount /dev/vg_ops/ops_web
[root@centos7 ~]# umount /dev/vg_ops/ops_app
[root@centos7 ~]# lvremove /dev/vg_ops/ops_web
[root@centos7 ~]# lvremove /dev/vg_ops/ops_app
[root@centos7 ~]# vgremove vg_ops
[root@centos7 ~]# pvremove /dev/sdb{1,2,3}
3.5.6 非LVM磁盘分区扩容
当一个磁盘分区未使用lvm分区挂载时,能否扩容取决于所在磁盘设备空间大小,如果容量有剩余,则可以给该区扩容。现在有磁盘设备sdb大小20G,当前分区有一个xfs格式的sdb1大小5G,挂载在/test目录,由于业务量的增加,当前磁盘分区sdb1无法满足需求,需要给sdb1在线扩容。下面是非lvm分区sdb1的扩容操作步骤。
[root@centos7 ~]# fdisk /dev/sdb
sdb分区操作 p--->d--->1--->n--->p--->1--->2048--->+10G--->w
[root@centos7 ~]# partprobe /dev/sdb
[root@centos7 ~]# xfs_growfs /dev/sdb1
[root@centos7 ~]# df -Th
本节磁盘分区知识,是日常磁盘管理的重要技能。除了学习上面的实例外,也要去研究不同环境状态下磁盘管理,比如把传统分区改为lvm分区、多个磁盘设备共建lvm、扩容根分区等,在测试环境中多多练习,探索多种可能性。俗话说,测试多流汗,生产少流泪,当面对不确定的情况时,必须充分测试验证后才可上生产。