磁盘基础
磁盘简述与分类
磁盘是计算机中用于存储数据的重要硬件设备,它能够长期保存数据,并在需要时快速读取或写入数据。磁盘的发展经历了从早期的软盘、硬盘驱动器(HDD)到现在的固态硬盘(SSD)等多个阶段,每种磁盘都有其独特的特点和用途。
1. 软盘(Floppy Disk)
软盘是最早的可移动存储介质之一,因其柔软的盘片而得名。它通常被封装在一个方形的塑料外壳中,通过磁盘驱动器进行读写操作。软盘的存储容量较小,常见的有3.5英寸1.44MB和5.25英寸360KB/1.2MB等规格。随着其他存储介质的兴起,软盘已经逐渐退出市场。
2. 硬盘驱动器(Hard Disk Drive, HDD)
硬盘驱动器是目前最常见的磁盘类型,它是计算机中的主要存储设备。HDD通过磁头在旋转的磁盘表面读写数据,实现数据的长期保存和快速访问。HDD的存储容量从几十GB到几TB不等,且价格相对便宜,因此在很长一段时间内都是计算机存储的主流选择。不过,HDD的读写速度相对较慢,且容易受到震动和磁场的影响。
3. 固态硬盘(Solid State Drive, SSD)
固态硬盘是近年来兴起的新型存储设备,它采用闪存芯片作为存储介质,没有机械结构,因此具有更快的读写速度、更低的能耗、更强的抗震能力和更小的噪音。SSD的容量也在不断增加,价格逐渐下降,正在逐步取代HDD成为计算机和数据中心的主流存储方案。不过,SSD的价格通常比同容量的HDD要高一些。
磁盘的主要特点
- 存储容量大:现代磁盘的存储容量已经可以达到TB级别,能够存储大量的数据。
- 读写速度快:尤其是SSD,其读写速度远高于HDD,能够大幅提升计算机的整体性能。
- 持久性:磁盘能够长期保存数据,即使断电也不会丢失。
- 可移动性:部分磁盘(如移动硬盘、U盘等)具有可移动性,方便用户在不同设备之间传输数据。
磁盘的结构
磁盘的物理结构
盘片:硬盘有多个盘片,每篇两面
磁头:每面一个磁头
磁盘的数据结构
扇区:盘片被分为多个扇形区域,每个扇区存放512字节的数据,硬盘的最小存储单位。一个block块由多个扇区组成
磁道:同一盘片不同半径的同心圆,是由磁头在盘片表面划出的圆形轨迹
柱面:不同盘片相同半径构成的圆柱面,由同一半径圆的多个磁道组成
磁盘分区表示
MBR与磁盘分区表示
主引导记录(MBR:Master Boot Record)
定义与位置:
MBR位于硬盘的第一个物理扇区(即0柱面0磁头1扇区,也被称为MBR扇区),它是一段引导程序,用于检测磁盘的分区合法性和加载操作系统。MBR并不属于任何操作系统,而是在操作系统安装时写入硬盘的。
MBR由三个部分组成:
- 主引导程序:占用主引导扇区的前446字节,用于引导操作系统启动。
- 分区表(DPT):紧随主引导程序之后的64字节,记录了硬盘的分区信息,包括分区的起始位置、结束位置、类型等。由于每个分区的信息占用16字节,因此分区表只能定义4个分区记录。
- 结束标志:最后两个字节恒为55AA,表示MBR的结束。
作用:
MBR的主要作用是识别活动分区(即启动分区),并引导操作系统启动。当计算机启动时,BIOS会加载并执行MBR中的主引导程序,该程序会检查分区表,找到活动分区,并加载该分区上的操作系统引导程序,从而启动操作系统。
补充:
- MBR位于硬盘第一个物理扇区处
- MBR中包含硬盘的主引导程序和硬盘分区表
- 分区表有4个分区记录区,每个分区记录区占16个字节,1-2047
- Linux中将硬盘、分区等设备均表示为文件
磁盘分区
定义:
磁盘分区是将硬盘分割成若干个逻辑部分的过程,每个部分可以独立使用和管理。分区后的硬盘区域被称为磁盘分区,它们可以存储不同类型的文件和目录。
类型:
在传统的磁盘管理中,一个硬盘通常被分为两大类分区:主分区和扩展分区。
- 主分区:是能够安装操作系统、进行计算机启动的分区。一个硬盘上最多可以有4个主分区(受MBR分区表容量的限制)。
- 扩展分区:不能直接使用,必须进一步划分为逻辑分区。逻辑分区的数量没有限制(但实际上受限于操作系统的支持)。
文件系统:
分区上的数据和文件通过文件系统来组织和管理。不同的操作系统支持不同的文件系统类型,如Windows常用的NTFS、FAT32等,Linux常用的EXT4、XFS等。
MBR与磁盘分区的关系
MBR是磁盘分区信息的存储载体之一,它包含了硬盘的分区表,记录了分区的起始位置、结束位置、类型等关键信息。因此,MBR的状态直接影响到磁盘分区的识别和操作系统的启动。如果MBR被损坏或覆盖,可能会导致计算机无法识别硬盘分区,从而无法启动操作系统。
总的来说,MBR是磁盘分区系统中的重要组成部分,它负责引导操作系统启动并管理硬盘的分区信息。而磁盘分区则是硬盘存储和管理数据的基本单位,通过不同的分区和文件系统来组织和保护数据。
/dev/sdb5
hd
表示IDE设备
sd
表示SCSI设备
硬盘的顺序号以字母a、b、c…表示
分区的顺序号以数字1、2、.3…表示。主分区从1-4,第一个逻辑分区始终从5开始
示例:
- 第1个主分区
/dev/hda1
- 第2个主分区
Idev/hda2
- 第1块IDE硬盘设备
Idev/hda
扩展分区:
- 第1个逻辑分区
Idev/hda5
- 第2个逻辑分区
Idev/hda6
补充
硬盘存储容量=磁头数x磁道(柱面)数x每道扇区数x每扇区字节数(512字节)
可以用柱面/磁头/扇区来唯一定位磁盘上每一个区域
磁盘接口类型:IDE、SATA、SCSI、SAS、光纤通道
文件系统
文件系统是操作系统中用于明确存储设备(如磁盘、固态硬盘等)或分区上的文件的方法和数据结构。它是操作系统中负责管理和存储文件信息的软件机构,通过文件系统,用户可以方便地创建、删除、读写文件,并对文件的存储空间进行管理。
一、文件系统的定义与组成
- 定义:文件系统是操作系统中用于组织和存取文件数据的结构、方法和接口的总称。它为用户和程序提供了一个统一的、层次化的文件视图,使得用户可以方便地存取数据。
- 组成:文件系统通常由文件系统的接口、对对象操纵和管理的软件集合、对象及属性三部分组成。其中,接口是用户与文件系统交互的桥梁,软件集合负责文件的具体管理操作,而对象及属性则描述了文件的实际存储结构和内容。
二、文件系统的功能
- 文件管理:能够按照用户要求创建新文件、删除老文件、对指定的文件进行读写操作等。
- 目录管理:根据用户要求创建或删除目录文件,对用户指定的文件进行检索和权限验证,更改工作目录等。
- 文件存储空间的管理:由文件系统对文件存储空间进行统一管理,包括分配和回收存储空间等。
- 文件的共享和保护:在系统控制下使一个用户可共享其它用户的文件,同时提供可靠的保护和保密措施,确保文件的安全性和完整性。
- 提供方便的接口:为用户提供统一的文件方式,实现“按名存取”,简化用户操作。
三、文件系统的类型
- ext2/ext3/ext4:Linux系统中常用的文件系统,其中ext3是ext2的升级版,增加了日志功能以提高系统恢复能力;ext4是ext3的后续版本,提供了更多的性能和可靠性改进。
- NTFS:Windows NT/XP/Vista/7/8/10等操作系统采用的文件系统,支持大文件、长文件名、数据恢复和安全性等特性。
- FAT/FAT32:早期Windows操作系统中常用的文件系统,简单易用但性能有限,不支持大文件和长文件名等特性。
- ISO9660:大部分光盘所采用的文件系统,主要用于存储和读取光盘上的数据。
- NFS(网络文件系统):由SUN公司发明,主要用于远程文件共享,支持多用户同时访问和修改文件。
检测并确认新硬盘
1. 查看所有连接的硬盘
-
使用
lsblk
:lsblk
这个命令会列出所有可用的存储设备及其分区,以树状图的形式显示。
-
使用
fdisk -l
:fdisk -l
这个命令会列出所有硬盘的分区表,包括硬盘的大小、类型、分区等信息。注意,
fdisk
可能需要管理员权限来查看所有硬盘。
2. 确认新硬盘
通过比较硬盘的序列号、大小或设备名(如/dev/sda
、/dev/sdb
等),你可以识别出新添加的硬盘。如果之前你已经知道硬盘的型号或序列号,那么这个过程会更容易。
规划硬盘中的分区
1. 格式化硬盘&创建文件系统
如果新硬盘尚未分区或格式化,你可能需要先对其进行分区和格式化。这可以通过fdisk
、parted
或gparted
(图形界面)等工具来完成。
- 使用
fdisk
进行分区:
其中sudo fdisk /dev/sdx
/dev/sdx
是你的新硬盘的设备名。然后,按照提示进行分区操作。
x
可为a/b/c/d
- 格式化分区:
分区后,你需要对每个分区进行格式化。例如,使用mkfs.ext4
来格式化分区为ext4文件系统:mkfs.ext4 /dev/sdxn
/dev/sdxn
是具体的分区设备名
x
可为a/b/c/d
n
可为1/2/3/4/..
如/dev/sdb1
磁盘分区工具 fdisk
fdisk是一个在Linux系统中广泛使用的磁盘分区工具,全称是“Partition table manipulator for Linux”,即Linux分区表操作工具。
一、功能与作用
- 分区管理:fdisk允许用户对硬盘进行分区操作,包括创建新的分区、删除分区、修改分区大小等。
- 兼容性强:它兼容DOS类型的分区表、BSD或SUN类型的磁盘列表,为用户提供了灵活的分区选项。
- 维护分区表:fdisk不仅可以用于分区操作,还可以用来维护和修改分区表。
二、常用参数与命令
常用选项 | 含义 |
---|---|
-l | 列出指定设备的分区表。这是fdisk最常用的参数之一,用于查看当前硬盘的分区情况。 |
-v | 显示版本信息。 |
m | 在fdisk的主操作界面中,输入m可以显示菜单和帮助信息。 |
n | 新建分区。用户可以选择创建主分区、扩展分区或逻辑分区。 |
d | 删除分区。在分区表中选择要删除的分区编号并执行。 |
p | 显示分区表信息。这个命令会显示当前硬盘的所有分区信息。 |
w | 保存并退出。在确认分区操作无误后,使用这个命令将分区表写入磁盘并退出fdisk。 |
q | 不保存退出。如果在分区过程中遇到问题或想要取消分区操作,可以使用这个命令退出fdisk而不保存任何更改。 |
三、操作流程
- 启动fdisk:在终端中输入
fdisk [设备名]
,例如fdisk /dev/sda
,来启动fdisk并对指定的硬盘设备进行分区操作。 - 查看分区表:使用
-l
参数或p
命令来查看当前硬盘的分区情况。 - 新建分区:使用
n
命令来创建新的分区。根据需要选择创建主分区、扩展分区或逻辑分区,并设置分区的大小和位置。 - 删除分区:如果需要删除某个分区,可以使用
d
命令并选择要删除的分区编号。 - 保存并退出:在确认分区操作无误后,使用
w
命令将分区表写入磁盘并退出fdisk。
创建文件系统-mkfs(make filesystem)
mkfs 是一个在Unix和类Unix系统中用于在设备上创建文件系统的命令。它的全名是 “make filesystem” 的缩写,意思是创建文件系统。这个命令允许用户指定设备(如硬盘分区、USB驱动器、SD卡等)和要创建的文件系统类型(如ext2、ext3、ext4、xfs、btrfs、vfat等)。
使用方法
基本的 mkfs
命令格式如下:
mkfs -t [文件系统类型] [设备名]
或者,对于某些文件系统类型,可以直接使用特定于该类型的格式化命令,如 mkfs.ext4
、mkfs.xfs
等。
示例
- 将
/dev/sdb1
分区格式化为ext4文件系统:
或者,使用mkfs.ext4 /dev/sdb1
mkfs
并指定文件系统类型:mkfs -t ext4 /dev/sdb1
- 将
/dev/sdc
整个磁盘格式化为FAT32文件系统(常用于USB驱动器或SD卡):
注意:格式化整个磁盘时(而不是分区),请确保没有挂载任何分区,并且你确实想要格式化整个磁盘。mkfs.vfat /dev/sdc
注意
- 数据丢失:格式化设备会删除该设备上的所有数据。在执行此操作之前,请确保已备份所有重要数据。
- 设备名称:在指定设备名称时,请确保你正在格式化正确的设备。错误的设备名称可能导致数据丢失或系统损坏。
- 文件系统类型:根据你的需求和设备的用途,选择适当的文件系统类型。例如,对于现代Linux系统,ext4是一个流行的选择,因为它提供了良好的性能和兼容性。而FAT32或NTFS则常用于与Windows系统兼容的USB驱动器或SD卡。
- 权限:通常,你需要root权限来执行
mkfs
命令。你可以使用sudo
命令来获取必要的权限。
挂载、卸载文件系统
1. 挂载硬盘
格式化后,你需要挂载硬盘才能访问它。
mkdir /mnt/newdisk
mount /dev/sdxn /mnt/newdisk
将/dev/sdxn
替换为你的分区设备名,/mnt/newdisk
是挂载点,可根据需要选择或创建挂载点。
2. 验证挂载
df -hT
命令用于显示文件系统的磁盘空间占用情况。这个命令通过结合-h和-T选项,以更易读的方式(人类可读的格式)展示磁盘空间的使用情况,并同时显示文件系统的类型。
-h 选项:表示以人类可读的格式(如KB、MB、GB)显示文件大小,使得输出的结果更加直观易懂。
-T 选项:表示在输出中显示文件系统的类型。这对于了解不同分区或磁盘使用的文件系统类型非常有用。
df -hT
附加:自动挂载硬盘(可选)
Linux 操作系统在每次开机时,会自动读取/etc/fstab
文件的内容,自动挂载所指定的文件系统。
vim /etc/fstab
/dev/sdb1 /opt xfs defaults 0 0
/dev/sr0 /mnt iso9660 defaults 0 0
- 第1字段
/dev/sdb1
:分区名或设备卷标名。 - 第2字段
/opt
:文件系统的挂载点目录的位置。 - 第3字段
xfs
:文件系统类型,如 xfs、swap 等。 - 第4字段
defaults
:挂载参数,即mount命令“-o”选项后可使用的参数。例如,defaults(默认参数)、rw(可读写)、ro(只读)、noexec(禁用执行程序)。 - 第5字段
0
:表示文件系统是否需要 dump 备份(dump 是一个备份工具)。一般设为1时表示需要,设为0时将被dump 忽略。 - 第6字段
0
:该数字决定在系统启动时进行磁盘检查的顺序。0表示不进行检查,1表示优先检查,2表示其次检查。根分区应设为 1,其他分区设为 2。
检查挂载
mount -a
卸载文件系统
解挂载
umount [选项] 挂载点/设备
强制解挂载:
umount -f 挂载点/设备
swap - 交换分区
交换分区(Swap Partition)是Linux系统中的一个重要功能,它类似于Windows系统的虚拟内存(pagefile.sys),用于在物理内存(RAM)不足时,将暂时不使用的数据或进程从RAM转移到硬盘上的特定区域,从而扩展系统的可用内存空间。
一、交换分区的作用
- 虚拟内存扩展:当RAM被充分利用时,操作系统会将不常访问的数据或进程临时存储在交换分区中,以增加系统的虚拟内存,允许用户同时运行更多应用程序。
- 提高系统稳定性:如果系统耗尽物理RAM,可能会导致系统变得不稳定甚至崩溃。交换分区作为RAM的溢出空间,有助于防止这种情况的发生。
- 优化繁重工作负载处理:对于需要大量内存资源的任务,交换分区可以帮助系统更有效地处理这些工作负载,提高系统的响应能力和性能。
二、交换分区的创建与管理
在Linux系统中,创建和管理交换分区通常需要root权限,并遵循以下步骤:
- 检查磁盘空间:确保硬盘上有足够的可用空间来创建交换分区。
- 使用fdisk或parted等工具创建分区:将一部分硬盘空间划分为交换分区。在分区过程中,需要选择适当的分区类型(对于交换分区,通常是Linux swap类型)。
- 格式化交换分区:使用
mkswap
命令对新建的交换分区进行格式化。 - 启用交换分区:使用
swapon
命令启用交换分区,使其在系统运行时可用。 - 配置自动挂载:将交换分区的信息添加到
/etc/fstab
文件中,以便在系统启动时自动挂载交换分区。
三、交换分区的优缺点
优点:
- 提高系统稳定性和响应能力。
- 允许系统同时运行更多应用程序。
- 优化繁重工作负载处理。
缺点: - 过度使用交换分区(即“抖动”)会降低系统性能。
- 在固态硬盘(SSD)上频繁写入交换分区会增加SSD的磨损,缩短其使用寿命(尽管SSD的寿命通常很长,但频繁写入仍是一个潜在问题)。
- 管理交换分区可能比管理交换文件更复杂。
- 交换分区可能随着时间的推移而变得碎片化,影响系统性能。
四、注意事项
- 在决定是否需要交换分区以及交换分区的大小时,应根据系统的实际内存大小、使用场景和性能需求来综合考虑。
- 对于具有大量内存的现代系统来说,可能不需要或只需要较小的交换分区。
- 定期检查交换分区的使用情况,并根据需要进行调整和优化。
综上所述,交换分区是Linux系统中一个非常重要的功能,它对于提高系统稳定性、响应能力和处理繁重工作负载具有重要作用。然而,在使用交换分区时也需要注意其潜在的缺点和限制。
创建交换文件系统(详细版)
创建swap之前,目标分区应先通过fdisk 工具将分区类型ID 号设为 82
fdisk /dev/sdb
-->t
-->5
-->82
mkswap /dev/sdb5
启用新增加的交换分区:
swapon /dev/sdb5
停用指定的交换分区:
swapoff /dev/sdb5
查看每个分区的swap状态信息:
swapon -s
查看总的swap状态信息:
free -m
挂载 mount
命令
mount
命令是Linux和类Unix系统中用于挂载文件系统的重要命令。通过mount
命令,用户可以将存储设备(如硬盘分区、CD-ROM、USB驱动器或网络共享)的文件系统关联到当前文件系统的某个目录上,从而通过该目录访问存储设备中的数据。
基本语法
mount
命令的基本语法如下:
mount [-选项] 设备名 挂载点
或
mount -t 文件系统类型 [-选项] 设备名 挂载点
常用选项
常用选项 | 含义 |
---|---|
-a | 挂载/etc/fstab文件中定义的所有未挂载的文件系统。 |
-f | 不实际执行挂载操作,通常与-v 一起使用来测试或调试挂载命令。 |
-F | 结合-a 使用时,对于每一个挂载动作产生一个子进程执行挂载,有助于加快大量挂载操作的速度。 |
-h | 显示帮助信息。 |
-n | 不将挂载信息写入/etc/mtab文件,这个选项在某些特殊情况下,例如没有可写文件系统时有用。 |
-r | 以只读模式挂载文件系统。 |
-t vfstype | 指定文件系统的类型,例如ext4、xfs、nfs、cifs等。如果不指定,mount命令会自动选择正确的类型。 |
-o options | 设置挂载选项,可以是多个选项,用逗号分隔,比如rw表示读写权限,noatime表示不更新文件的访问时间戳,defaults表示使用默认选项等。 |
使用示例
- 挂载USB驱动器
假设你有一个USB驱动器,其设备文件名为/dev/sdb1
,你想将其挂载到/mnt/usb
目录上,可以使用以下命令:
如果系统不能自动识别文件系统类型,你可以指定文件系统类型,例如:mount /dev/sdb1 /mnt/usb
mount -t vfat /dev/sdb1 /mnt/usb
- 挂载光盘镜像文件
如果你想挂载一个ISO光盘镜像文件,可以使用-o loop
选项将其作为一个循环设备挂载。例如,将/path/to/image.iso
镜像文件挂载到/mnt/cdrom
目录上:mount -o loop /path/to/image.iso /mnt/cdrom
- 查看已挂载的文件系统
要查看当前系统中已挂载的所有文件系统,可以不带任何参数运行mount
命令:
这将列出所有已挂载的文件系统,包括设备文件名、挂载点、文件系统类型和挂载选项等信息。mount
注意
- 在使用
mount
命令之前,请确保挂载点目录已经存在。如果目录不存在,可以使用mkdir
命令创建。 - 如果挂载点目录中有重要数据,请确保在挂载前将其备份,因为挂载操作可能会隐藏或覆盖原有数据。
- 在卸载设备时,应使用
umount
命令,并提供挂载点作为参数。例如,要卸载/mnt/usb
目录上的设备,可以使用umount /mnt/usb
命令。
检查文件系统的磁盘空间占用情况 df
(disk free)
df
(disk free)命令是Linux和类Unix系统中用于检查文件系统的磁盘空间占用情况的工具。它显示每个已挂载文件系统的总空间、已用空间、剩余空间、已用百分比和挂载点。这对于了解磁盘使用情况、规划磁盘空间以及诊断磁盘空间不足的问题非常有用。
基本语法
df [选项] [文件或目录...]
如果不指定任何文件或目录作为参数,df
命令将显示所有已挂载文件系统的磁盘空间使用情况。
常用选项
常用选项 | 含义 |
---|---|
-h | 以人类可读的格式(如KB、MB、GB)显示文件大小。 |
-T | 显示文件系统的类型。 |
-a | 包括所有文件系统的磁盘空间使用情况,而不仅仅是已挂载的。 |
-i | 显示inode信息而非块大小信息。inode是Linux系统中用于存储文件元数据的数据结构。 |
--total | 在输出末尾添加总计行。 |
使用示例
-
查看所有已挂载文件系统的磁盘空间使用情况
以人类可读的格式显示所有已挂载文件系统的磁盘空间占用情况。df -h
-
查看特定文件或目录所在的文件系统的磁盘空间使用情况
df -h /path/to/file_or_directory
-
显示文件系统的类型和磁盘空间使用情况
df -hT
-
包括所有文件系统的磁盘空间使用情况(包括未挂载的)
使用-a
选项将显示所有文件系统的磁盘空间使用情况,但请注意,未挂载的文件系统可能不包含有用的信息或可能以特殊方式显示。
df -ah
- 显示inode信息
df -i
注意
df
命令报告的是已分配空间的大小,而不是磁盘上的实际数据大小。这意味着,即使删除了文件,如果它们所占用的空间尚未被其他文件重新使用,df
报告的已用空间大小也不会立即减少。- 对于使用某些类型的文件系统(如NFS)的挂载点,
df
可能无法准确报告磁盘空间使用情况,因为这些文件系统的磁盘空间可能由远程服务器管理。