磁盘存储
设备文件
设备文件是类Unix操作系统(包括Linux)中一种特殊的文件类型,它代表了设备接口,使得用户空间的程序可以通过标准的文件操作来访问和控制硬件设备。设备文件为周边设备提供了简单的接口,如打印机、硬盘等,也可以访问没有连接到任何真实设备的系统资源,如随机数生成器等。
设备文件类型
在Linux系统中,设备文件主要可以分为以下三种类型:
- 字符设备文件:
字符设备文件是一种按字节流进行操作的设备,如串口、键盘、鼠标等。它们提供的是一种基于字符的输入输出接口,可以使用标准的文件操作函数(如read、write、open和close)对其进行操作。
- 块设备文件:
块设备文件是一种按块进行操作的设备,如硬盘、U盘等。它们提供的是一种基于块的输入输出接口,通常使用特定的块设备操作函数(如request_queue、submit_bio等)进行操作。
- 网络设备文件:
网络设备文件是一种用于网络通信的设备,如网卡等。它们提供的是一种基于数据包的输入输出接口,可以使用特定的网络操作函数(如sendmsg、recvmsg等)进行操作。
磁盘设备名称
- 物理磁盘
设备类型
SAS,SATA,SCSI,IDE,USB
设备文件命名
/dev/sda; /dev/sdb; /dev/sdc; …
- 固态硬盘
设备类型
nvme协议硬盘 /dev/nvme0n1;
设备文件命名
/dev/nvme0n2; /dev/nvme0n3; …
- 虚拟磁盘(虚拟环境下)
设备类型
/dev/vda;
设备文件命名
/dev/vdb; /dev/xvda; /dev/xvdb; …
硬盘
常见硬盘
- 机械硬盘(HDD)
Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。
机械硬盘中所有的盘片都装在一个旋转轴 上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。
硬盘为精密设备,进入硬盘的空气必须过滤。
- 固态硬盘(SSD)
Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致
关联和区别
- 机械硬盘(Hard Disk Drive, HDD)
传统的硬盘类型,采用磁性存储技术,通过盘片的旋转和磁头的移动来读写数据。
存储容量大、价格相对较低,但读写速度相对较慢,且存在机械结构,易受震动影响。
- 固态硬盘(Solid State Drive, SSD)
采用闪存芯片作为存储介质的新型硬盘,没有机械结构,因此读写速度极快,抗震性能优越。
价格相对较高,但随着技术进步逐渐亲民;存储容量虽然有限,但已能满足大多数应用需求;适用于需要高读写速度和稳定性的场景。
注意:硬盘有价,数据无价,目前SSD不能完全取代HHD
存储术语
磁盘术语
MBR 硬盘的第一个扇区(0道0头1扇区)
MBR(Master Boot Record, MBR)的作用至关重要,硬盘的第一个扇区(0道0头1扇区),包含硬盘的主引导程序和分区表。它是计算机启动的关键,包含了引导代码,能够加载操作系统,并告诉计算机硬盘上的分区信息。
ZBR 区位记录,是一种物理优化硬盘存储空间的方法
磁盘寻址
- CHS
采用24bit位寻址
最大寻址空间8GB
- LBA
采用28位寻址模式,最大寻址空间128GB
采用48位寻址模式,最大寻址空间128PB
磁盘类型
lsblk -d name,rota
查看分区
fdisk -l /dev/sda
常见命令
df 查看文件系统
df -HT
du查看文件系统目录
du -sh /etc
dd定制文件系统文件
dd if=SRC of=DEST bs=N count=N
测试硬盘写速度
测试硬盘读速度
存储管理
基础知识
为什么要磁盘分区?
使用磁盘分区的原因主要有以下几点:
-
数据管理:
通过分区,用户可以将不同类型的文件存放在不同的分区中,便于分类管理和查找。
-
系统安全:
将操作系统和用户数据分别存放在不同的分区中,可以在系统崩溃或需要重装时保护用户数据不受影响。
-
性能优化:
合理的分区策略可以减少磁盘碎片,提高磁盘的访问速度和效率。 -
多操作系统支持:
通过分区,用户可以在同一台计算机上安装并运行多个操作系统,满足不同的应用需
求。
管理磁盘步骤
- 设备分区
- 文件系统格式化
- 挂载到文件系统中
分区类型
- 主分区
硬盘上第一个创建的分区
引导功能的分区
小于2T的硬盘,最大可以创建4个主分区
- 扩展分区
扩展分区本身不能直接使用
需要将其划分为逻辑分区才能使用
一个物理硬盘上最多只能有3个主分区和1个扩展分区
扩展分区的最大数量不受限制
- 逻辑分区
可以单独进行格式化和使用
它们没有独立的引导块,因此不能作为启动分区
- 非引导分区
不具有引导功能的任意分区
分区方式
-
MBR
使用32位的LBA寻址方式
最多支持4个主分区,或者3个主分区和1个扩展分区 -
GPT
使用64位LBA寻址方式
支持最多128个分区
在硬盘两端各保存一份分区表副本,以及CRC32校验
MBR方案
特点
-
每个扇区512字节
-
第一个扇区
446bytes
Boot loader启动相关
64bytes
分区表
2bytes
55AA,标识位
centos系统
hexdump -n 5132 -Cv /dev/sda |tail -5
ubuntu系统
hexdump -n 512 -Cv /dev/sda |tail -5
可以看到sda是已有磁盘,右下角为55 aa
sdb是新磁盘,右下角为 00 00
命令解读:
-v 表示以“verbose”模式显示,
-C 表示以十六进制和 ASCII 字符混合显示,
-n 512 表示只显示前 512 字节。
- 分区标识
dos
分区样式
-
最多有4个主分区
-
3主分区+1扩展(N个逻辑分区)
-
为什么不能超过4个
每个分区项的关键项信息就占用16字节
MBR分区表的大小是固定的,只有64字节
备份MBR
备份
dd if=/dev/sda of=/data/dpt.img bs=1 count=64 skip=446
结果显示备份文件大小为64bytes
还原
dd if=dpt.img of=/dev/sda bs=1 seek=446
GPT分区
命令解读
操作管理分区
fdisk [options] -l [<disk>]
fdisk -l /dev/sda
查看设备信息
lsblk [options] [<device> ...]
lsblk -f
fdisk分区
基础操作命令
fdisk -l
fdisk -l /dev/sda
cat /proc/partitions
创建分区
基本流程
-
前提
准备磁盘设备
-
进入交互模式
fdisk /dev/sdb
-
查看分区
p
-
创建分区
n
-
选择类型
p 主分区 enter e 扩展分区 enter
-
确定分区号
1或者enter
-
扇区边界
起始扇区 enter 第一个扇区的起始位置2048 结束扇区 +10G enter
-
保存分区
w enter
管理分区
删除分区
进入交互模式
fdisk /dev/sdb
删除分区
d enter
选择编号
6 enter
非交互删除分区
echo -e 'd\n\nd\n\nd\n\nw' | fdisk /dev/sdb
非交互创建分区
echo -e 'n\np\n\n\n+10G\nw' | fdisk /dev/sdb
gdisk分区
gdisk是对gpt进行分区工具
与fdisk操作一样,界面不同
命令格式
gdisk [-l] device
parted分区
-
定位
通常用于处理大型磁盘
更复杂的分区布局 -
格式
parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...]
可以基于容量大小、容量比例的方式定制分区
- 信息查看
交互方式
parted
help
免交互查看
parted /dev/sdb help
显示所有分区
parted -l
指定磁盘查看分区
parted /dev/sdb print
- 创建GPT分区
增加标识
parted /dev/sdb mklabel gpt
parted /dev/sdb print
- 创建分区
parted /dev/sdb mkpart primary 1 1001
parted /dev/sdb mkpart primary 1002 1102
parted /dev/sdb mkpart primary ext4 1102MB 1902MB
- 分区容量调整
parted /dev/sdb resizepart 3 4000MB
- 删除分区
parted /dev/sdb print
parted /dev/sdb rm 4