磁盘结构
物理结构
- 盘片(Platter):盘片是磁盘的主要组成部分,通常由铝或玻璃材料制成。每个盘片都有两个平滑的表面,涂有磁性物质。这些表面被称为盘面(Platter Surface)。
-
磁道(Track):每个盘面上划分为多个同心圆环,称为磁道。磁道是数据存储的基本单位,类似于唱片上的一条条的圆环。磁道由一系列扇区组成。
-
扇区(Sector):每个磁道都被划分为多个扇区,扇区是存储数据的最小单元。通常情况下,每个扇区的大小为512字节或4KB。扇区通常是固定大小的,但是在某些磁盘上,扇区的大小可能会根据需要进行调整。
-
扇区间距(Inter-Sector Gap):在相邻扇区之间,有一小段未被使用的空间,称为扇区间距。扇区间距主要用于分隔扇区,确保数据的正确读取。
-
磁头(Head):磁头是位于盘面上的读/写磁头。硬盘通常有多个磁头,每个磁头与一个盘面相对应。磁头负责读取和写入数据,它们可以在盘面上移动来获取不同磁道上的数据。
- 柱面(Cylinder):所有盘面上相同编号的磁道构成一个柱面。柱面编号从外部开始,往内逐渐增加。柱面编号可以用来表示磁盘上的特定位置,以方便寻址和定位数据。
硬盘容量
-
硬盘存储容量=磁头数(8个2进制)×磁道(柱面)数×每道扇区数(6个二进制)×每扇区字节数
1柱面=512 * 扇区数/磁头数×磁道=51263255=7.84M
-
可以用柱面/磁头/扇区来唯一定位磁盘上每一个区域
硬盘接口类型
-
SATA(Serial ATA):SATA是目前最常见的磁盘接口类型之一。它采用串行传输方式传输数据,提供高速数据传输和易于安装的特点。SATA接口通常分为SATA 3.0(6 Gbit/s)、SATA 2.0(3 Gbit/s)和SATA 1.0(1.5 Gbit/s)三个版本。
-
SAS(Serial Attached SCSI):SAS是一种用于服务器和高性能数据存储领域的磁盘接口。它采用串行传输方式,提供更高的数据传输速度和更好的可靠性。SAS接口还支持链路聚合(Link Aggregation)和多路径传输,可实现冗余和负载均衡。
-
IDE(Integrated Drive Electronics):IDE是较早使用的一种磁盘接口类型,现在已经逐渐被SATA所取代。IDE接口使用并行传输方式传输数据,适用于硬盘和光驱等设备。它包括ATA(AT Attachment)和ATAPI(ATA Packet Interface)两种标准。
-
SCSI(Small Computer System Interface):SCSI是一种用于连接多种外部设备的接口标准,包括硬盘、光驱、打印机等。SCSI接口可以提供高速数据传输和多设备支持,主要用于服务器和专业工作站等环境。
-
NVMe(Non-Volatile Memory Express):NVMe是一种新兴的高性能磁盘接口,专为固态硬盘(SSD)设计。它采用PCI Express总线,具有低延迟、高吞吐量和并行传输的特点。NVMe接口可实现更快的数据读写速度和更低的处理延迟。
服务器硬盘尺寸
LFF:3.5英寸硬盘是较常见的服务器硬盘尺寸类型之一。它通常用于塔式服务器和一些较大的机架式服务器。这种硬盘尺寸较大,适用于需要较大容量和高性能的服务器应用。
SFF:2.5英寸硬盘是一种较小的服务器硬盘尺寸类型。它通常用于小型机架式服务器和刀片服务器等紧凑型服务器中。2.5英寸硬盘尺寸相对较小,适用于有限的空间环境,并且可以提供较高的性能。
小型硬盘(例如1.8英寸硬盘):小型硬盘是一种极小尺寸的服务器硬盘。它通常被用于特殊的服务器应用,如超轻薄服务器和特定嵌入式系统中。这种硬盘尺寸非常紧凑,适用于对空间要求极高的服务器环境。
机械与固态
- 机械硬盘(HDD/Hard Disk Drive)
传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精密设备,进入硬盘的空气必须过滤
- 固态硬盘(SSD/Solid State Drive)
固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD的2倍
- 对比
相较于SSD,HDD在价格、容量占有绝对优势
硬盘有价,数据无价,目前SSD不能完全取代HHD
逻辑结构
操作系统对硬盘进行读写时需要用到文件系统把硬盘的扇区组合成簇,并创建文件和树形目录制度,使操作系统对其访问和查找变得容易,这是因为操作系统直接对数目众多的扇区进行寻址会十分麻烦。
-
文件系统(File System):文件系统是磁盘上组织和管理文件的一种数据结构。它定义了文件和目录的组织方式、访问权限、元数据等信息。常见的文件系统包括FAT、NTFS、EXT等。文件系统将磁盘分为多个逻辑区域,每个区域用于存储文件和目录的数据。它提供了对文件的读写、查找、删除和修改等操作。
-
分区表(Partition Table):分区表是一种数据结构,用于将物理磁盘划分为多个逻辑分区。每个分区都被视为一个独立的逻辑驱动器,可以单独进行格式化、挂载和管理。分区表记录了磁盘上每个分区的起始位置、大小和文件系统类型等信息。常见的分区表有MBR(Master Boot Record)和GPT(GUID Partition Table)。
-
文件(File):文件是数据的基本单位,它可以是文本、图像、音频或二进制数据等。文件以逻辑方式组织和存储在磁盘上。文件系统使用文件的元数据来跟踪文件的位置、大小、访问权限、创建时间等信息,以支持文件的读写和管理。
-
目录(Directory):目录是用于组织和管理文件的一种结构。目录可以包含文件和其他目录,形成树状的文件系统结构。每个目录都有一个唯一的名称,它可以用于访问目录中的文件和子目录。目录提供了一种逻辑组织文件的方式,使得用户可以方便地找到和管理文件。
-
索引(Index):索引是一种数据结构,用于快速查找和访问文件或数据。在某些文件系统中,为了加快文件的读取速度,系统会创建文件的索引。索引通常按照某种特定的顺序(如字母顺序或哈希值)来组织文件的位置信息,以便快速查找和定位文件。
磁盘分区
为什么分区?
linux需分区才可以使用硬盘
分区的优缺点:
优点:
- 优化I/O性能 读写
- 实现磁盘空间配额限制
- 提高修复速度
- 隔离系统和程序
- 安装多个OS
- 采用不同文件系统
缺点:
- 必须是连续的空间
- 一旦分好区域后,无法增加或者减少空间
分区分类
主分区: 可以直接使用,安装操作系统存储文件等。序号为 1-4
扩展分区:不可以直接使用,需要再划分逻辑分区,可以让分区超过4个
逻辑分区:可以直接使用,存储文件
扩展分区是特殊的主分区。序号从5开始
主引导记录(Master Boot Record,缩写:MBR)
对于那些扇区为512位组的磁盘,MBR分割表不支持容量大于2.2TB(2.2×1012字节)的扇区
计算机开机后访问硬盘时所必须要读取的首个扇区,它在硬盘上的三维地址为(柱面,磁头,扇区)=(0,0,1)。在深入讨论主引导扇区内部结构的时候,有时也将其开头的446字节内容特指为“主引导记录”(MBR),其后是4个16字节的“磁盘分区表”(DPT),以及2字节的结束标志(55AA)。因此,在使用“主引导记录”(MBR)这个术语的时候,需要根据具体情况判断其到底是指整个主引导扇区,还是主引导扇区的前446字节。 最多只能分4个区,每个分区表占16字节
- 446bytes: boot loader 启动相关
- 64bytes:分区表,其中每16bytes标识一个分区 4 主分区 *16=64
- 2bytes: 55AA
全局唯一标识分区表(GUID Partition Table,缩写:GPT)
一个实体硬盘的分区表的结构布局的标准。它是可扩展固件接口(UEFI)标准(被Intel用于替代个人计算机的BIOS)的一部分,被用于替代BIOS系统中的一32bits来存储逻辑块地址和大小信息的主引导记录(MBR)分区表。支持128个分区,使用64位,支持8Z(512Byte/block )64Z ( 4096Byte/block)。可以支持2T以上的硬盘。
使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位UEFI (Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持GPT,使得操作系统可以启动
文件系统
一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘(或者光盘)的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上的那个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,用户只需要记住数据被写入到了哪个文件中。
文件系统通常使用硬盘和光盘这样的存储设备,并维护文件在设备中的物理位置。但是,实际上文件系统也可能仅仅是一种访问资料的界面而已,实际的数据可能是通过网络协议(如NFS、SMB、9P等)提供的或者暂存于内存上,甚至可能根本没有对应的文件(如proc文件系统)。
简单来说,文件系统是管理文件的程序
文件系统的组成
- 内核中的模块:ext4, xfs, vfat
- Linux的虚拟文件系统:VFS
- 用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
超级块和INODE TABLE
超级块存储文件系统的整体信息,用于管理和维护文件系统的结构和属性。
iNode表则存储每个文件和目录的元数据信息,用于查找和访问文件的相关信息和数据。
- 超级块(super block) 负责描述 当前这个分区有哪些块组, 从哪里开始从哪里结束
- 块组描述符表(GDT)ext文件系统每一个块组信息使用32字节描述,这32个字节称为块组描述符,所有块组的块组描述符组成块组描述符表GDT(group descriptor table)。虽然每个块组都需要块组描述符来记录块组的信息和属性元数据,但是不是每个块组中都存放了块组描述符。将所有块组的块组信息组成一个GDT保存,并将该GDT存放于某些块组中,类似存放superblock和备份superblock的块
- 块位图(block bitmap): 描述此块是否使用 0 未使用 1使用
- 节点位图 (inode bitmap): inode节点 位图 0 未使用 1使用
常见的文件系统类型
FAT(File Allocation Table):
FAT文件系统是一种较早的文件系统类型,常用于早期的Windows操作系统和可移动存储设备(如磁盘、SD卡等)。它使用文件分配表来跟踪文件的存储位置。 且最大只能支持32GB分区,单个文件也只能支持最大4GB。
NTFS(New Technology File System):
NTFS(XFS)是Windows操作系统默认使用的文件系统类型。它提供了更高级的功能,如对大文件和大容量磁盘的支持、文件和目录的安全性控制、文件压缩等。 具备3个功能:错误预警功能、磁盘自我修复功能和日志功能,单个文件64GB
ext4(Fourth Extended File System):
ext4是Linux操作系统中最常用的文件系统类型。它是ext文件系统的最新版本,提供了更好的性能和可靠性,并支持更大的文件和分区大小。
- 根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
- 用优化算法,日志记录对整体文件操作影响非常小
- 是一个全64-bit的文件系统,最大可以支持8EB的文件系统,1EB=1024PB1PB=1024TB(这里才到TB1TB=1024GB
- 而支持单个文件则达到8EB能以接近裸设备I/O的性能存储
swap
swap交换分区是系统RAM的补充,swap 分区支持虚拟内存。当没有足够的 RAM 保存系统处理的数据 时会将数据写入 swap 分区,当系统缺乏 swap 空间时,内核会因 RAM 内存耗尽而终止进程。配置过 多 swap 空间会造成存储设备处于分配状态但闲置,造成浪费,过多 swap 空间还会掩盖内存不足。
exFAT(Extended File Allocation Table):
exFAT是一种专为闪存存储设备设计的文件系统,支持对大容量文件和存储设备的访问,同时具有跨平台兼容性。
JFS
主要是为满足服务器的高吞吐量和可靠性需求而设计、开发的。单个文件最大限制16TB,该文件系统最大支持1PB的容量。1PB=1024TB
分区与查询
1.分区工具
- lsblk 列出块设备
- fdisk 管理MBR分区
- gdisk 管理GPT分区
- parted 高级分区操作,可以是交互或非交互方式
- partprobe 重新设置内存中的内核分区表版本,适合于除了CentOS 6 以外的其它版本 5,7,8
1.1 Fdisk
格式:fdisk -l [磁盘设备]
fdisk [磁盘设备]
-
m 打印出菜单
-
p 打印出当前分区表
-
n 新建一个分区
-
d 删除一个分区
-
t 改变分区的属性,系统ID
-
w 保存
-
q 不保存退出
[root@192 ~]# fdisk -l /dev/sda 磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0x000a8576 设备 Boot Start End Blocks Id System /dev/sda1 * 2048 2099199 1048576 83 Linux /dev/sda2 2099200 83886079 40893440 8e Linux
字段含义:
-
设备:列出每个磁盘或磁盘分区的设备文件名,如/dev/sda、/dev/nvme0n1等。
-
引导标志(Boot):显示是否设置了引导标志。一个星号(*)表示该分区被设置为引导分区。
-
起始扇区(Start):显示分区在磁盘上的起始扇区位置。单位为扇区(通常是512字节)。
-
结束扇区(End):显示分区在磁盘上的结束扇区位置。
-
扇区数(Sectors):显示分区所占的总扇区数。
-
大小(Size):显示分区的大小。通常以字节、千字节(KB)、兆字节(MB)或千兆字节(GB)为单位。
-
Id:显示分区的类型标识符。这个值表示不同类型的分区,例如Linux文件系统、Windows NTFS等。
-
类型(Type):显示分区类型的具体描述,如Linux、Microsoft basic data、EFI System等。
-
系统(System):与“类型”列类似,显示分区类型的描述信息。
1.2 blkid
可以查看块设备属性信息
[root@192 ~]# blkid
/dev/sda1: UUID="dd924c21-db72-4fc2-bb50-a1b807e11707" TYPE="xfs"
/dev/sda2: UUID="seCmIX-Qnsm-936E-LFi7-iycT-aW69-170SMy" TYPE="LVM2_member"
/dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/mapper/centos-root: UUID="a186c243-8403-4d1e-826a-668de463529f" TYPE="xfs"
/dev/mapper/centos-swap: UUID="ad062e10-f14a-4cd6-ae86-963bbcea5829" TYPE="swap"
1.3 mkfs
创建文件系统(格式化)常用选项
-t:{ext2|ext3|ext4|xfs} 指定文件系统类型
-b:{1024|2048|4096} 指定块 block 大小
-L:‘LABEL’ 设置卷标
-j:相当于 -t ext3, mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3-i
-i:为数据空间中每多少个字节创建一个inode;不应该小于block大小
-N:指定分区中创建多少个inode
-I:一个inode记录占用的磁盘空间大小,128---4096
-m:默认5%,为管理人员预留空间占总空间的百分比
-O:FEATURE[,...] 启用指定特性-O ^FEATURE 关闭指定
[root@localhost ~]# mkfs mkfs -t ext4=mkfs.ext4
mkfs mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat
[root@localhost ~]# mkfs.xfs /dev/sdb1 //将sdb格式化为XFS文件系统
meta-data=/dev/sdb isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
1.4 mkswap
特殊的文件系统,缓解内存不足,为了个别应为程序加内存有点浪费 添加交换分区的空间
mkswap + 分区
swapon +分区 开启 -a 全部
swapoff +分区 关闭 -a 全部
[root@localhost ~]# mkswap /dev/sdb3
mkswap: /dev/sdb3: warning: wiping old swap signature.
正在设置交换空间版本 1,大小 = 20971516 KiB
无标签,UUID=2b417485-49bd-4b72-9fce-89594647fcd1
[root@localhost ~]# swapon /dev/sdb3
[root@localhost ~]# cat /proc/meminfo |grep "SwapT"
SwapTotal: 23068664 kB
[root@localhost ~]# swapoff /dev/sdb3
[root@localhost ~]# cat /proc/meminfo |grep "SwapT"
SwapTotal: 2097148 kB
2. 查询
2.1 lsblk
扫描系统上的所有块设备,并将其层次结构以树形式显示出来
字段含义:
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 5G 0 part /boot
├─centos-root 253:0 0 40G 0 lvm /
└─centos-swap 253:1 0 5G 0 lvm [SWAP]
sr0 11:0 1 4.2G 0 rom
- NAME:显示块设备的名称,如/dev/sda、/dev/nvme0n1等。
- MAJ:MIN:显示块设备的主设备号和次设备号。
- RM:显示块设备是否为可移动设备。值为1表示是可移动设备,值为0表示不是可移动设备。
- SIZE:显示块设备的大小。通常以字节、千字节(KB)、兆字节(MB)或千兆字节(GB)为单位。
- RO:显示块设备是否为只读(Read-Only)模式。值为1表示是只读模式,值为0表示非只读模式。
- TYPE:显示块设备的类型,如disk(磁盘)、part(分区)等。
- MOUNTPOINT:如果块设备已经挂载到文件系统上,则显示挂载点。否则,显示为空。
- FSTYPE:如果块设备上有文件系统,则显示文件系统的类型,如ext4、ntfs等。否则,显示为。
2.2 df
格式:df [参数]
-h:以列表的形式显示
-T:显示类型
-a:显示所有的文件系统
[root@centos8 ~]#df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 887M 0 887M 0% /dev
tmpfs tmpfs 903M 0 903M 0% /dev/shm
tmpfs tmpfs 903M 8.7M 894M 1% /run
tmpfs tmpfs 903M 0 903M 0% /sys/fs/cgroup
/dev/sda2 xfs 100G 2.7G 98G 3% /
/dev/sda3 xfs 50G 1.4G 49G 3% /data
/dev/sda1 ext4 976M 128M 781M 15% /boot
tmpfs tmpfs 181M 0 181M 0% /run/user/0
[root@centos8 ~]#lsblk -f
NAME FSTYPE LABEL UUID
MOUNTPOINT
sda
├─sda1 ext4 5c2216e3-ae34-444e-aa60-83cbaebb47e7
/boot
├─sda2 xfs f7f53add-b184-4ddc-8d2c-5263b84d1e15 /
├─sda3 xfs 9a2293a8-9277-4b18-bae1-498e0b9da145
/data
├─sda4
├─sda5 swap eebe3bc7-6d52-4ad9-86aa-916f1a123fd4
[SWAP]
└─sda6
sdb
挂载
mount(临时挂载)
mount [ -t 参数 ] 存储设备 挂载点目录
-t fstype 指定要挂载的设备上的文件系统类型,如:ext4,xfs
-r readonly,只读挂载
-w read and write, 读写挂载,此为默认设置,可省略
-n 不更新/etc/mtab,mount不可见
-a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有 auto功能)
-L 'LABEL' 以卷标指定挂载设备
-U 'UUID' 以UUID指定要挂载的设备
-B, --bind 绑定目录到另一个目录上
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
device:指明要挂载的设备
-
设备文件:例如:/dev/sda5
-
卷标:-L 'LABEL', 例如 -L 'MYDATA'
-
UUID: -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
-
伪文件系统名称:proc, sysfs, devtmpfs, configfs
mountpoint:挂载点目录必须事先存在,建议使用空目录
挂载规则:
- 一个挂载点同一时间只能挂载一个设备
- 一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
- 一个设备可以同时挂载到多个挂载点
- 通常挂载点一般是已存在空的目录
unmount解除挂载
umount 参数 设备名或挂载点
参数:-f:强制解除
永久挂载
修改系统配置文件 /etc/fstab (请谨慎修改,只要出现一个字符错误都有可能造成无法开机的后果)
设备的地址推荐使用唯一标识符UUID,使用临时标识符可能造成事故
[root@localhost opt]# vim /etc/fstab
在/etc/fstab 文件中,每一行记录对应一个分区或设备的挂载配置信息,这些信息从左到右包括六个字段(使用空格或制表符分隔),各部分的含义如下所述。
/dev/sdb1 /mnt xfs defaults 0 0
第 1 字段:设备名或设备卷标名。
第 2 字段:文件系统的挂载点目录的位置。
第 3 字段:文件系统类型,如 XFS、Swap 等。
第 4 字段:挂载参数,即mount 命令“-o”选项后可使用的参数。例如,defaults、rw、ro、noexec 分别表示默认参数、可写、只读、禁用执行程序。
第 5 字段:表示文件系统是否需要 dump 备份(dump 是一个备份工具)。一般设为 1时表示需要,设为 0 时将被 dump 忽略
第 6 字段:该数字决定在系统启动时进行磁盘检查的顺序。0 表示不进行检查,1 表示优先检查,2 表示其次检查。根分区应设为 1,其他分区设为 2。
通过在/etc/fstab 文件中添加相应的挂载配置,可以实现开机后自动挂载指定的分区。例如,执行以下操作将添加自动挂载分区/dev/sdb1 的配置记录