磁盘管理体系架构;
磁盘选型;
磁盘分区,格式化,挂载;
磁盘swap;
磁盘分区的方案;
磁盘管理指令;
磁盘相关故障案例:磁盘空间不足;
======================================================================
磁盘分类:
机械硬盘:HDD,里边有电机,无空气(有的会充稀有气体),电机带动磁盘高速旋转,读取数据;
固态硬盘:SSD,集成电路与芯片,存储芯片;
======================================================================
接口分类:类似于水壶的壶嘴,影响磁盘的读写速度;不同的类型有不同的读写速度,
SATA:中间被隔开了,一边传数据,一边接电源,短的接数据,长的接电源;机械盘一般用这个接口,也有固态盘;一般家用;
SAS:机械固态盘都有,给企业环境使用;接口类似于SATA,也是一长一短,SAS中间没有断开,中间是连着的;
PCI-E:速度最快,固态硬盘用;这种接口一开始给网卡\显卡用,后来用作硬盘;很占空间;企业级使用;
m.2 NVME:笔记本用的,固态硬盘接口;性能也比较快,也省空间;
======================================================================
固态硬盘存储颗粒:
SLC,MLC,TLC
TLC最便宜,然后MLC,SLC,企业多用。
======================================================================
RAID:磁盘冗余阵列,管理磁盘方式.
使用raid,1)可以获得更高的容量,2)更快的速度,更高的性能;3)更高的冗余(安全).
但上述三个特性,无法同时都满足;
======================================================================
RAID级别:就是对这些硬盘的管理方式的选择;
常用级别:
--------------------------------------------------------------------------------------------
0:条带,串联,最少1块硬盘,安全冗余:最低,可用容量:所有硬盘的和,性能:读写最快,使用场景:不要求安全,只要求速度;举例:数据库从库存储从库web服务器;
--------------------------------------------------------------------------------------------
1:镜像;只能有2块盘;安全冗余:100%;可用容量:一半(两块容量之和),性能:写入速度慢,读取OK;使用场景:只追求安全性,对于速度没;举例:系统盘,监控服务器;
--------------------------------------------------------------------------------------------
5:最少3块盘,安全冗余:最多损坏1块盘;可用容量:损失1块硬盘的容量;性能:写入性能不好,读取OK;使用场景:对于速度安全,对于速度要求不高;使用场景:普通数据库,存储访问量不高;
--------------------------------------------------------------------------------------------
10:最少4块盘;安全冗余:可以损坏一半;可用容量:损失所有硬盘一半的容量;性能:读写很快;使用场景:对于安全和性能都要;举例:高并发或高访问量数据库主库 存储;
======================================================================
磁盘分区
MBR,GPT;两种方式,统称磁盘引导程序;
MBR:只能支持2T以内的硬盘;大于2T,只识别2T空间;且有主分区,扩展,逻辑分区;对应的命令fdisk/parted;
GPT:支持大容量的硬盘;主分区可以无限使用;一百多个主分区;对应的命令:parted/gdisk;
注意:parted的命令,都是时时生效的;比较危险;
fdisk和gdisk操作类似,只是针对的盘不一样。
---------------------------------------------------------------------------------------------------------------------------------
MBR分区:每一块硬盘上存放磁盘引导程序,引导程序在磁盘开头部分,用于引导系统启动。我们一般不用太关注,
我们安装系统的时候自动安装
位置:磁盘分区表,磁盘的开始部分:0磁头,0磁道,1扇区(512字节);
这512字节放了俩东西:
引导程序,446bytes(MBR);
磁盘分区表,64bytes;
分区结束标识2字节:55AA;
分区表64字节,每个分区占16字节,最多4个分区;
这4个分区,叫主分区;
扩展分区是用于解决主分区数量只能有4个的问题,扩展分区无法直接使用,需要在扩展分区下面创建逻辑分区,逻辑分区用来存放数据;
GPT分区详解:https://blog.csdn.net/li33293884/article/details/50562527
<<大话存储>>,有精力可以看看;
======================================================================
磁盘及分区的命名
磁盘文件或分区文件放在/dev/下面
命名方式如下
sda:SAS,STAT,SCSI;a就是第一块硬盘;
vda:虚拟机,云;a就是第一块硬盘;
分区命名:
主分区+扩展分区,从1-4;
逻辑分区从5开始;
例:硬盘及分区命名
第2块SATA硬盘的第1个主分区 /dev/sdb1
第3块SAS硬盘的第2个逻辑分区 /dev/sdc6
第5块公有云的云盘的第3个主分区 /dev/vde3
======================================================================
加硬盘分区使用操作步骤:
加一块硬盘;
分区操作;
创建文件系统(格式化);
挂载(给设备设置一个入口,如果不挂载,设备就无法访问使用,类似于没门没窗);
-----------------------------------------------------------------------------------------
看实例:先准备环境:
Vmware添加2块硬盘,大小随便;
查看磁盘信息:
fdisk -l | grep '/dev/sd'
案例1:创建20Mb的分区;
//查看磁盘,进入交互式方式
# fdisk /dev/sdb //输入命令后就可以操作磁盘了,一般就是增删改查
p //print,输出磁盘分区信息;
n //new,增加,创建分区;
d //delete 删除分区
w //保存并退出
q //quit,退出不保存
n //输入n,会提示p或e的选择,主分区和扩展
p //默认就是p,可以直接回车;
1 //这一步让选择分区号,默认主分区就是1-4,选择默认就可以;
起始扇区 //这一步让选择起始扇区,默认就行
+20M //这一步让选择分区大小,Last 扇区,可以是K,M,G,输入这一步,就结束了;可以保存退出了;
//温馨提示:fdisk操作的时候,按删除键会出现无法删除现象,使用 ctrl+u 或 ctrl+删除键 即可删除
# ll /dev/sdb* //查看磁盘生效没
-----------------------------------------------------------------------------
案例2:创建一个分区使用硬盘所有空间
创建分区哪一步,输入n后,一路回车,就是使用了磁盘所有空间;
======================================================================
要想使用磁盘,分区完还需要接着格式化,挂载后,才能使用。
格式化: 创建 make 文件系统 filesystem
mkfs 创建文件系统
mkfs 磁盘或分区
mkfs.xfs /dev/sdb1 //.,点后的xfs,文件系统格式,也可以写成mkfs -t xfs
mkfs.xfs /dev/sdb //如果没有划分分区,直接上硬盘名也行
//格式化时候,系统会自动创建inode和block
//-f,强制选项,如果格式化时候,磁盘有一个文件系统了,就需要加上否则无法格式化,提式你有一个文件系统了
mkfs.ext4
======================================================================
挂载
挂载:给设备指定入口
使用方法:mount 设备 入口
入口:挂载点,一般就是个空目录;
mount /dev/sdb1 /mnt //这就挂载上了,临时挂载
//检查
df -h //查看有没有这个磁盘的挂载信息,有就成功了
//卸载
umount 入口
umount /mnt
选项:-lf,强制卸载
------------------------------------------------------------------------------------------
永久挂载
永久挂载的话,就别用/mnt目录了;
法1,挂载命令 mount /dev/sdb1 /data/ 写入到/etc/rc.local,入口最好写绝对路径;
法2,写入到开机自动挂载文件/etc/fstab; filesystem table文件系统的挂载表;
/etc/fstab每一列含义:
[root@web01 ~]# cat /etc/fstab
/dev/mapper/centos-root / xfs defaults 0 0
第一列:设备名字/dev/sdb1或UUID形式,UUID就是每个设备的唯一标识号码;
//blkid可以查看UUID;
第二列:挂载点;
第三列:文件格式,文件系统类型,常见的xfs/ext4;
第四列:defaults,一般都是defaults,是挂载参数,挂载选项;
第五列:0,是否备份;
第六列:0,是否检查;
本例的内容就这样写:
/dev/sdb1 /data/ xfs defaults 0 0
//书写时候注意,平时用空格分隔,总是重启失败,用tab键分隔,就可以正常重启挂载;
挂载光盘
mount /dev/cdrom /mnt/ //挂载后会提示,只能读,不能写;
ls -l /mnt/Packages/*.rpm |wc -l //查看多少安装包
---------------------------------------------------------------------------
扩展,随后研究LVM如何实现动态扩展分区空间.lvm逻辑卷;
逻辑卷使用建议:
优点:可以动态调整分区大小;
缺点:软件实现,效率较低;
工作中可以搭配raid+lvm使用,来提高些效率;
或者直接raid部署系统,不使用lvm;
======================================================================
下面介绍parted命令
案例:创建GPT分区,大小10MB
//查看
parted /dev/sda print
//进入交互模式操作:
parted /dev/sdc //这就进入磁盘了
(parted) print //查看信息
//创建分区表gpt格式,或者mklabel gpt一样,注意,mbr叫做msdos类型
(parted) mktable gpt
//创建分区10mb
(parted) mkpart primary 0 10
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? i
//删除分区
(parted) rm 1
(parted) p
//退出编辑
q或quit
======================================================================
SWAP
swap:交换分区,内存不足时,临时充当内存,占用的磁盘空间;
案例:服务器运行java程序,突然占用大量内存,以至于占用swap空间了;如何解决?
第一,保证网站正常,增加swap空间;
第二,联合开发一起排查导致这样的原因;
-------------------------------------------------------------
实例演示如何创建添加挂载SWAP
创建SWAP:
1,创建指定大小的文件;比如1G;
2,把文件转化为swap;
3,激活这个swap,把它加入到Linux中;
4,记得配置永久挂载;
1,创建指定大小的文件
dd if=/dev/zero of=/tmp/1g bs=1M count=1024
[root@web01 ~]# ll -h /tmp/1g
[root@web01 ~]# file /tmp/1g
/tmp/1g: data
2,把文件转化为swap;类似于格式化
mkswap /tmp/1g
[root@web01 ~]# file /tmp/1g
/tmp/1g: Linux/i386 swap file (new style), version 1 (4K pages), size 262143 pages, no label, UUID=39974129-be6a-451f-99ef-1c2602130470
3,激活这个swap,把它加入到Linux中;
//查看内存信息
//top,free -h
[root@web01 ~]# free -h
[root@web01 ~]# swapon /tmp/1g
swapon: /tmp/1g: insecure permissions 0644, 0600 suggested.
[root@web01 ~]# free -h //可以看到,激活成功并已加入Linux;
//swapoff,卸载
4,永久挂载swap;
方案一:swapon /tmp/1g 写入到/etc/rc.local里;
方案二:写入到/etc/fstab:/tmp/1g swap swap defaults 0 0
======================================================================
企业分区方案
公有云;
物理机/虚拟机(私有云);
--------------------------------------------------------------------
服务器存放的数据,不重要:
分区方案:
/根分区:所有剩余空间;
/boot/ 引导分区:存放引导文件,存放系统内核镜像;推荐1G即可,用得很少,200M就够了;
--------------------------------------------------------------------
swap:公有云可以不配置,如果是java建议配一点;大小可以根据实际内存调整,实际内存>8G,swap可以配8G,实际内存<8G,可以实际内存*1.5(2倍)配置,最大别超过8G;
--------------------------------------------------------------------
服务器存放的数据,重要:
分区方案:
/根分区:40G-200G(参考公有云服务器),主要安装一些软件,重要数据单独存放;
/boot/ 引导分区:存放引导文件,存放系统内核镜像;推荐1G即可,用得很少,200M就够了;
swap:公有云可以不配置,如果是java建议配一点;大小可以根据实际内存调整,实际内存>8G,swap可以配8G,实际内存<8G,可以实际内存*1.5(2倍)配置,最大别超过8G;
/data/:剩余所有空间;
--------------------------------------------------------------------
不知道是否重要:
/boot/:这三块参照上述分区方案;
swap:这三块参照上述分区方案;
/根分区:这三块参照上述分区方案;
剩余空间不划分:未来谁使用谁划分;
======================================================================
磁盘空间不足故障案例
案例1:正常空间不足;
这种情况最简单,现像:df -h一看,某个磁盘分区使用率达到了100%,如何排查,如何处理?
模拟:创建1个大文件;
dd if=/dev/zero of=/var/log/nginx.log bs=1M count=2000
df -h //排查第1步,先整体看一下,磁盘哪里空间没了;
du -sh //详细查看目录所占空间
[root@web01 ~]# du -sh / //查看根所占空间,看不了其他的;
[root@web01 ~]# du -sh /* //看根下第一级目录所占的空间大小;
//找出一级目录,接着找二级目录,一层一层找,直到找到具体的大文件或目录;
//找出目录或文件后,确认是否可以删除;
解决:能删就删,不能删就只能加硬盘加空间了;
--------------------------------------------------------------------
案例2:inode引起的;
提示:no space left on device
先用df -h,查看磁盘空间发现没有满;可以怀疑inode引起的;
原因:磁盘空间不足,block导致,或者inode导致;
排查:df -i 来查看inode使用情况;
如果发现inode快用完了,找出这个分区中,大目录(目录本身大小大于1MB,du -sh目录所占空间)就行;
找个目录模拟与分析:
[root@web01 ~]# mkdir -p /mclind/test-inode
[root@web01 ~]# cd /mclind/test-inode/
[root@web01 test-inode]# ll -d /mclind/test-inode/
// ls -l 查看目录大小表示目录下面1层,文件名字大小
// 目录占的磁盘空间:du -sh 查看 目录下面所有文件block大小之和;
解决:确认是否可以删除或处理;
模拟inode满了;创建小文件磁盘,比如,100k,变成分区,挂载使用;
dd if=/dev/zero of=/tmp/100k bs=1k count=100
mkfs.ext4 /tmp/100k //xfs不一定成功,磁盘太小的话,不会成功
mkdir -p /mclind/inode
mount /tmp/100k /mclind/inode
touch /mclind/inode/{1..10}
df -h
df -i
//这种情况不常见;
--------------------------------------------------------------------
案例3:文件未彻底删除,磁盘空间不足;
前提:
条件1:删除文件,需要权限,假如有权限,可以删除,如果硬连接数为0,才是成功删除,使用rm命令;
条件2:文件调用数也为0,文件是否被使用中(命令,或服务在使用);
排查:如何知道硬连接数是否为0,一般rm后通过ls,find查看,找不到就是没了;
如何知道进程调用数是否为0, lsof,显示系统调用与使用了哪些文件(list open file),需要用yum安装lsof, lsof | grep 文件名
故障模拟:
现象:提示磁盘空间不足,no space ...
df -h ,查看提示磁盘满了;
继续排查:du -sh排查,这种查询,统计总大小,可能发现没有满;
可以怀疑可能是文件未彻底删除导致的;
模拟:dd创建文件
[root@web01 ~]# dd if=/dev/zero of=/var/log/nginx2.log bs=1M count=10000
tail -f /var/log/nginx2.log
rm -rf /var/log/nginx2.log
df -h
du -sh //查看发现空间占用并不是很大
接着就需要使用lsof
lsof | grep delete //在lsof中delete是一个标记,表示这个文件没有入口,就是硬连接为0,但是还有进程或服务在调用它;
lsof | grep nginx
结束这个服务,就自动释放了这个文件,建议重启服务;
ps aux | grep tail
kill tail_pid
再次用df -h查看,磁盘已恢复;
======================================================================
磁盘其他补充:
文件系统:磁盘中文件的存放组织方式.
常见文件系统:
xfs:CentOS 7 默认的系统;
ext4:CentOS 6/ubuntu默认的文件系统;
ext3:CentOS 5 默认;
--------------------------------------------------------------------
磁盘性能常用指标:
吞吐量:就是读写速度,
iops:每秒读写次数;
延迟:读写的时候操作延时;
--------------------------------------------------------------------
磁盘总结:
磁盘的选型;
Raid级别;
磁盘分区,格式化,挂载,永久挂载;
swap创建;
企业分区规则;
磁盘故障案例分析:空间故障,inode/block;
文件系统;
磁盘性能指标;