跳转到内容

磁盘与分区

磁盘与分区管理是 Linux 系统管理员的核心技能。本文将从查看磁盘信息开始,涵盖 MBR/GPT 分区创建、文件系统格式化、挂载操作以及通过 /etc/fstab 实现开机自动挂载。

lsblk 以树形结构列出所有块设备及其挂载点:

Terminal window
lsblk

输出示例:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 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:

Terminal window
lsblk -f
Terminal window
sudo fdisk -l /dev/sdb
Terminal window
sudo blkid

fdisk 用于管理 MBR(Master Boot Record)分区表,支持最多 4 个主分区或 3 个主分区加 1 个扩展分区。MBR 最大支持 2TB 磁盘。

  1. 启动 fdisk 交互模式:

    Terminal window
    sudo fdisk /dev/sdb
  2. 在交互界面中创建新分区:

    Command (m for help): n
    Partition type
    p primary (0 primary, 0 extended, 4 free)
    e extended (container for logical partitions)
    Select (default p): p
    Partition number (1-4, default 1): 1
    First sector (2048-209715199, default 2048): 直接回车
    Last sector ... (default 209715199): +20G
  3. 查看已创建的分区:

    Command (m for help): p
  4. 写入分区表并退出:

    Command (m for help): w
命令说明
n新建分区
d删除分区
p打印分区表
t更改分区类型
l列出已知分区类型
w写入并退出
q不保存退出

GPT(GUID Partition Table)突破了 MBR 的限制,支持超过 2TB 的磁盘和多达 128 个分区。现代服务器强烈推荐使用 GPT。

  1. 安装 gdisk(如未安装):

    Terminal window
    sudo dnf install gdisk -y
  2. 启动 gdisk 交互模式:

    Terminal window
    sudo gdisk /dev/sdb
  3. 创建新的 GPT 分区:

    Command (? for help): n
    Partition number (1-128, default 1): 1
    First sector (34-209715166, default = 2048): 直接回车
    Last sector ... (default = 209715166): +50G
    Current type is 8300 (Linux filesystem)
    Hex code or GUID (L to show codes, Enter = 8300): 直接回车
  4. 查看分区布局:

    Command (? for help): p
  5. 写入并退出:

    Command (? for help): w
特性fdisk (MBR)gdisk (GPT)
最大磁盘容量2TB9.4ZB
最大分区数4 主分区128 分区
分区表备份磁盘头尾各一份
适用场景旧系统兼容现代服务器推荐

在创建或修改分区后,如果系统未自动识别新分区表,需要使用 partprobe 通知内核重新读取分区信息:

Terminal window
sudo partprobe /dev/sdb

验证内核已识别新分区:

Terminal window
lsblk /dev/sdb
cat /proc/partitions | grep sdb

分区创建后需要格式化才能使用。

创建 XFS 文件系统(RHEL/CentOS 默认)

Section titled “创建 XFS 文件系统(RHEL/CentOS 默认)”
Terminal window
sudo mkfs.xfs /dev/sdb1

强制覆盖已有文件系统:

Terminal window
sudo mkfs.xfs -f /dev/sdb1
Terminal window
sudo mkfs.ext4 /dev/sdb1
Terminal window
# XFS 设置标签
sudo mkfs.xfs -L mydata /dev/sdb1
# EXT4 设置标签
sudo mkfs.ext4 -L mydata /dev/sdb1
Terminal window
sudo mkswap /dev/sdb2
sudo swapon /dev/sdb2

创建挂载点并挂载分区:

Terminal window
sudo mkdir -p /mnt/data
sudo mount /dev/sdb1 /mnt/data

使用 UUID 挂载(推荐):

Terminal window
sudo mount UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" /mnt/data

查看当前挂载情况:

Terminal window
mount | grep sdb
df -hT /mnt/data
Terminal window
sudo umount /mnt/data

如果提示设备正忙,查找占用进程:

Terminal window
sudo lsof +D /mnt/data
sudo fuser -mv /mnt/data

延迟卸载(等待使用者释放后自动卸载):

Terminal window
sudo umount -l /mnt/data

临时挂载在系统重启后会丢失。要实现开机自动挂载,需要编辑 /etc/fstab

Terminal window
sudo blkid /dev/sdb1

输出示例:

/dev/sdb1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="xfs"
Terminal window
# 务必先备份
sudo cp /etc/fstab /etc/fstab.bak
sudo vi /etc/fstab

添加如下行:

UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /mnt/data xfs defaults 0 0
字段说明示例
设备标识UUID 或设备路径UUID=xxxx
挂载点挂载目标目录/mnt/data
文件系统类型xfs、ext4、swap 等xfs
挂载选项逗号分隔的选项列表defaults
dump 备份0 表示不使用 dump 备份0
fsck 检查顺序0 不检查,1 根分区,2 其他0
选项说明
defaults等同于 rw,suid,dev,exec,auto,nouser,async
noexec禁止执行二进制文件
nosuid禁止 SUID/SGID 位生效
nodev禁止解释字符或块设备
ro只读挂载
noatime不更新访问时间,提升 I/O 性能
nofail设备不存在时不阻止系统启动

不重启即可测试所有 fstab 中的挂载项:

Terminal window
sudo mount -a

检查是否挂载成功:

Terminal window
df -hT /mnt/data

设备名(如 /dev/sdb1)可能因为添加或移除硬盘而发生变化,UUID 是分区的唯一标识,不受设备顺序影响。

Terminal window
# 方法一:blkid
sudo blkid
# 方法二:lsblk -f
lsblk -f
# 方法三:查看 by-uuid 符号链接
ls -l /dev/disk/by-uuid/
Terminal window
# 推荐:使用 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 分区、格式化并配置自动挂载的完整流程。

  1. 确认磁盘状态:

    Terminal window
    lsblk
    sudo fdisk -l /dev/sdb
  2. 使用 gdisk 创建 GPT 分区:

    Terminal window
    sudo gdisk /dev/sdb
    # 交互操作: n -> 1 -> 回车 -> +80G -> 回车 -> w -> Y
  3. 通知内核识别新分区:

    Terminal window
    sudo partprobe /dev/sdb
    lsblk /dev/sdb
  4. 格式化为 XFS 文件系统:

    Terminal window
    sudo mkfs.xfs /dev/sdb1
  5. 创建挂载点并临时挂载:

    Terminal window
    sudo mkdir -p /data
    sudo mount /dev/sdb1 /data
    df -hT /data
  6. 获取 UUID 并配置 fstab:

    Terminal window
    # 获取 UUID
    UUID=$(sudo blkid -s UUID -o value /dev/sdb1)
    echo "UUID: $UUID"
    # 备份 fstab
    sudo cp /etc/fstab /etc/fstab.bak
    # 写入 fstab
    echo "UUID=$UUID /data xfs defaults,nofail 0 0" | sudo tee -a /etc/fstab
  7. 验证自动挂载配置:

    Terminal window
    sudo umount /data
    sudo mount -a
    df -hT /data

至此,磁盘分区和挂载配置完成。系统重启后 /data 目录将自动挂载。