30、Linux 磁盘基本原理、管理
一、磁盘介绍
磁盘:计算机中的外部存储设备,负责存储计算机数据,并且断电后也能保持数据不丢失。
磁盘分类:
1.1、按照物理结构: 机械磁盘、固态磁盘;
1.2、按照接口: IDE、SCSI、SATA、SAS、mSATA、 M.2、NVME、PCIe
1.3、按照尺寸:
- 机械硬盘:1.8寸 2.5寸 3.5寸
- 固态硬盘:SATA: 2.5寸
- M.2: 2242、2260、2280
二、磁盘的工作原理
机械磁盘的读写数据依靠电机带动盘片转动来完成数据读写的。
机械磁盘工作是依靠马达带动盘片转动,通过磁头来读取磁盘上的数据。
注意:为了使磁盘内部清洁,磁盘是在真空特殊环境中制作的,不能随意拆卸,拆开后基本报废了。
2.1、磁盘结构



2.2、磁盘术语
磁盘:硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在 5 片以内。盘片的编号自下向上从 0 开始,如最下边的盘片有 0 面和 1 面,再上一个盘片就编号为 2 面和 3 面。
磁头:负责读取盘面数据的设备
磁道:从盘片的最内侧向外有很多同心圆圈,我们称为磁道
扇区:从圆心向外画直线,可以将磁道划分为若干个弧段,称之为扇区,一个扇区通常为 512B
磁柱:硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。由于每个盘面都有自己的磁头,因此,盘面数等于总的磁头数。
三、磁盘的性能指标
影响磁盘性能的指标
3.1、寻道时间 (seek time,Tseek) : 是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O 操作越快,目前磁盘的平均寻道时间一般在 3-15ms。
3.2、旋转延迟( Trotation ): 是指盘片旋转将请求数据所在的扇区移动到读写磁头下方所需要的时间。旋转延迟取决于磁盘转速,通常用磁盘旋转一周所需时间的 1/2 表示。比如:7200rpm 的磁盘平均旋转延迟大约为 60*1000/7200/2 = 4.17ms,而转速为 15000rpm 的磁盘其平均旋转延迟为 2ms。
3.3、数据传输时间( Ttransfer ):是指完成传输所请求的数据所需要的时间
衡量磁盘性能的指标:
3.4、IOPS:( Input/Output Per Second ) 每秒的输入输出量(或读写次数),即指每秒内系统能处理的 I/O 请求数量。 随机读写频繁的应用,如小文件存储等,关注随机读写性能,IOPS 是关键衡量指标。可以推算出磁盘的 IOPS = 1000ms / (Tseek + Trotation + Transfer),如果忽略数据传输时间,理论上可以计算出随机读写最大的IOPS。常见磁盘的随机读写最大IOPS为:
- 7200rpm的磁盘 IOPS = 76 IOPS
- 10000rpm的磁盘IOPS = 111 IOPS
- 15000rpm的磁盘IOPS = 166 IOPS
3.5、throughput( 吞吐量 ): 指单位时间内可以成功传输的数据数量。 单位为(m/s G/s)

3.6、文件系统:是告知操作系统使用何种方法和数据结构在存储设备或分区上读写数据的;是分区数据管家,负责如何将数据写入磁盘或者从磁盘读出。常见文件系统:NTFS EXT3 EXT4 XFS ISO9660
adfs, affs, autofs, cifs, coda, coherent, cramfs,debugfs, devpts, efs, ext, ext2, ext3, ext4, hfs, hfsplus, hpfs,iso9660, jfs, minix, msdos, ncpfs, nfs, nfs4, ntfs, proc, qnx4,ramfs, reiserfs, romfs, squashfs, smbfs, sysv, tmpfs, ubifs,udf, ufs, umsdos, usbfs, vfat, xenix, xfs, xiafs
3.7、page cache: 其实就是内存上空闲的部分用来缓存数据,比如 buffer cache
作用:对 IO 读写做优化
测试缓存对读写的影响
[root@long90 ~]# free -mtotal used free shared buff/cache available
Mem: 3704 632 2444 10 628 2830
Swap: 2047 0 2047
# 设置缓存大小
[root@long90 ~]# echo 3 > /proc/sys/vm/drop_caches
[root@long90 ~]# free -mtotal used free shared buff/cache available
Mem: 3704 577 2865 10 261 2902
Swap: 2047 0 2047
[root@long90 ~]# dd if=/dev/zero of=/tmp/big bs=1M count=1000
记录了1000+0 的读入
记录了1000+0 的写出
1048576000 bytes (1.0 GB, 1000 MiB) copied, 16.4505 s, 63.7 MB/s
[root@long90 ~]# free -mtotal used free shared buff/cache available
Mem: 3704 578 1856 10 1269 2900
Swap: 2047 0 2047
[root@long90 ~]# dd if=/dev/zero of=/tmp/big1 bs=1M count=1000
记录了1000+0 的读入
记录了1000+0 的写出
1048576000 bytes (1.0 GB, 1000 MiB) copied, 26.9195 s, 39.0 MB/s
[root@long90 ~]# echo 3 > /proc/sys/vm/drop_caches
[root@long90 ~]# free -mtotal used free shared buff/cache available
Mem: 3704 578 2864 10 261 2901
Swap: 2047 0 2047
[root@long90 ~]# dd if=/tmp/big of=/dev/null
记录了2048000+0 的读入
记录了2048000+0 的写出
1048576000 bytes (1.0 GB, 1000 MiB) copied, 4.61776 s, 227 MB/s
[root@long90 ~]# free -mtotal used free shared buff/cache available
Mem: 3704 578 1857 10 1269 2901
Swap: 2047 0 2047
[root@long90 ~]# dd if=/tmp/big of=/dev/null
记录了2048000+0 的读入
记录了2048000+0 的写出
1048576000 bytes (1.0 GB, 1000 MiB) copied, 4.39871 s, 238 MB/s
四、linux 磁盘的使用方法
4.1、磁盘初始化:
一块新的磁盘使用必须初始化为 MBR 或者 GPT 分区。
注意:从 MBR 转到 GPT,或从 GPT 转换到 MBR 会导致数据全部丢失
1)MBR ( Master Boot Record 512B=446+64 + 2 主引导记录) 的缩写,由三部分组成
- 特点: MBR < 2TB fdisk 4个主分区或者 3个主分区+1个扩展分区(N个逻辑分区)
- Bootloader(主引导程序 446 字节):引导操作系统的主程序
- DPT分区表( Disk Partition Table 64字节)a、分区表保存了硬盘的分区信息,操作系统通过读取分区表内的信息,就能够获得该硬盘的分区信息b、每个分区需要占用 16 个字节大小,保存有文件系统标识、起止柱面号、磁头号、扇区号、起始扇区位置( 4个字节)、分区总扇区数目(4个字节)等内容c、分区表中保存的分区信息都是主分区与扩展分区的分区信息,扩展分区不能直接使用,需要在扩展分区内划分一个或多个逻辑分区后才能使用d、逻辑分区的分区信息保存在扩展分区内而不是保存在 MBR 分区表内,这样,就可以突破 MBR 分区表只能保存 4 个分区的限制
- 硬盘有效标志(校验位 2个字节)
2)GPT > 2TB gdisk(parted) 128个主分区
4.2、分区:
将磁盘合理分区,能使计算机或者使用者更快的存取数据
- MBR 主分区 + 扩展分区 <= 4
- GPT 主分区 <= 128
4.3、格式化:
装载文件系统 ( 相当于库管,负责数据的写入和读出 )。
常见的文件系统: NTFS EXT EXT2 EXT3 EXT4 XFS vfat
Command (m for help): l0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden or c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi ea Rufus alignment
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs
f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT
10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f4 SpeedStor
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fd Linux raid auto
1c Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep
1e Hidden W95 FAT1 80 Old Minix be Solaris boot ff BBT
4.4、挂载:
linux 中设备不能直接使用,需要挂载到文件夹才可以。
挂载方式:
- 手动挂载
- 开机挂载
- 自动挂载
五、linux 磁盘表示方法
5.1、硬盘命名方式
OS | IDE并口 | SATA串口 | SCSI |
CentOS6 | /dev/hda | /dev/sda | /dev/sda |
CentOS7 | /dev/sda | /dev/sda | /dev/sda |
CentOS8 | /dev/sda | /dev/sda | /dev/sda |
5.2、磁盘设备的命令 /dev/sda2
说明:
- s:硬件接口类型(sata/scsi)
- d:disk(硬盘)
- a:第 1 块硬盘(b,第二块)
- 2:第几个分区
/dev/hd h=IDE硬盘 /dev/hdd3
/dev/vd v=虚拟硬盘 /dev/vdf7
5.3、HP 服务器硬盘
- /dev/cciss/c0d0
- /dev/cciss/c0d0p1 c0第一个控制器, d0第一块磁盘, p1分区1
- /dev/cciss/c0d0p2 c0第一个控制器, d0第一块磁盘, p2分区2
六、磁盘分区
6.1、磁盘划分思路
- 进入分区表 新建分区
- 更新分区表 <刷新分区表>
- 格式化分区——>文件系统
6.2、磁盘分区 fdisk
fdisk 命令:
fidsk [命令选项] [参数]
命令选项
-l list 列出磁盘分区
-u 与-l一起使用,显示分区的相关信息
fdisk /dev/sda 为/dev/sda分区
m :显示菜单和帮助信息
a :活动分区标记/引导分区
d :删除分区
l :显示分区类型
n :新建分区
p :显示分区信息
q :退出不保存
t :设置分区号
v :进行分区检查
w :保存修改
x :扩展应用,高级功能
c :开关 dos 兼容性标志
分区前了解设备信息
案例:计算磁盘的容量 (硬盘容量 = 柱面数 × 盘面数(磁头数) × 扇区数 × 扇区大小(一般为512字节))
几何属性:255 个磁头, 63 个扇区/磁道, 2610 个柱面
这几个数值可以帮助我们计算磁盘空间的大小以及一个磁柱的大小,比如说
##一个磁柱的容量=255x63x512=8225280(约8M空间)
# lsblk 查看块设备
# df -h 查看正在挂载的设备情况
# blkid 打印某个已经格式化分区的 UUID
# fdisk -l 查看当前系统的所有设备分区情况
# fdisk /dev/sdb
[root@rhel8 ~]# fdisk -l /dev/sda
Disk /dev/sda: 30 GiB, 32212254720 bytes, 62914560 sectors 磁盘空间统计,大小和扇区数量
Units: sectors of 1 * 512 = 512 bytes # 单元:扇区
Sector size (logical/physical): 512 bytes / 512 bytes # 扇区大小(逻辑/物理)
I/O size (minimum/optimal): 512 bytes / 512 bytes # I/O 大小(最小/最佳)
Disklabel type: dos # 磁盘标签类型
Disk identifier: 0x6248978f # 磁盘标识符设备 启动 起点 末尾 扇区 大小 Id 类型
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 62914559 60815360 29G 8e Linux LVM
命令缺点:单个分区不能超过 2T 超过的话需要用 parted 命令
在 linux 下大磁盘的分区不能再采用 fdisk了,MBR 分区表只支持 2T磁盘,所以大于 2T的磁盘必须使用 GPT分区表。
6.3、磁盘格式化
格式化( format )是指对磁盘或磁盘中的分区(partition)进行初始化的一种操作,这种操作通常会导致现有的磁盘或分区中所有的文件被清除。格式化通常分为低级格式化和高级格式化。如果没有特别指明,对硬盘的格式化通常是指高级格式化,而对软盘的格式化则通常同时包括这两者。
-L :标签名
-V : 详细显示模式
-t : 给定档案系统的型式,Linux 的预设值为 ext2
-c : 在制做档案系统前,检查该 partition 是否有坏轨
-l bad_blocks_file : 将有坏轨的 block 资料加到 bad_blocks_file 里面
-b : 给定 block 的大小
磁盘分区格式化
mkfs.ext4 /dev/sda3
关于 block and inode dentry ( 实验发现这句话不对 )
block 越大,inode 越少,适合存储大文件的文件系统;block越小,inode越多,适合存储文件多而小的文件系统。
注意:
- MBR 分区表最多允许 4个主分区,或者 3个主分区+1个扩展分区
- 扩展分区不能直接存储数据
- 扩展分区的大小决定了所有逻辑分区的大小,逻辑分区的编号从5开始
- 删除扩展分区后下面的逻辑分区都被删除
- 分完区后需要手动刷新分区表,如果刷新不成功需要重启操作系统
- 创建分区的时候尽可能注意分区序号的连续性