Linux磁盘

磁盘管理体系架构;

磁盘选型;

磁盘分区,格式化,挂载;

磁盘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;

文件系统;

磁盘性能指标;

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容