Linux服务器如何创建分区并挂载到指定目录?操作步骤与验证方法
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 的存储结构通常可以分为三层:
- 磁盘和分区表,例如
/dev/sdb; - 分区,例如
/dev/sdb1; - 文件系统和挂载点,例如 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 顺序 | 2 | ext4 数据盘通常在系统盘之后检查 |
如果使用 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 的磁盘,原分区表恢复不能依赖简单的卸载操作,应按照备份或磁盘恢复方案处理。