上一篇 分享链接 返回 返回顶部

Linux服务器如何创建分区并挂载到指定目录?操作步骤与验证方法

发布人:Minchunlin 发布时间:2026-10-04 00:03 阅读量:7

Linux 服务器将新磁盘挂载到指定目录,通常需要依次完成“确认磁盘—创建分区—创建文件系统—创建挂载点—临时挂载—写入 /etc/fstab—验证”几个步骤。下面以一块直接挂载到服务器的 /dev/sdb 磁盘为例,将分区格式化为 ext4,并挂载到 /data 目录;实际操作时必须根据 lsblk 的结果替换设备名和目录。

这套方法适用于使用 systemd 的常见 Linux 服务器,例如 Ubuntu、Debian、RHEL、Rocky Linux、AlmaLinux 等,要求具备 root 或 sudo 权限,并已安装 util-linux、mount、blkid、lsblk 等基础工具。若目标磁盘属于 LVM、软件 RAID、硬件 RAID、加密设备或云平台特殊块存储,应先确认其设备层级,不能直接对上层设备执行分区和格式化。

一、操作前确认环境与风险

1. 确认操作系统、权限和磁盘设备

先查看操作系统和当前磁盘结构:

cat /etc/os-release
uname -r
id
sudo lsblk -p -o NAME,SIZE,TYPE,FSTYPE,LABEL,UUID,MOUNTPOINT

示例输出可能类似下面的形式:

NAME        SIZE TYPE FSTYPE LABEL UUID                                 MOUNTPOINT
/dev/vda     40G disk
/dev/vda1    39G part ext4         2f5c...                              /
/dev/vda2     1G part swap         8a31...                              [SWAP]
/dev/sdb    200G disk

这里的 /dev/vda 是系统盘,/dev/sdb 是尚未分区的数据盘,属于适合继续检查的对象。实际环境中设备名可能是 /dev/xvdb、/dev/nvme1n1 或其他名称,不要因为示例使用 /dev/sdb 就直接照抄。

继续查看目标磁盘的分区表和签名:

sudo fdisk -l /dev/sdb
sudo parted /dev/sdb print
sudo wipefs -n /dev/sdb

wipefs -n 只读取并显示文件系统或分区表签名,不会擦除数据。如果能看到已有分区、ext4、XFS、LVM、RAID 或其他签名,应先确认数据用途。没有分区并不等于磁盘一定为空,历史文件系统签名仍可能存在。

2. 明确哪些操作会造成数据损失

以下命令具有破坏性:

  • parted ... mklabel gpt 会重建分区表,可能导致原有分区不可见;
  • mkfs.ext4、mkfs.xfs 会在分区上创建文件系统,原有数据通常无法按原方式访问;
  • 删除分区或执行强制擦除可能影响整块磁盘;
  • 对系统盘或正在使用的业务盘操作,可能导致系统无法启动或业务中断。

因此,在执行分区和格式化之前,应完成磁盘用途确认、数据备份和变更窗口准备。下面的命令只适合直接使用、且确认不再需要原有数据的独立数据盘。

二、创建分区

Linux 的存储结构通常可以分为三层:

  1. 磁盘和分区表,例如 /dev/sdb;
  2. 分区,例如 /dev/sdb1;
  3. 文件系统和挂载点,例如 ext4 文件系统挂载到 /data。

只有分区而没有文件系统,不能正常存储文件;只有文件系统而没有挂载到目录,应用也不能通过目标目录访问它。

1. 全新空盘创建 GPT 分区

如果已经确认 /dev/sdb 是一块不需要保留原数据的空盘,可以创建 GPT 分区表,并建立一个占满磁盘的分区:

sudo parted -s -a optimal /dev/sdb mklabel gpt
sudo parted -s -a optimal /dev/sdb mkpart primary ext4 1MiB 100%
sudo partprobe /dev/sdb
sudo udevadm settle

说明:

  • mklabel gpt 会重建分区表,只能用于确认可清空的磁盘;
  • 1MiB 起始位置可以满足常见磁盘的对齐要求;
  • 100% 表示使用剩余全部空间;
  • mkpart ... ext4 主要是设置分区类型提示,并不会真正创建 ext4 文件系统,后续仍要执行 mkfs.ext4。

验证分区是否已经出现:

sudo lsblk -p -o NAME,SIZE,TYPE,FSTYPE,PARTUUID,MOUNTPOINT /dev/sdb

预期可以看到类似结果:

NAME        SIZE TYPE FSTYPE PARTUUID                             MOUNTPOINT
/dev/sdb    200G disk
/dev/sdb1   200G part        7f8c...

如果仍然看不到 /dev/sdb1,先执行:

sudo partprobe /dev/sdb
sudo udevadm settle
sudo lsblk

如果内核提示设备正在使用,不能强制刷新,应确认没有程序使用该磁盘,必要时在维护窗口重启服务器后再检查。

2. 在已有分区表的空闲区域创建分区

如果目标磁盘已经存在其他分区,不能再次执行 mklabel gpt。先查看空闲区域:

sudo parted /dev/sdb print free

示例:

Number  Start    End      Size     File system  Name
        1049kB   80.0GB   80.0GB   Free Space
 1      80.0GB   120GB    40.0GB   ext4
        120GB    200GB    80.0GB   Free Space

根据实际的 Free Space 范围创建分区。例如要使用最后一段空闲区域,可以执行:

sudo parted -s -a optimal /dev/sdb mkpart primary ext4 120GB 200GB
sudo partprobe /dev/sdb
sudo udevadm settle

这里的 120GB 和 200GB 只是示例,必须替换为 print free 显示的实际空闲范围。创建完成后确认新分区编号:

sudo lsblk -p -o NAME,SIZE,TYPE,FSTYPE,PARTUUID,MOUNTPOINT /dev/sdb

如果设备是 NVMe 磁盘,分区名称通常类似 /dev/nvme1n1p1,而不是 /dev/sdb1。后续格式化和挂载时必须使用实际名称。

三、创建文件系统

1. 先判断分区是否已有文件系统

假设新分区是 /dev/sdb1,先读取文件系统信息:

sudo blkid /dev/sdb1
sudo wipefs -n /dev/sdb1

如果分区确实是新建的,且没有需要保留的数据,可以创建 ext4:

sudo mkfs.ext4 -L data /dev/sdb1

-L data 为文件系统设置标签,标签便于识别,但开机挂载仍建议使用 UUID,而不是只依赖标签。

格式化完成后验证:

sudo blkid /dev/sdb1
sudo lsblk -f /dev/sdb

示例结果:

/dev/sdb1: LABEL="data" UUID="c3a2c1f4-6d4b-4e5a-a0f4-xxxxxxxxxxxx" TYPE="ext4"

2. 已有文件系统时不要重复格式化

如果 blkid 已经显示 TYPE="ext4"、TYPE="xfs" 或其他文件系统,说明分区可能已有数据。此时不要再次执行 mkfs,应根据识别出的类型直接挂载。

例如:

  • ext4 使用文件系统类型 ext4;
  • xfs 使用文件系统类型 xfs;
  • LVM2_member 表示它可能属于 LVM 物理卷,不能当作普通 ext4 分区直接挂载;
  • linux_raid_member 表示它可能属于软件 RAID;
  • crypto_LUKS 表示它是加密容器,需要先解锁。

3. ext4 与 XFS 的选择边界

本示例使用 ext4,原因是工具普遍可用、操作步骤简单,适合一般数据目录。RHEL 系列环境中也经常使用 XFS。如果确定使用 XFS,可在确认分区没有数据后执行:

sudo mkfs.xfs -L data /dev/sdb1

后续临时挂载和 /etc/fstab 中的文件系统类型都要改为 xfs。不要将 ext4 分区写成 xfs,也不要在不知道文件系统类型时强行指定类型。

四、挂载到指定目录

1. 创建挂载点

以 /data 为例:

sudo mkdir -p /data
sudo mount /dev/sdb1 /data

如果希望显式指定文件系统类型,也可以使用:

sudo mount -t ext4 /dev/sdb1 /data

/data 必须是目录而不是普通文件。如果该目录在挂载前已经存在文件,挂载完成后,原目录中的文件会被新的文件系统遮挡,并不会被删除。卸载 /data 后,原来的文件才会重新显示。

四、挂载到指定目录|创建挂载点配图

挂载完成后,先进行基础验证:

findmnt --target /data
df -hT /data

预期结果类似:

TARGET SOURCE    FSTYPE OPTIONS
/data  /dev/sdb1 ext4   rw,relatime

df -hT /data 应显示 /dev/sdb1、文件系统类型和容量。如果仍显示根分区,例如 /dev/vda1,说明 /data 并没有挂载成功,不能继续把它当作新磁盘使用。

2. 验证读写权限

可以创建一个临时文件测试当前挂载是否可写:

sudo touch /data/.mount-check
sudo test -f /data/.mount-check && echo "write check: OK"
sudo rm -f /data/.mount-check

如果目录需要由某个业务账号使用,应在确认服务账号后再调整属主和权限。例如业务账号为 app 时:

sudo chown app:app /data
sudo chmod 0750 /data

不要在未确认业务需求的情况下直接修改权限,否则可能导致其他服务无法访问,或者扩大目录访问范围。

五、配置服务器重启后自动挂载

临时执行 mount 只在当前运行周期有效。要让服务器重启后自动挂载,应把分区 UUID 写入 /etc/fstab。

1. 获取 UUID

sudo blkid -s UUID -o value /dev/sdb1

假设返回:

c3a2c1f4-6d4b-4e5a-a0f4-xxxxxxxxxxxx

编辑配置文件:

sudo cp -a /etc/fstab /etc/fstab.bak.$(date +%Y%m%d-%H%M%S)
sudoedit /etc/fstab

在文件末尾添加一行:

UUID=c3a2c1f4-6d4b-4e5a-a0f4-xxxxxxxxxxxx /data ext4 defaults,nofail 0 2

不要把示例 UUID 原样写入配置,必须替换为 blkid 返回的真实 UUID。也不要直接使用 /dev/sdb1 作为长期挂载标识,因为设备名可能随硬件枚举顺序变化。

各字段含义如下:

字段示例作用
设备标识UUID=...指定要挂载的分区
挂载点/data文件系统显示的位置
文件系统类型ext4必须与实际文件系统一致
挂载参数defaults,nofail使用默认参数,设备缺失时不阻断启动
dump 字段0通常数据盘设置为不使用 dump
fsck 顺序2ext4 数据盘通常在系统盘之后检查

如果使用 XFS,配置示例为:

UUID=c3a2c1f4-6d4b-4e5a-a0f4-xxxxxxxxxxxx /data xfs defaults,nofail 0 0

nofail 可以避免数据盘暂时不可用时阻断系统启动,但也有一个需要注意的边界:如果磁盘缺失而 /data 目录仍存在,某些服务可能在根分区的普通 /data 目录中写入数据。因此,关键业务目录不能只依赖 nofail,还应结合服务启动依赖和监控进行检查。

2. 不重启测试 /etc/fstab

保存文件后,先检查配置语法:

sudo findmnt --verify --verbose

然后测试所有可自动挂载的条目:

sudo systemctl daemon-reload
sudo mount -av

如果没有明显报错,再查看实际挂载状态:

findmnt --target /data
df -hT /data

mount -av 的输出中如果显示 /data 已挂载或挂载成功,说明基本配置有效。若出现 wrong fs type、bad option、UUID does not exist 等错误,应先修正 /etc/fstab,不要立即重启。

六、上线前的完整验证方法

完成挂载后,可以按以下顺序检查:

1. 检查设备、文件系统和挂载点的对应关系

sudo lsblk -f
findmnt --target /data
df -hT /data
df -ih /data

需要同时确认:

  • /data 的来源是目标分区,而不是根分区;
  • 文件系统类型与格式化时选择的一致;
  • 容量与目标磁盘大小基本匹配;
  • 磁盘空间和 inode 均未耗尽;
  • 挂载选项包含 rw 时,目录具备写入能力。

2. 检查开机配置中的 UUID

sudo blkid /dev/sdb1
awk '$2 == "/data" {print}' /etc/fstab

将两条命令输出的 UUID 对比,确保没有复制错误、空格错误或挂载点拼写错误。

3. 在维护窗口验证卸载后重新挂载

如果当前没有业务程序使用 /data,可以执行一次卸载和重新挂载:

sudo fuser -vm /data
sudo umount /data
sudo mount /data
findmnt --target /data

如果 umount 提示目标忙,先不要使用强制卸载。应确认占用目录的进程和业务影响,停止相关服务后再操作。重新挂载成功,说明 /etc/fstab 中的设备标识、文件系统类型和挂载点基本正确。

七、常见失败情况与处理方式

1. 找不到目标磁盘

现象:

mount: /dev/sdb1: special device /dev/sdb1 does not exist

先重新检查:

sudo lsblk
sudo dmesg -T | tail -n 50

如果连 /dev/sdb 都不存在,问题通常发生在磁盘未附加、设备名称判断错误或系统尚未识别设备的阶段。不要尝试格式化其他磁盘,应先确认实际设备路径。

2. 分区创建后没有出现分区设备

执行:

sudo partprobe /dev/sdb
sudo udevadm settle
sudo lsblk

如果磁盘正在被系统或其他进程使用,内核可能无法立即重新读取分区表。此时应在维护窗口处理,不要对正在使用的系统盘强行刷新或删除分区。

3. 挂载时报文件系统类型错误

现象:

mount: / wrong fs type, bad option, bad superblock

先确认文件系统:

sudo blkid /dev/sdb1
sudo lsblk -f

如果实际类型是 xfs,应使用:

sudo mount -t xfs /dev/sdb1 /data

如果分区没有文件系统且确认数据不需要保留,才考虑重新格式化。如果分区中有重要数据,不要直接运行 mkfs 或修复命令,应先完成备份或制作镜像。

4. umount 提示目标忙

检查占用进程:

sudo fuser -vm /data
sudo lsof +D /data

常见原因包括当前 Shell 的工作目录位于 /data、业务进程正在读写文件,或日志程序仍保持文件句柄。退出该目录、停止相关服务并确认业务影响后再卸载。不要把 umount -l 作为常规解决办法,它可能延迟实际释放设备。

5. 手动挂载成功,但开机挂载失败

依次检查:

sudo findmnt --verify --verbose
sudo blkid /dev/sdb1
sudo mount -av
sudo journalctl -b -u local-fs.target --no-pager

重点检查:

  • /etc/fstab 中 UUID 是否与 blkid 一致;
  • 挂载点 /data 是否存在;
  • ext4 或 xfs 类型是否写对;
  • 配置行是否存在不可见字符或错误空格;
  • 设备是否在启动时已经可用。

6. 文件系统变成只读

先查看内核日志:

sudo dmesg -T | tail -n 100
sudo journalctl -k -n 100 --no-pager

如果怀疑文件系统损坏,必须先卸载分区。ext4 可以在卸载后使用 fsck 检查,XFS 则使用适用的 xfs_repair 工具;不能对正在挂载并提供业务服务的文件系统直接运行修复命令。修复前应先备份,并确认停机影响。

八、上线验收与回滚检查项

验收检查

  • [ ] 已确认目标设备不是系统盘、业务盘或包含重要数据的分区。
  • [ ] lsblk 显示了正确的分区,例如 /dev/sdb1。
  • [ ] blkid 显示了预期的文件系统类型和 UUID。
  • [ ] findmnt --target /data 显示来源为目标分区。
  • [ ] df -hT /data 显示容量、类型和挂载状态正常。
  • [ ] 已完成一次创建、读取和删除测试文件。
  • [ ] /etc/fstab 使用 UUID,而不是依赖 /dev/sdX 设备名。
  • [ ] findmnt --verify --verbose 和 mount -av 没有报错。
  • [ ] 已结合业务要求确认目录属主、权限和启动依赖。
  • [ ] 若进行了卸载测试,已确认重新挂载成功。

回滚检查

如果只是撤销自动挂载配置,先备份并编辑 /etc/fstab,删除或注释对应的 /data 配置行,然后执行:

sudo cp -a /etc/fstab /etc/fstab.before-rollback
sudoedit /etc/fstab
sudo systemctl daemon-reload
sudo umount /data

卸载后,原本位于挂载点目录中的内容会重新显示。如果在错误挂载的分区中已经写入了文件,应先确认这些文件是否需要保留,再决定迁移或清理。

如果需要删除新建分区或重建分区表,必须先卸载文件系统、停止相关服务并完成数据备份。特别是已经执行过 mklabel gpt 的磁盘,原分区表恢复不能依赖简单的卸载操作,应按照备份或磁盘恢复方案处理。

目录结构
全文