前言
在 Linux 系统运维中,磁盘管理是最基础也是最重要的技能之一。无论是新服务器上线、磁盘扩容,还是数据盘挂载,都离不开磁盘分区、格式化和挂载操作。本文将详细介绍 Linux 下磁盘管理的完整流程,涵盖 fdisk 分区、ext4/xfs 格式化、fstab 配置以及 UUID 挂载等核心内容。
1. 磁盘基础概念
1.1 磁盘命名规则
在 Linux 中,磁盘设备通常遵循以下命名规则:
- IDE 硬盘:
/dev/hda,/dev/hdb... - SATA/SCSI/SAS 硬盘:
/dev/sda,/dev/sdb... - NVMe SSD:
/dev/nvme0n1,/dev/nvme1n1... - 虚拟磁盘:
/dev/vda,/dev/vdb...
其中:
sd= SCSI disk(如今泛指所有 SATA/SAS 硬盘)a,b,c... 表示第几块磁盘1,2,3... 表示第几个分区
1.2 分区表类型
| 分区表类型 | 最大磁盘 | 最大分区数 | 说明 |
|---|---|---|---|
| MBR | 2TB | 4 个主分区 | 传统分区表,兼容性好 |
| GPT | 18EB | 128+ 分区 | 新型分区表,支持大磁盘 |
2. 查看磁盘信息
在操作磁盘之前,先确认当前系统的磁盘状态:
# 查看所有磁盘和分区
lsblk
# 查看磁盘详细信息
fdisk -l
# 查看磁盘使用情况
df -h
# 查看块设备属性
blkid示例输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part /
sdb 8:16 0 500G 0 disk说明:
sdb是一块 500G 的新磁盘,尚未分区,我们将对其进行操作。
3. 使用 fdisk 进行分区
fdisk 是 Linux 下最常用的分区工具,适用于 MBR 分区表。
3.1 fdisk 基本操作
# 对 /dev/sdb 进行分区
fdisk /dev/sdb进入 fdisk 交互界面后,常用命令如下:
| 命令 | 说明 |
|---|---|
m |
显示帮助菜单 |
p |
打印当前分区表 |
n |
新建分区 |
d |
删除分区 |
t |
修改分区类型 |
w |
保存并退出 |
q |
不保存退出 |
3.2 创建新分区的完整步骤
Command (m for help): n # 新建分区
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p # 选择主分区
Partition number (1-4, default 1): 1 # 分区号
First sector (2048-1048575999, default 2048): # 回车使用默认值
Last sector, +sectors or +size{K,M,G,T,P} (2048-1048575999, default 1048575999): +100G
Command (m for help): n # 再创建一个分区
Partition number (2-4, default 2): 2
First sector (209717248-1048575999, default 209717248):
Last sector, +sectors or +size{K,M,G,T,P} (209717248-1048575999, default 1048575999): # 回车使用剩余空间
Command (m for help): p # 查看分区表
Command (m for help): w # 保存并退出3.3 使用 parted 处理 GPT 分区表
对于大于 2TB 的磁盘,需要使用 parted 工具:
parted /dev/sdb
# parted 交互命令
(parted) mklabel gpt # 创建 GPT 分区表
(parted) mkpart primary ext4 0% 100G # 创建第一个分区
(parted) mkpart primary ext4 100G 100% # 创建第二个分区
(parted) print # 查看分区表
(parted) quit # 退出4. 磁盘格式化
分区创建完成后,需要将分区格式化为特定的文件系统。
4.1 ext4 文件系统
ext4 是 Linux 最常用的文件系统,稳定可靠:
# 查看 mkfs 支持的文件系统
mkfs -t ext4 /dev/sdb1
# 或者使用 ext4 专用命令
mkfs.ext4 /dev/sdb1
# 格式化时指定卷标
mkfs.ext4 -L data /dev/sdb1
# 查看格式化后的信息
tune2fs -l /dev/sdb1ext4 常用调优参数:
# 禁用文件系统自检(减少启动时间)
tune2fs -c 0 -i 0 /dev/sdb1
# 启用 dir_index 特性(加速大目录查找)
tune2fs -O dir_index /dev/sdb14.2 XFS 文件系统
XFS 是高性能日志文件系统,适合大文件和高并发场景:
# 安装 xfs 工具(如未安装)
yum install xfsprogs # CentOS/RHEL
apt install xfsprogs # Ubuntu/Debian
# 格式化 XFS
mkfs.xfs /dev/sdb2
# 查看 XFS 信息
xfs_info /dev/sdb2
# 调整 XFS 参数(需要在挂载后)
xfs_admin -L data /dev/sdb2 # 设置卷标4.3 ext4 vs XFS 对比
| 特性 | ext4 | XFS |
|---|---|---|
| 最大文件系统 | 1EB | 8EB |
| 最大文件 | 16TB | 8EB |
| 碎片整理 | e4defrag | xfs_fsr |
| 适合场景 | 通用、启动盘 | 大文件、高并发 |
| 在线扩容 | 支持 | 支持 |
| 在线缩容 | 不支持 | 不支持 |
5. 手动挂载磁盘
5.1 mount 命令基础
# 创建挂载点
mkdir -p /data
# 挂载 ext4 分区
mount -t ext4 /dev/sdb1 /data
# 挂载 XFS 分区
mount -t xfs /dev/sdb2 /data2
# 查看挂载情况
mount | grep sdb
df -h | grep sdb5.2 挂载选项详解
mount 命令支持多种选项,通过 -o 参数指定:
# 常用挂载选项
mount -o rw,noatime,nodiratime /dev/sdb1 /data| 选项 | 说明 |
|---|---|
rw |
读写模式 |
ro |
只读模式 |
noatime |
不更新访问时间(提升性能) |
nodiratime |
不更新目录访问时间 |
noexec |
不允许执行二进制文件 |
nosuid |
忽略 SUID 权限 |
nodev |
不解释字符或块设备 |
usrquota |
启用用户磁盘配额 |
grpquota |
启用组磁盘配额 |
6. 配置 /etc/fstab 实现开机自动挂载
手动挂载在重启后会失效,需要配置 /etc/fstab 实现自动挂载。
6.1 fstab 文件格式
/etc/fstab 每行定义一个挂载点,包含 6 个字段:
<device> <mount_point> <filesystem> <options> <dump> <pass>| 字段 | 说明 |
|---|---|
| device | 设备路径或 UUID |
| mount_point | 挂载点目录 |
| filesystem | 文件系统类型(ext4, xfs 等) |
| options | 挂载选项(defaults, noatime 等) |
| dump | 是否备份(0=不备份,1=备份) |
| pass | fsck 检查顺序(0=不检查,1=优先,2=次优先) |
6.2 使用设备路径挂载(不推荐)
# 编辑 fstab
vim /etc/fstab
# 添加如下行
/dev/sdb1 /data ext4 defaults,noatime 0 2
/dev/sdb2 /data2 xfs defaults,noatime 0 2警告:使用
/dev/sdX路径的风险在于,当系统中有多块磁盘时,设备名可能因启动顺序变化而改变,导致挂载错误。
6.3 使用 UUID 挂载(推荐)
UUID(Universally Unique Identifier)是文件系统的唯一标识符,不会因设备名变化而改变。
查看分区的 UUID
# 方法一:使用 blkid
blkid
# 方法二:查看 by-uuid 目录
ls -l /dev/disk/by-uuid/
# 方法三:使用 tune2fs(ext 系列)
tune2fs -l /dev/sdb1 | grep UUID
# 方法四:使用 xfs_admin(XFS)
xfs_admin -u /dev/sdb2示例输出:
/dev/sdb1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4"
/dev/sdb2: UUID="b2c3d4e5-f6a7-8901-bcde-f12345678901" TYPE="xfs"使用 UUID 配置 fstab
# 编辑 fstab
vim /etc/fstab
# 添加如下行(使用 UUID)
UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /data ext4 defaults,noatime 0 2
UUID=b2c3d4e5-f6a7-8901-bcde-f12345678901 /data2 xfs defaults,noatime 0 26.4 验证 fstab 配置
在重启前务必验证配置是否正确,避免系统无法启动:
# 重新挂载所有 fstab 中的文件系统(验证配置)
mount -a
# 检查是否有报错
echo $?
# 查看当前挂载情况
df -h
# 如果有问题,立即修复 fstab
vim /etc/fstab重要:如果
mount -a报错,必须先修复再重启!错误的 fstab 可能导致系统进入紧急模式(emergency mode)。
7. 交换分区(Swap)挂载
如需添加 swap 分区,也可以将其加入 fstab:
# 查看当前 swap
swapon -s
free -h
# 创建 swap 分区后(假设为 /dev/sdb3)
mkswap /dev/sdb3
# 启用 swap
swapon /dev/sdb3
# 加入 fstab 实现开机自动启用
echo "UUID=$(blkid -s UUID -o value /dev/sdb3) none swap sw 0 0" >> /etc/fstab8. 故障排查
8.1 磁盘不显示
# 重新扫描 SCSI 总线(无需重启)
echo "- - -" > /sys/class/scsi_host/host0/scan
# 检查是否识别到磁盘
lsblk
fdisk -l8.2 分区后设备不显示
# 让内核重新读取分区表
partprobe /dev/sdb
# 或使用
partx -a /dev/sdb8.3 无法挂载:wrong fs type
# 检查文件系统类型是否正确
blkid /dev/sdb1
# 确认内核支持该文件系统
cat /proc/filesystems | grep ext4
cat /proc/filesystems | grep xfs
# 如不支持,加载内核模块
modprobe ext4
modprobe xfs8.4 fstab 错误导致无法启动
如果错误配置 fstab 后已经重启且系统无法启动:
- 在 GRUB 启动界面按
e编辑启动项 - 在
linux行末尾添加init=/bin/bash - 按
Ctrl+x启动进入单用户模式 - 重新挂载根文件系统为可写:
mount -o remount,rw / - 修复 fstab:
vim /etc/fstab - 重启:
reboot
9. 最佳实践总结
- 始终使用 UUID 而非设备路径:避免设备名变化导致的问题
- 格式化前备份重要数据:磁盘操作有风险,操作前确认
- 配置 fstab 后先
mount -a测试:避免重启失败 - 合理选择文件系统:系统盘用 ext4,数据盘大文件场景用 XFS
- 添加
noatime选项:减少不必要的磁盘写入,提升性能 - 定期检查磁盘健康:使用
smartctl检查磁盘 SMART 信息 - 预留空间:避免将分区填满,建议保留 5-10% 空间
# 检查磁盘健康状态
smartctl -a /dev/sdb
# 查看 inode 使用情况
df -i
# 查看磁盘 IO 统计
iostat -x 1 510. 总结
本文详细介绍了 Linux 系统磁盘管理的完整流程,从磁盘分区(fdisk/parted)、文件系统格式化(ext4/XFS),到手动挂载和 fstab 自动挂载配置。关键要点:
- 使用
fdisk进行 MBR 分区,parted进行 GPT 分区 - ext4 通用稳定,XFS 适合大文件和高并发
- 务必使用 UUID 而非设备路径配置 fstab
- 配置 fstab 后先用
mount -a验证再重启 - 掌握基本故障排查方法,避免操作失误导致系统故障
通过以上步骤,你可以安全、高效地管理 Linux 服务器的磁盘资源。