封面来源: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 内核对以不同方式连接的硬盘有着不同命名:

显示名称

含义

/nvmeXnYpZ

通过 NVMe M.2 接口连接到主板上的固态硬盘

/sdxy

通过 SATA(串口)或者 USB 接口连接到主板上的硬盘

/hdxy

通过 IDE(并口)接口连接到主板上的机械硬盘

其中,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:

  1. 确保主机已断电(不只是关机),并拔掉电源线。

  2. 打开机箱,找到空闲的 SATA 数据接口和电源接口。

  3. 将 SATA 数据线一端连接主板或转接板上的 SATA 接口,另一端连接硬盘较小数据口

  4. 电源引出 SATA 供电线,连接到硬盘较大电源口

  5. 将硬盘固定到硬盘托架或机箱硬盘位。

  6. 装好机箱,接通电源并开机。

  7. 进入系统后,在终端内运行 lsblk/fdisk -l 以查看新硬盘,使用 cfdisk 以初始化硬盘,或使用 gparted 等磁盘管理工具。

NVMe M.2:

  1. 同样确保主机完全断电

  2. 将机箱放平,找到主板上的 M.2 插槽(通常位于 CPU 附近或主板边缘,右边有很短一截的“金手指”)。

  3. 卸下插槽固定螺丝或卡扣,将 NVMe 硬盘金手指对齐插槽上的缺口(防呆口),以与主板成约 30 度角插入。

  4. 轻轻下压硬盘并用螺丝或卡扣固定(如有可能,请使用硬盘垫片以防止厚重的金属散热片压弯硬盘)。

  5. 装回机箱侧板,接通电源开机。

  6. 进入系统后,同样通过磁盘管理工具或命令行识别并格式化新硬盘。

下面来讲一下如何查看硬盘。

Linux 提供了 lsblkfdiskl -l 方便我们查看当前系统内的硬盘。以 lsblk 为例,它显示的不同硬盘类型(TYPE)有:

类型

含义

disk

一整块磁盘

part

磁盘的分区(partition)

lvm

Linux LVM 逻辑卷

rom

只读(Read-Only)存储介质(例如 CD-ROM)

创建分区表和(格式化)文件系统

fdisk + mkfs

在 Linux 内有一个可以同时创建 MBR 和 GPT 分区表的软件包,叫做 fdisk.

如果要为某个存储设备(不是分区!)建立分区表,则应该使用 fdisk /dev/xxx,进入命令行后使用命令创建。

这里,我们以创建 /dev/nvme0n1GPT 分区表,并将其格式化为 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

这些工具呈现的界面比较直观,有些还是图形化界面,上手难度比较低,网上教程也很多,我们就不再展开细说了。

但为了保险起见,大概说几点:

  1. cfdisk 在硬盘未建立分区表时,会立即询问分区表的类型,而后两者只会显示一个灰色的“长条”(也就是未建立分区表的硬盘)。

  2. gnome-disk-manager 是操作后立即生效的,不像前二者。

下一节的内容

下一节的内容是 Linux 磁盘管理的重难点之一,包括以下内容:

  • 临时挂载分区

  • 挂载时启用 btrfs 的 zstd 压缩

  • 永久挂载分区

  • 交换分区

这些部分涉及到修改系统配置,因此请务必小心。祝君好运!

C/C++ 新人开发者,主攻 UE5,业余 Linux 运维