封面来源:https://i-blog.csdnimg.cn/blog_migrate/de332fd24eeab330cfbc616dc8c2ab98.png
磁盘(又叫硬盘)在计算机内是一个不可或缺的组成部分,没有硬盘,我们甚至都无法安装和存放系统、资料等文件。一般来说,我们日常接触到的硬盘分为机械硬盘(HDD)和固态硬盘(SSD)两种:机械硬盘按照磁道排列分为 CMR(传统磁记录,又叫垂直磁记录)和 SMR(叠瓦磁记录),主要由盘片(存放数据)、磁头(读取数据)、转轴、控制电机、缓存、接口(最多的是 SATA)组成;而固态硬盘按颗粒堆叠分为 SLC、MLC、TLC(主流)和 QLC 等(到目前为止,传闻中的 PLC 几乎已经难产),由主控、颗粒、接口、缓存(对于某些固态硬盘,例如宏碁掠夺者 GM9000 和西数 SN850X 等)等组成,主要使用的接口是 NVMe,以及老电脑升级常用的 SATA.
然而,光知道这些还是不够的(甚至很多人还不一定看得懂),写这么多只是作为背景板而已。今天我们要揭秘的,是关于如何在 Linux 管理磁盘的问题。
硬盘的接口和分区类型
Linux 内核对以不同方式连接的硬盘有着不同命名:
其中,x 从 a 开始命名(设备名称),而 X 和 Y, y, Z 分别从 0 和 1 开始命名(X 为设备名称,Y 为固态硬盘的命名空间,其余为分区名称)。例如(这里针对 NVMe 类型只是象征性的创建了两个硬盘,实际远远不止这么小!):

从分区类型上说,硬盘的分区分为传统的 MBR 和现代的 GPT(不是 ChatGPT)两种。
MBR
全称是 Master Boot Record(主引导记录),是一种传统的硬盘分区方式。它使用位于硬盘最开始的引导扇区来存储分区信息和引导程序。MBR 支持最多 4 个主分区(或 3 个主分区 + 1 个扩展分区),最大支持 2TB 的硬盘容量,且分区信息没有冗余备份,一旦损坏可能导致数据丢失。
GPT
全称是 GUID Partition Table(GUID 分区表),是一种现代的分区方案。它使用全局唯一标识符(GUID)来标识分区,支持几乎无限数量的分区(通常操作系统限制为 128 个),最大支持 18EB 的硬盘容量。GPT 在磁盘的首尾均有分区表备份,提供更好的数据安全性,且与 UEFI 固件配合使用,支持更快的启动和更多的硬件功能。目前已经被广泛采用。
查看和添加硬盘
特别提醒:添加硬盘前,一定要关机!!防止插上瞬间的大电流击穿硬盘导致报废!!(热插拔 4090……)某些服务器明确说了支持热插拔的可以不用看这条。
添加硬盘的操作是没有什么技术含量的,只需要将硬盘插入对应的接口:
SATA:
确保主机已断电(不只是关机),并拔掉电源线。
打开机箱,找到空闲的 SATA 数据接口和电源接口。
将 SATA 数据线一端连接主板或转接板上的 SATA 接口,另一端连接硬盘较小的数据口。
从电源引出 SATA 供电线,连接到硬盘较大的电源口。
将硬盘固定到硬盘托架或机箱硬盘位。
装好机箱,接通电源并开机。
进入系统后,在终端内运行
lsblk/fdisk -l以查看新硬盘,使用cfdisk以初始化硬盘,或使用gparted等磁盘管理工具。
NVMe M.2:
同样确保主机完全断电。
将机箱放平,找到主板上的 M.2 插槽(通常位于 CPU 附近或主板边缘,右边有很短一截的“金手指”)。
卸下插槽固定螺丝或卡扣,将 NVMe 硬盘金手指对齐插槽上的缺口(防呆口),以与主板成约 30 度角插入。
轻轻下压硬盘并用螺丝或卡扣固定(如有可能,请使用硬盘垫片以防止厚重的金属散热片压弯硬盘)。
装回机箱侧板,接通电源开机。
进入系统后,同样通过磁盘管理工具或命令行识别并格式化新硬盘。
下面来讲一下如何查看硬盘。
Linux 提供了 lsblk 和 fdiskl -l 方便我们查看当前系统内的硬盘。以 lsblk 为例,它显示的不同硬盘类型(TYPE)有:
创建分区表和(格式化)文件系统
fdisk + mkfs
在 Linux 内有一个可以同时创建 MBR 和 GPT 分区表的软件包,叫做 fdisk.
如果要为某个存储设备(不是分区!)建立分区表,则应该使用 fdisk /dev/xxx,进入命令行后使用命令创建。
这里,我们以创建 /dev/nvme0n1 的 GPT 分区表,并将其格式化为 ext4 文件系统(没办法,即使是 CentOS 10 Stream,也不支持 btrfs)为例,详细说明使用 fdisk 的具体步骤。
(我为什么不用 MBR 分区表,是因为它的局限性非常多,况且现在很多系统都已经广泛使用 GPT。现在再去讲一个即将被淘汰的东西只能说是毫无意义,就像 X11 和 Wayland)
提醒:在开始之前,请先备份硬盘上的所有数据!!重建分区表和格式化相当于摧毁硬盘原有数据!!
首先,在终端中输入命令 fdisk /dev/nvme0n1 打开 fdisk 的界面:

这里显示“包含 exFAT 签名”是因为我在使用 fdisk 之前已经将该设备格式化为了 exFAT 文件系统。
接下来,键入 g 以创建 GPT 分区表:

然后,我们键入 n 创建一个新分区:

因为我们只分一个分区,所以这里分区数目设定为 1.
使用 p 查看分区情况:

如果感觉不满意的话,可以再返回更改,因为目前所有操作都在内存中,尚未写入磁盘。否则,请输入 w 确认:

写入完成后,会自动退出 fdisk 程序。
接下来,完成分区后,我们需要在新分区上创建 ext4 文件系统。我们先查看磁盘的分区情况:

为了创建特定类型的文件系统,我们需要使用 mkfs 软件包。这个软件包提供了很多可用的文件系统选项(包括传统的 ext3, ext4, zfs, xfs, 较新的 btrfs 和 bcachefs, 以及通用的 FAT32 和 exFAT, 甚至 Microsoft Windows 上的 NTFS),可以根据需要使用。
下面我们在仅有的(一个!)分区上创建 ext4 文件系统:
mkfs.ext4 -L YourDiskLabel /dev/nvme0n1p1其中 -L YourDiskLabel 是可选部分。结果应该像下面这样:

检查一下硬盘和分区情况:

这样就大功告成了!
cfdisk/gparted/gnome-disk-manager
这些工具呈现的界面比较直观,有些还是图形化界面,上手难度比较低,网上教程也很多,我们就不再展开细说了。
但为了保险起见,大概说几点:
cfdisk 在硬盘未建立分区表时,会立即询问分区表的类型,而后两者只会显示一个灰色的“长条”(也就是未建立分区表的硬盘)。
gnome-disk-manager 是操作后立即生效的,不像前二者。
下一节的内容
下一节的内容是 Linux 磁盘管理的重难点之一,包括以下内容:
临时挂载分区
挂载时启用 btrfs 的 zstd 压缩
永久挂载分区
交换分区
这些部分涉及到修改系统配置,因此请务必小心。祝君好运!