机械硬盘(HDD)

有多片盘片
硬盘转速,每分钟5400/7200/10k/15k转(rpm)
组成结构有盘片,机械手臂,磁头等
磁头磁道都是0开始计数
磁道切切切就是扇区,一个扇区512字节
柱面:不同盘面上相同的磁道组合,磁盘读写以柱面为单位读写,但是是一个一个磁道写,不是同时写多个磁道。

固态硬盘(SSD )

存储最小单位是 闪存颗粒(nand flash),决定寿命:
SLC (贵)
MLC (企业推荐)
TLC (家用)
QLC

磁盘接口

Sata(家用机械,固态)

image.pngimage.png
窄的接数据,宽的接电源

SAS(企业用机械,固态)

长得和Sata差不多,可以插Sata硬盘,应为是sata和另一种接口的杂交品

pci-e (固态,显卡,网卡)

m.2 nvme协议(改良的pci-e,笔记本)

RAID

磁盘冗余阵列,磁盘的一种管理工具。
组合多块硬盘达到各种效果。

raid级别(动画演示day16-9)

常见的raid级别:0,1,5,10

级别 最少几块硬盘 安全冗余 可用容量 性能 实际场景
0(条带) 1 硬盘和 读写最快 数据库从库,web服务器
1(镜像) 每次只能给两块做 一半 写慢(备份),读正常速度 系统盘,监控服务器
5 至少三块 损坏一块 n-1 读还可以,写慢 普通数据库
10 至少4块 损坏一半,不能在一个组里 一半 写读快 高并发高访问数据库

引导记录与磁盘命名

![{Z79B66]~4SG6O58PHN(0V.png

MBR:主引导记录

由4个部分组成
主引导程序它负责从活动分区中装载,并运行系统引导程序。
出错信息数据区
分区表(DPT,Disk Partition Table)含4个分区项,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。
结束标志字
磁盘大小不能大于2tb,如果大于2tb则无法使用.

GPT:主引导记录

GPT分区表格式
解决系统支持大硬盘的问题.
主分区随便用,不用区分主分区,扩展分区逻辑分区

  1. #Linux系统磁盘名字的命名规则
  2. ##物理服务器...
  3. sata/sas/pci-e/ 接口的硬盘都是
  4. /dev/sd?开头的
  5. ##云服务器
  6. /dev/vd? 开头
  7. ##第1块硬盘
  8. /dev/sda
  9. ##第2块硬盘
  10. /dev/sdb
  11. #Linux系统磁盘分区名字的命名规则
  12. #主分区或扩展分区 1-4
  13. /dev/sda1-4
  14. #逻辑分区从5开始
  15. /dev/sda5
  16. #第3块sata硬盘的第1个主分区
  17. /dev/sdc1
  18. #第4块sas硬盘的第2个逻辑分区
  19. /dev/sdd6

linux内磁盘操作

磁盘分区指令 共同点 区别
fdisk 都可以进行磁盘分区 仅支持MBR格式分区
parted/gdisk 都支持,gdisk只有DPT

fdisk

选项 效果 后续操作
-l 显示磁盘信息
指令(fdisk 硬盘进入)
p # print 显示当前磁盘分区信息
n # new 创建 primary(按p选择主分区) extended(按e选择拓展分区)
d # delete 删除
q # quit 退出
w # write 保存

parted

mktable gpt # 创建磁盘分区表,也可以选择MBR
mkpart primary(分区名字) 0 10 # 初始扇区,结尾扇区,默认单位MB
parted /dev/sdb print # 查看磁盘分区信息简版,也可以用于查询MBR分区,复杂:parted -l
rm 6 # 删除第六个分区
q # 退出

新磁盘使用流程

  1. 磁盘分区 # 也可以不分区
  2. 格式化(创建文件系统)
  • mkfs.xfs 硬盘路径 # xfs,文件系统类型的一种
  1. 挂载(只能挂硬连接)
  • mount 硬盘或分区路径 /mnt # 临时挂载测试目录,重启失效
  • 卸载:umunt /mnt
  • 永久挂载:在/etc/rc.local 结尾追加临时挂载命令

    sda磁盘分区方案

    配置centos时候搞
    /boot # 1g
    /swap # 8-16g
    / 可以全给,也可以给40-100在创建其他分区

    磁盘(分区)负载查询

    ```bash du -sh /* | sort -hr # 人类可读方式排序

du 查询存在名字的目录所占空间,-s只查看一层,-h人类可读方式查看,与ll不同,ll展示的不能真实的展示目录空间大小

文件制造机 dd if=/dev/zero of=/usr/local/big bs=1M count=5000

  1. inode数量剩余:`df-i`<br />inode不足怎么查,`find '/' -type d -size +1M`,如果一个目录的ll大小很大,说明里面有很多文档和目录占用该目录的block。其中可能有空文件和空目录,本身不占用block,把inode耗光了。
  2. <a name="NwIBe"></a>
  3. # 磁盘不足的三种情况
  4. 报错:no space left on device
  5. <a name="IIwNu"></a>
  6. ## 1.有大文件
  7. ```bash
  8. df -h # 查看什么分区或磁盘满了
  9. du -sh /满了的磁盘挂载的路径* | grep G | sort -hr
  10. 依次排查,最后确认后删除大文件

2.inode不足

df -h # 发现还有空间
df -i  # inode满了
# 看上面的磁盘(分区)负载查询

3.文件未完全删除

文件删除需要删除所有硬链接并且该文件没有被任何命令或服务软件调用

df -h  # 发现磁盘满了
du -sh  # 发现满了的分区或磁盘在这和df -h里的差很多,
lsof |grep delete  # list open file
最后重启或关闭对应服务/进程/命令.  命令可以直接kill 这里写pid,记得补刀

swap添加

#01 dd创建500mb文件
dd if=/dev/zero  of=/tmp/500mb   bs=1M  count=500
#02 500mb文件成为swap (创建文件系统)
mkswap /tmp/500mb

#03 激活swap(让他加入到系统中) (挂载)
chmod 600 /tmp/500mb
swapon /tmp/500mb 
free -h

#04 永久生效  
01) 方法01 /etc/rc.local  
swapon /tmp/500mb
02) 方法02 /etc/fstab  
/dev/mapper/centos_oldboy--81--golden-swap swap                   swap   defaults        0 0
#/tmp/500mb
UUID=756762b6-a234-4b59-999f-1e5efaa54a1d   swap                   swap   defaults        0 0  

#05 关闭swap
swapoff /tmp/500m

 swapon -s  # 查看swap的组成

拓展

磁盘关键性能指标
随机的读写次数(iops) io读写 per second 磁盘每秒的读写次数
吞吐量 (Throughput) 连续读写速度 磁盘最大读写速度
延迟 (随机读写延迟)
容量
3.2 测试
更多测试参考 (https://help.aliyun.com/document_detail/147897.htm)
# dd
# fio (连续读写,随机读写,读写延迟)
yum install libaio libaio-devel fio -y
#测试顺序读
fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sda -name=Read_PPS_Testing
#测试顺序写
fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sda -name=Write_PPS_Testing
#测试随机读 iops
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -
group_reporting -filename=/dev/sda -name=Rand_Read_Testing
#测试随机写
fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -
group_reporting -filename=/dev/sda -name=Rand_Write_Testing
#测试延迟 随机读
fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -
filename=/dev/sda -name=Rand_Read_Latency_Testing