Linux 硬盘格式化

在 Linux 系统中,硬盘格式化是系统管理、数据存储和服务器部署中的一项基础且至关重要的操作。无论是为新硬盘准备存储空间,还是重新利用旧硬盘,亦或是修复损坏的文件系统,掌握正确的硬盘格式化流程都必不可少。与图形化操作系统的“一键格式化”不同,Linux 提供了强大而灵活的命令行工具,让管理员能够精确控制格式化的每一个细节。本文将详细介绍在 Linux 环境下对硬盘进行格式化的完整步骤、常用命令、注意事项以及最佳实践,帮助你安全、高效地完成这项任务。

1. 准备工作与风险警告

在开始格式化之前,必须进行充分的准备,因为格式化操作会永久删除目标磁盘或分区上的所有数据

1.1 确认磁盘设备

首先,使用 lsblkfdisk -l 命令列出所有块设备,以识别你要操作的硬盘。

lsblk

或者(需要 root 权限):

sudo fdisk -l

输出示例:

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 465.8G  0 disk
├─sda1   8:1    0   512M  0 part /boot/efi
├─sda2   8:2    0    16G  0 part [SWAP]
└─sda3   8:3    0 449.3G  0 part /
sdb      8:16   0   1.8T  0 disk

在这个例子中,sda 是系统盘(已分区),而 sdb 是一块全新的 1.8TB 硬盘,正是我们的目标。

关键点:务必根据磁盘大小(SIZE)和没有挂载点(MOUNTPOINT)来确认目标设备(例如 /dev/sdb)。操作错误的目标设备会导致灾难性的数据丢失。

1.2 备份重要数据

如果目标磁盘上存在需要保留的数据,务必先进行备份。可以使用 rsync, tardd 等工具。

1.3 卸载已挂载的分区

如果目标磁盘的任何分区已被挂载,必须先卸载。

# 查看挂载点
lsblk -f
# 卸载分区(例如 /dev/sdb1)
sudo umount /dev/sdb1

2. 分区(可选但推荐)

全新的硬盘通常需要先分区,再对每个分区进行格式化。对于小容量硬盘或特定用途(如交换分区),也可以直接格式化整个磁盘。

2.1 使用 fdisk 进行分区

fdisk 是一个经典的交互式分区工具。

sudo fdisk /dev/sdb

进入交互界面后,常用命令:

  • n: 创建新分区。
  • p: 打印分区表。
  • d: 删除分区。
  • t: 更改分区类型(例如,将分区类型改为 Linux filesystem83Linux swap82)。
  • w: 将更改写入磁盘并退出。
  • q: 不保存更改退出。

操作流程示例

  1. 输入 n 创建新分区。
  2. 选择分区类型(主分区 p 或扩展分区 e)。
  3. 设置分区号(如 1)。
  4. 设置起始扇区(通常直接回车使用默认值)。
  5. 设置结束扇区或大小(例如 +20G 表示创建 20GB 的分区)。
  6. 重复以上步骤创建更多分区。
  7. 输入 p 预览分区表。
  8. 确认无误后,输入 w 保存并退出。

2.2 使用 parted 进行分区(支持 GPT 和大容量磁盘)

对于超过 2TB 的硬盘,必须使用 GPT 分区表,parted 是更好的选择。

sudo parted /dev/sdb

(parted) 提示符下:

  • mklabel gpt: 创建 GPT 分区表(会清除所有现有分区)。
  • mkpart primary ext4 0% 100%: 创建一个占用整个磁盘的 ext4 主分区。
  • print: 显示分区信息。
  • quit: 退出。

2.3 让内核重新读取分区表

创建分区后,需要通知操作系统分区表已更改。

sudo partprobe /dev/sdb
# 或者
sudo udevadm settle

3. 格式化分区(创建文件系统)

分区完成后,下一步是在分区上创建文件系统,这就是通常所说的“格式化”。

3.1 格式化 ext4 文件系统(最常用)

ext4 是 Linux 上最稳定、最通用的日志文件系统。

sudo mkfs.ext4 /dev/sdb1

常用选项

  • -L:为文件系统设置卷标(Label),便于识别。
    sudo mkfs.ext4 -L “mydata” /dev/sdb1
  • -m:为超级用户保留的磁盘空间百分比(默认 5%)。对于大容量数据盘,可以降低此值。
    sudo mkfs.ext4 -m 1 /dev/sdb1 # 保留 1%

3.2 格式化 XFS 文件系统(适用于大文件)

XFS 在高性能、大文件场景下表现优异。

sudo mkfs.xfs /dev/sdb1

3.3 格式化 Btrfs 文件系统(支持高级功能)

Btrfs 提供了写时复制、快照、压缩等高级功能。

sudo mkfs.btrfs /dev/sdb1

3.4 创建交换分区(Swap)

如果创建了专门用于交换空间的分区(类型为 Linux swap),需要使用 mkswap 命令。

sudo mkswap /dev/sdb2
sudo swapon /dev/sdb2 # 立即启用该交换分区

要永久生效,需要在 /etc/fstab 中添加相应条目。

4. 挂载与自动挂载

格式化后的分区需要挂载到目录树(挂载点)才能使用。

4.1 临时挂载

sudo mkdir /mnt/mydata # 创建挂载点目录
sudo mount /dev/sdb1 /mnt/mydata

使用 df -h 命令检查是否挂载成功。

4.2 配置自动挂载(/etc/fstab)

为了让系统在启动时自动挂载,需要编辑 /etc/fstab 文件。

  1. 获取分区的 UUID(推荐使用 UUID,比设备名更稳定):

    sudo blkid /dev/sdb1

    输出类似:/dev/sdb1: UUID="a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8" TYPE="ext4"

  2. 备份并编辑 /etc/fstab

    sudo cp /etc/fstab /etc/fstab.backup
    sudo nano /etc/fstab

  3. 在文件末尾添加一行(以 ext4 为例):

    UUID=a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8 /mnt/mydata ext4 defaults 0 2
    • 第一字段:设备(这里用 UUID)。
    • 第二字段:挂载点。
    • 第三字段:文件系统类型。
    • 第四字段:挂载选项(defaults 包含 rw, suid, dev, exec, auto, nouser, async)。
    • 第五字段:dump 备份标志(0 表示不备份)。
    • 第六字段:开机磁盘检查顺序(根目录 / 应为 1,其他数据盘通常为 2 或 0)。

  4. 测试配置是否正确(避免导致系统无法启动):

    sudo mount -a

    如果没有报错,则配置成功。

5. 高级操作与故障排除

5.1 检查与修复文件系统

如果文件系统出现错误(例如非法关机),可以使用 fsck 工具进行检查和修复。务必先卸载分区

sudo umount /dev/sdb1
sudo fsck.ext4 -f /dev/sdb1 # -f 强制检查即使文件系统看起来是干净的

对于 XFS,使用 xfs_repair

sudo xfs_repair /dev/sdb1

5.2 调整文件系统参数

  • 调整 ext4 保留空间:格式化后仍可调整。
    sudo tune2fs -m 1 /dev/sdb1 # 将保留空间改为 1%
  • 查看文件系统信息
    sudo dumpe2fs /dev/sdb1 | less

5.3 安全擦除磁盘数据

简单的格式化并不会彻底清除数据。如需安全擦除,可使用 shreddd 命令。

# 使用随机数据覆盖整个磁盘(速度慢,但安全)
sudo shred -v -n 1 /dev/sdb
# 或使用零填充
sudo dd if=/dev/zero of=/dev/sdb bs=4M status=progress

警告:此操作不可逆,且会破坏分区表和所有数据。

总结

Linux 硬盘格式化的核心流程可以概括为:识别设备 → (可选)分区 → 创建文件系统 → 挂载使用。关键在于:

  1. 谨慎操作:始终双重确认目标设备(/dev/sdX)。
  2. 理解工具:根据磁盘大小和用途选择 fdisk(MBR)或 parted(GPT)。
  3. 选择合适的文件系统:日常使用选 ext4,大文件/高性能选 XFS,需要高级功能选 Btrfs
  4. 规范配置:使用 UUID 在 /etc/fstab 中配置自动挂载,提高系统稳定性。

掌握这些命令和概念,你就能从容应对 Linux 环境下的各种存储管理任务。建议在非关键系统或虚拟机上多加练习,以熟悉整个流程。