服务器加了块新盘,或者云主机新挂了一块数据盘,系统里却看不到、用不上——这是很多人第一次接触"挂载"时的体验。硬盘插上了不代表能用,Linux 里必须经过"认盘 → 分区 → 格式化(创建文件系统)→ 挂载 → 写入 fstab 实现开机自动挂载"这几步,磁盘才能真正被业务读写。
这篇文章会完整走一遍这个流程,并重点解释几个容易出事的环节:怎么确认设备名不搞错、/etc/fstab 怎么写才不会导致开机进不了系统、用 UUID 而不是设备名来挂载的好处、以及一块盘有大容量时怎么用 GPT 而不是 MBR。文中涉及的 mkfs(格式化)会永久销毁磁盘数据,我会在每一步给出风险提示和核对方法。
读完你应该能独立、安全地给服务器挂上一块新盘,并让它在重启后自动挂载、权限正确、业务可读写。文中命令同时给出 RHEL 系(yum/dnf)和 Debian 系(apt)的差异,以及两套都能用的通用工具。
一、先认盘:确认设备名和容量
第一步永远是搞清楚新盘是哪个设备,绝对不要凭感觉写 /dev/sdb。
# 列出所有块设备及其分区、容量(最直观)
lsblk
# 带文件系统类型和 UUID 的完整信息(挂载和 fstab 必备)
lsblk -f
# 查看磁盘型号、序列号、大小
sudo fdisk -l
sudo parted -l
# 更现代的查看方式
sudo blkid
sudo hwinfo --disk 2>/dev/null # 不一定预装
# 看内核是否识别到新盘(插盘后应有日志)
dmesg -T | grep -iE 'sd[a-z]|nvme|ata|scsi' | tail -20
设备命名规则要记住:
| 设备名 | 含义 | 说明 |
|---|---|---|
/dev/sda、/dev/sdb |
SATA/SAS/USB 盘 | 字母按识别顺序分配,顺序可能变 |
/dev/vda、/dev/vdb |
虚拟化磁盘(KVM/Xen) | 云主机常见 |
/dev/nvme0n1 |
NVMe SSD | p1 后缀表示分区,如 nvme0n1p1 |
/dev/xvda |
Xen 虚拟磁盘 | 部分云平台 |
关键认知:/dev/sdX 这类设备名不是永久的。内核识别顺序、插拔顺序、虚拟化配置变化,都可能让同一块盘下次变成另一个名字。所以配置文件里不要写设备名,要写 UUID。这一点后面会重点讲。
举一个典型场景:一台云主机原本有一块系统盘 /dev/vda,你在控制台挂载了一块新数据盘,登录后发现多出 /dev/vdb。用 lsblk 能看到它的大小和是否已有分区。
lsblk
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
# vda 252:0 0 40G 0 disk
# └─vda1 252:1 0 40G 0 part /
# vdb 252:16 0 200G 0 disk <-- 新盘,没有分区、没挂载点
二、分区:要不要分,怎么分
关于"新盘要不要分区",有个常见的困惑。结论是:
- 如果整块盘就做一个文件系统、不打算再分多个区,可以不分区,直接在整盘上
mkfs(比如/dev/vdb)。很多数据盘就这么用。 - 但如果要分多个区(比如一个区给数据、一个留给别的用途)、或者出于规范化考虑,就先用
parted/fdisk建分区。 - 云数据盘建议至少建一个分区,方便以后扩容和工具识别。
重要前提:大于 2TB 的盘必须用 GPT 分区表,MBR(DOS)最大只支持 2TB。所以现在新建分区一律推荐 GPT。
先介绍 parted(支持 GPT,适合大盘):
# 交互式分区(以 /dev/vdb 为例,务必核对设备名!)
sudo parted /dev/vdb
# 在 parted 交互界面里:
# (parted) mklabel gpt # 创建 GPT 分区表(会清空分区表!)
# (parted) mkpart primary ext4 0% 100% # 建一个占满整盘的 ext4 主分区
# (parted) print # 确认
# (parted) quit
也可以一条命令搞定:
sudo parted -s /dev/vdb mklabel gpt
sudo parted -s /dev/vdb mkpart primary ext4 0% 100%
传统 fdisk(交互式,适合小于 2TB 或熟悉它的人):
sudo fdisk /dev/vdb
# 交互界面里:
# g 创建 GPT 分区表(大容量必须)
# n 新建分区
# p 查看分区
# w 保存退出
# q 不保存退出
风险提示:
mklabel、fdisk的写操作、以及任何带-s的自动分区,都会改写磁盘分区表。如果设备名写成了系统盘或已有数据的盘,数据会直接丢失。执行前务必用lsblk反复确认设备名、容量、挂载点,确认这块盘上没有你要保留的数据。对云主机,建议先打快照。
分区后让内核重新读取分区表:
sudo partprobe /dev/vdb
# 或
sudo udevadm settle
lsblk # 应能看到 vdb1
三、格式化:创建文件系统
分区好了(或决定整盘直接用),下一步是创建文件系统,也就是"格式化"。
风险提示:
mkfs.*会销毁目标设备上的全部数据。这是不可逆操作。执行前再次lsblk -f确认目标设备,确认上面没有要保留的数据。
先选文件系统类型:
| 文件系统 | 适用场景 | 特点 |
|---|---|---|
| ext4 | 通用、兼容性最好 | 成熟稳定,大多数场景首选 |
| XFS | 大文件、高并发、RHEL 系默认 | 大文件性能好,不能缩小 |
| Btrfs | 需要快照、校验 | 特性多,运维相对复杂 |
| tmpfs | 内存文件系统 | 不落盘,重启清空 |
格式化命令:
# ext4(通用)
sudo mkfs.ext4 /dev/vdb1
# 整盘直接用:
# sudo mkfs.ext4 /dev/vdb
# XFS(RHEL 系常用)
sudo mkfs.xfs /dev/vdb1
# 带参数示例:ext4 设置卷标和预留空间比例为 1%(默认 5%)
sudo mkfs.ext4 -L data -m 1 /dev/vdb1
说明一下 -m 1:ext4 默认给 root 保留 5% 空间,数据盘上这个比例偏大,常见的 200G 盘会白白占用约 10G。数据盘通常可以设成 1%(经验值),系统盘建议保留默认。
# 查看格式化结果
lsblk -f
sudo blkid /dev/vdb1
# 记下输出的 UUID,后面 fstab 要用
# ---- 工具安装(按需)----
# RHEL / Rocky / Alma
sudo dnf install -y e2fsprogs xfsprogs parted
# Debian / Ubuntu
sudo apt install -y e2fsprogs xfsprogs parted
四、挂载:临时挂载与验证
格式化完,先做临时挂载验证,确认没问题再写 fstab。
# 1. 创建挂载点(目录名按业务来,比如 /data 或 /mnt/disk1)
sudo mkdir -p /data
# 2. 临时挂载
sudo mount /dev/vdb1 /data
# 3. 验证
df -hT /data
lsblk -f
mount | grep vdb1
挂载后要处理权限。新格式化的 ext4/XFS 根目录默认属主是 root:root、权限 755,如果你的业务进程用非 root 用户(比如 nginx、mysql、应用专用账号)读写,需要改属主:
# 把 /data 交给某个用户和组
sudo chown -R appuser:appgroup /data
sudo chmod -R 755 /data
# 或者建个子目录专门给某个服务
sudo mkdir -p /data/nginx
sudo chown -R nginx:nginx /data/nginx
# 看某个目录的属主
ls -ld /data
XFS 挂载选项、ext4 挂载选项可以在挂载时指定,比如禁用访问时间记录以减少写入:
# noatime 能减少不必要的元数据写入,数据库和高 IO 场景常见
sudo mount -o noatime /dev/vdb1 /data
五、开机自动挂载:正确书写 /etc/fstab
临时挂载重启就没了,要持久化就得写 /etc/fstab。这是全篇最关键也最容易导致系统起不来的地方——fstab 写错,开机时系统挂载失败,可能直接掉进紧急模式(emergency mode),远程机器就失联了。
先看 fstab 的格式,每一行六个字段:
cat /etc/fstab
# 格式:
# <设备> <挂载点> <文件系统> <挂载选项>
| 字段 | 含义 | 建议值 |
|---|---|---|
| 设备 | 用 UUID= 或 /dev/xxx | 优先 UUID |
| 挂载点 | 目录路径 | 事先 mkdir 好的目录 |
| 文件系统 | ext4 / xfs 等 | 与 mkfs 时一致 |
| 选项 | defaults、noatime 等 | defaults 或 defaults,noatime |
| dump | 备份标志 | 0 |
| pass | fsck 顺序 | 数据盘 0,根分区 1 |
为什么用 UUID:前面说过设备名会变。UUID 是文件系统的唯一标识,跟着文件系统走,不受设备名影响,所以是持久化的正确做法。先查 UUID:
sudo blkid /dev/vdb1
# 输出示例:
# /dev/vdb1: UUID="a1b2c3d4-...." TYPE="ext4"
编辑 fstab:
# 先备份 fstab!
sudo cp /etc/fstab /etc/fstab.bak
sudo vi /etc/fstab
追加一行(用上一步查到的 UUID):
# <设备> <挂载点> <类型> <选项>
UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /data ext4 defaults,noatime 0 0
也可以用卷标或设备名(不推荐):LABEL=data /data ext4 defaults 0 0 / /dev/vdb1 /data ext4 defaults 0 0。
写完后必须验证,验证方法有两种,都不要省:
# 验证方式一:不重启,测试 fstab 里所有条目能否正确挂载
sudo umount /data 2>/dev/null # 若之前已临时挂载,先卸载
sudo mount -a # 按 fstab 挂载所有未挂载项,无报错即为正常
df -hT | grep data
# 验证方式二:更严格地检查(systemd 系统)
sudo systemctl daemon-reload
sudo findmnt --verify --verbose # 会校验 fstab 语法和可挂载性
mount -a 无报错、findmnt 通过,基本可以认为配置正确。不要跳过验证就去重启,那样一旦写错就要靠救援模式救。
如果确实写错了导致开机进紧急模式,处理办法是:进入系统(救援模式或紧急 shell)后,vi /etc/fstab 把出错行注释掉(行首加 #),保存后 reboot,或直接恢复 /etc/fstab.bak。
# 紧急模式下根分区可能只读,需要重挂为可写
mount -o remount,rw /
vi /etc/fstab # 注释掉有问题的行
reboot
六、几个进阶但常见的点
扩容:云盘扩容后,文件系统不会自动变大,需要手动扩。
# 以 ext4 为例,假设分区已用 growpart 扩过(GPT 盘)
sudo growpart /dev/vdb 1
sudo resize2fs /dev/vdb1
# XFS 用:
sudo xfs_growfs /data
df -hT /data
绑定挂载(bind mount):把一个目录挂到另一个位置,适合日志目录重定向等场景。
sudo mount --bind /data/logs /var/log/app
# fstab 写法:
# /data/logs /var/log/app none bind 0 0
LVM:如果一开始就用 LVM 管理磁盘,扩容会更灵活,但要提前规划,事后改比较麻烦。生产上大体量业务常直接上 LVM。
性能提示:机械盘顺序读写经验值约 100~200 MB/s,普通 SATA SSD 约 400~550 MB/s,NVMe SSD 可达 1~7 GB/s,云盘的 IOPS 和吞吐则取决于所购规格。这些都是量级参考,实际取决于硬件和负载。用 dd 或 fio 可以实测。
# 简单的顺序写测试(会写入文件,注意别在满盘上跑)
dd if=/dev/zero of=/data/testfile bs=1M count=1024 oflag=direct
rm -f /data/testfile
常见问题
Q1:新盘插上后 lsblk 看不到怎么办?
先看 dmesg -T | tail 有没有识别日志。云主机要在控制台确认真实已挂载到虚拟机;物理机检查背板、线缆、RAID 卡是否把盘做了阵列或未透传。RAID 卡可能需要先在卡的管理界面把盘建为 JBOD 或虚拟磁盘。
Q2:fstab 用 UUID 还是设备名?
用 UUID。设备名可能因识别顺序变化而改变,导致开机挂载失败甚至进不了系统。
Q3:写错 fstab 导致开机进紧急模式怎么救?
用云控制台/带外进入,mount -o remount,rw / 后编辑 fstab 注释掉问题行,或恢复备份,再重启。这也说明改 fstab 前备份和 mount -a 验证有多重要。
Q4:格式化后数据能恢复吗?
mkfs 会重建文件系统元数据,常规手段基本无法恢复。所以格式化前一定确认设备没有有用数据,必要时先做块设备级备份。
Q5:挂载点目录必须是空的吗?
通常是的,挂载会"遮住"挂载点原有内容。如果目录里有文件,挂载后会被隐藏,卸载后才可见。所以挂载点目录一般新建一个空的专用目录。
总结
- 挂盘流程是:
lsblk认盘 → 分区(大容量必须 GPT)→mkfs建文件系统 → 临时mount验证 → 写/etc/fstab持久化。 - 设备名会漂移,fstab 中一律使用
blkid查到的 UUID;分区前反复确认设备名和容量,避免误伤系统盘或数据盘。 /etc/fstab写错可能导致开机进紧急模式,改前必须备份,改后用mount -a和findmnt --verify验证,验证通过再重启。- ext4 默认保留 5% 空间,纯数据盘可考虑调到 1%(经验值);挂载后用
chown设好属主,否则非 root 业务进程无法写入。 - 云盘扩容后文件系统不会自动变大,需要用
growpart+resize2fs(ext4)或xfs_growfs(XFS)手动扩展。
企业QQ咨询




