磁盘与分区
磁盘与分区管理是 Linux 系统管理员的核心技能。本文将从查看磁盘信息开始,涵盖 MBR/GPT 分区创建、文件系统格式化、挂载操作以及通过 /etc/fstab 实现开机自动挂载。
查看磁盘与块设备信息
Section titled “查看磁盘与块设备信息”使用 lsblk 查看块设备
Section titled “使用 lsblk 查看块设备”lsblk 以树形结构列出所有块设备及其挂载点:
lsblk输出示例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTSsda 8:0 0 50G 0 disk├─sda1 8:1 0 1G 0 part /boot└─sda2 8:2 0 49G 0 part ├─rl-root 253:0 0 45G 0 lvm / └─rl-swap 253:1 0 4G 0 lvm [SWAP]sdb 8:16 0 100G 0 disk查看更详细的信息,包括文件系统类型和 UUID:
lsblk -f使用 fdisk 列出分区表
Section titled “使用 fdisk 列出分区表”sudo fdisk -l /dev/sdb使用 blkid 查看 UUID
Section titled “使用 blkid 查看 UUID”sudo blkidMBR 分区:使用 fdisk
Section titled “MBR 分区:使用 fdisk”fdisk 用于管理 MBR(Master Boot Record)分区表,支持最多 4 个主分区或 3 个主分区加 1 个扩展分区。MBR 最大支持 2TB 磁盘。
-
启动 fdisk 交互模式:
Terminal window sudo fdisk /dev/sdb -
在交互界面中创建新分区:
Command (m for help): nPartition typep primary (0 primary, 0 extended, 4 free)e extended (container for logical partitions)Select (default p): pPartition number (1-4, default 1): 1First sector (2048-209715199, default 2048): 直接回车Last sector ... (default 209715199): +20G -
查看已创建的分区:
Command (m for help): p -
写入分区表并退出:
Command (m for help): w
fdisk 常用交互命令
Section titled “fdisk 常用交互命令”| 命令 | 说明 |
|---|---|
n | 新建分区 |
d | 删除分区 |
p | 打印分区表 |
t | 更改分区类型 |
l | 列出已知分区类型 |
w | 写入并退出 |
q | 不保存退出 |
GPT 分区:使用 gdisk
Section titled “GPT 分区:使用 gdisk”GPT(GUID Partition Table)突破了 MBR 的限制,支持超过 2TB 的磁盘和多达 128 个分区。现代服务器强烈推荐使用 GPT。
-
安装 gdisk(如未安装):
Terminal window sudo dnf install gdisk -y -
启动 gdisk 交互模式:
Terminal window sudo gdisk /dev/sdb -
创建新的 GPT 分区:
Command (? for help): nPartition number (1-128, default 1): 1First sector (34-209715166, default = 2048): 直接回车Last sector ... (default = 209715166): +50GCurrent type is 8300 (Linux filesystem)Hex code or GUID (L to show codes, Enter = 8300): 直接回车 -
查看分区布局:
Command (? for help): p -
写入并退出:
Command (? for help): w
gdisk 与 fdisk 的对比
Section titled “gdisk 与 fdisk 的对比”| 特性 | fdisk (MBR) | gdisk (GPT) |
|---|---|---|
| 最大磁盘容量 | 2TB | 9.4ZB |
| 最大分区数 | 4 主分区 | 128 分区 |
| 分区表备份 | 无 | 磁盘头尾各一份 |
| 适用场景 | 旧系统兼容 | 现代服务器推荐 |
通知内核更新分区表:partprobe
Section titled “通知内核更新分区表:partprobe”在创建或修改分区后,如果系统未自动识别新分区表,需要使用 partprobe 通知内核重新读取分区信息:
sudo partprobe /dev/sdb验证内核已识别新分区:
lsblk /dev/sdbcat /proc/partitions | grep sdb创建文件系统:mkfs
Section titled “创建文件系统:mkfs”分区创建后需要格式化才能使用。
创建 XFS 文件系统(RHEL/CentOS 默认)
Section titled “创建 XFS 文件系统(RHEL/CentOS 默认)”sudo mkfs.xfs /dev/sdb1强制覆盖已有文件系统:
sudo mkfs.xfs -f /dev/sdb1创建 EXT4 文件系统
Section titled “创建 EXT4 文件系统”sudo mkfs.ext4 /dev/sdb1创建带标签的文件系统
Section titled “创建带标签的文件系统”# XFS 设置标签sudo mkfs.xfs -L mydata /dev/sdb1
# EXT4 设置标签sudo mkfs.ext4 -L mydata /dev/sdb1创建 Swap 分区
Section titled “创建 Swap 分区”sudo mkswap /dev/sdb2sudo swapon /dev/sdb2创建挂载点并挂载分区:
sudo mkdir -p /mnt/datasudo mount /dev/sdb1 /mnt/data使用 UUID 挂载(推荐):
sudo mount UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" /mnt/data查看当前挂载情况:
mount | grep sdbdf -hT /mnt/data卸载文件系统
Section titled “卸载文件系统”sudo umount /mnt/data如果提示设备正忙,查找占用进程:
sudo lsof +D /mnt/datasudo fuser -mv /mnt/data延迟卸载(等待使用者释放后自动卸载):
sudo umount -l /mnt/data持久化挂载:/etc/fstab
Section titled “持久化挂载:/etc/fstab”临时挂载在系统重启后会丢失。要实现开机自动挂载,需要编辑 /etc/fstab。
获取分区 UUID
Section titled “获取分区 UUID”sudo blkid /dev/sdb1输出示例:
/dev/sdb1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="xfs"编辑 /etc/fstab
Section titled “编辑 /etc/fstab”# 务必先备份sudo cp /etc/fstab /etc/fstab.baksudo vi /etc/fstab添加如下行:
UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /mnt/data xfs defaults 0 0fstab 各字段说明
Section titled “fstab 各字段说明”| 字段 | 说明 | 示例 |
|---|---|---|
| 设备标识 | UUID 或设备路径 | UUID=xxxx |
| 挂载点 | 挂载目标目录 | /mnt/data |
| 文件系统类型 | xfs、ext4、swap 等 | xfs |
| 挂载选项 | 逗号分隔的选项列表 | defaults |
| dump 备份 | 0 表示不使用 dump 备份 | 0 |
| fsck 检查顺序 | 0 不检查,1 根分区,2 其他 | 0 |
常用挂载选项
Section titled “常用挂载选项”| 选项 | 说明 |
|---|---|
defaults | 等同于 rw,suid,dev,exec,auto,nouser,async |
noexec | 禁止执行二进制文件 |
nosuid | 禁止 SUID/SGID 位生效 |
nodev | 禁止解释字符或块设备 |
ro | 只读挂载 |
noatime | 不更新访问时间,提升 I/O 性能 |
nofail | 设备不存在时不阻止系统启动 |
验证 fstab 配置
Section titled “验证 fstab 配置”不重启即可测试所有 fstab 中的挂载项:
sudo mount -a检查是否挂载成功:
df -hT /mnt/data使用 UUID 的最佳实践
Section titled “使用 UUID 的最佳实践”设备名(如 /dev/sdb1)可能因为添加或移除硬盘而发生变化,UUID 是分区的唯一标识,不受设备顺序影响。
查看 UUID 的多种方法
Section titled “查看 UUID 的多种方法”# 方法一:blkidsudo blkid
# 方法二:lsblk -flsblk -f
# 方法三:查看 by-uuid 符号链接ls -l /dev/disk/by-uuid/fstab 推荐写法
Section titled “fstab 推荐写法”# 推荐:使用 UUID,加 nofail 防止启动失败UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /mnt/data xfs defaults,nofail 0 0
# 不推荐:使用设备名,设备名可能变化/dev/sdb1 /mnt/data xfs defaults 0 0完整实战:新磁盘分区并自动挂载
Section titled “完整实战:新磁盘分区并自动挂载”以下演示将一块全新的 100G 磁盘 /dev/sdb 创建 GPT 分区、格式化并配置自动挂载的完整流程。
-
确认磁盘状态:
Terminal window lsblksudo fdisk -l /dev/sdb -
使用 gdisk 创建 GPT 分区:
Terminal window sudo gdisk /dev/sdb# 交互操作: n -> 1 -> 回车 -> +80G -> 回车 -> w -> Y -
通知内核识别新分区:
Terminal window sudo partprobe /dev/sdblsblk /dev/sdb -
格式化为 XFS 文件系统:
Terminal window sudo mkfs.xfs /dev/sdb1 -
创建挂载点并临时挂载:
Terminal window sudo mkdir -p /datasudo mount /dev/sdb1 /datadf -hT /data -
获取 UUID 并配置 fstab:
Terminal window # 获取 UUIDUUID=$(sudo blkid -s UUID -o value /dev/sdb1)echo "UUID: $UUID"# 备份 fstabsudo cp /etc/fstab /etc/fstab.bak# 写入 fstabecho "UUID=$UUID /data xfs defaults,nofail 0 0" | sudo tee -a /etc/fstab -
验证自动挂载配置:
Terminal window sudo umount /datasudo mount -adf -hT /data
至此,磁盘分区和挂载配置完成。系统重启后 /data 目录将自动挂载。