13
10
月
2026
磁盘满了是最常见也最紧急的故障:网站写不进数据、数据库崩、连 SSH 都可能异常。
这篇讲三件事:新硬盘怎么挂载、已有分区怎么扩容、满了怎么救急。
磁盘不够用可以加数据盘或扩容系统盘。财富云计算 的云服务器支持灵活扩容;内网服务、游戏服务端可选 NAT 型(无独立公网 IP,价格比带独立 IP 机型省一半以上)。
一、先看懂当前磁盘状况
lsblk # 看磁盘和分区树状关系
fdisk -l # 查看所有磁盘
df -h # 查看已挂载分区的使用率
df -i # 查看 inode 使用率
blkid # 查看分区 UUID 和文件系统
mount | grep -E "^/dev" # 查看挂载情况
cat /etc/fstab # 开机自动挂载配置典型输出:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 50G 0 disk
└─vda1 253:1 0 50G 0 part /
vdb 253:16 0 200G 0 disk ← 这块没分区没挂载vdb 有 200G 但没用上,这就是要挂载的新盘。
云服务器的系统盘通常是/dev/vda或/dev/sda,第二块盘是vdb/sdb。
二、挂载新数据盘(完整流程)
1)确认磁盘
lsblk
fdisk -l /dev/vdb务必确认磁盘是空的(没有重要数据),下面的操作会清空它。
2)分区(可选)
小于 2TB 的盘可以用 fdisk:
fdisk /dev/vdb
# 交互命令:
# n 新建分区
# p 主分区
# 1 分区号
# 回车(起始扇区默认)
# 回车(结束扇区默认,用满整盘)
# w 保存并退出大于 2TB 必须用 parted + GPT:
parted /dev/vdb
(parted) mklabel gpt
(parted) mkpart primary ext4 0% 100%
(parted) print
(parted) quit也可以不分区,直接格式化整块盘(很多云环境推荐这样,后续扩容更简单):
mkfs.ext4 /dev/vdb3)格式化
# ext4(最通用)
mkfs.ext4 /dev/vdb1 # 分区了的话
mkfs.ext4 /dev/vdb # 没分区的话
# xfs(CentOS 默认,大文件性能好)
mkfs.xfs /dev/vdb1blkid /dev/vdb1 # 记下 UUID,后面写 fstab 要用4)创建挂载点并挂载
mkdir -p /data
mount /dev/vdb1 /data
df -h | grep /data5)设置开机自动挂载(关键!)
一定要用 UUID,不要写 /dev/vdb1(设备名可能在重启后变化):
blkid /dev/vdb1
# /dev/vdb1: UUID="a1b2c3d4-..." TYPE="ext4"cp /etc/fstab /etc/fstab.bak # 先备份!写错会导致开不了机
nano /etc/fstab追加一行:
UUID=a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data ext4 defaults,nofail 0 2字段含义:
<设备> <挂载点> <文件系统> <挂载选项> <dump> <fsck顺序>- 挂载选项推荐
defaults,nofail(nofail让磁盘不存在时也能正常开机) - 第 5 位
0:不用 dump 备份 - 第 6 位:根目录是 1,其他数据盘是 2,不检查写 0
验证 fstab 写得对不对(这一步必做):
mount -a # 按 fstab 重新挂载,没报错就是对的
df -h如果 mount -a 报错,立刻改,别重启。
6)权限设置
chown -R www-data:www-data /data # 按实际用户改
chmod 755 /data三、扩容已有分区
情况一:云平台扩容了磁盘容量(最常见)
在控制台把 50G 扩到 100G 后,系统里要执行两步:扩分区 → 扩文件系统。
步骤 1:确认容量已变
lsblk
# vda 显示 100G,但 vda1 还是 50G步骤 2:扩分区
# 安装工具
apt install cloud-guest-utils -y # Ubuntu
yum install cloud-utils-growpart -y # CentOS
# 扩展分区 1
growpart /dev/vda 1或用 parted:
parted /dev/vda
(parted) resizepart 1 100%
(parted) quit步骤 3:扩文件系统
# ext2/3/4
resize2fs /dev/vda1
# xfs(注意参数是挂载点,不是设备)
xfs_growfs /步骤 4:验证
df -h情况二:LVM 扩容
如果用的是 LVM(很多云镜像默认):
# 1. 查看
pvdisplay
vgdisplay
lvdisplay
# 2. 新磁盘加入物理卷
pvcreate /dev/vdb
vgextend vg0 /dev/vdb # vg0 换成你的卷组名
# 3. 扩展逻辑卷(用全部剩余空间)
lvextend -l +100%FREE /dev/vg0/lv0
# 4. 扩文件系统
resize2fs /dev/vg0/lv0 # ext4
xfs_growfs / # xfs
df -hLVM 的好处是可以随时加盘扩展,不用关心分区边界,生产环境推荐。
情况三:把目录迁移到新盘(不能扩分区时)
比如 /var 满了,加一块盘专门放 /var:
# 1. 挂载新盘到临时目录
mount /dev/vdb1 /mnt/new
# 2. 同步数据(保留权限)
rsync -avzP /var/ /mnt/new/
# 3. 改名备份
mv /var /var.old
mkdir /var
# 4. 挂载新盘到 /var
mount /dev/vdb1 /var
# 5. 写 fstab
echo "UUID=xxx /var ext4 defaults,nofail 0 2" >> /etc/fstab
# 6. 验证无误后删除旧目录
rm -rf /var.old⚠️ 操作 /var 这类系统目录建议先进救援模式或确保服务已停,避免文件被占用导致同步不全。四、磁盘满了的救急处理
先看是不是真满:
df -h
df -i # inode 也可能满快速找大文件
# 装 ncdu(交互式,最直观)
apt install ncdu -y
ncdu /
# 或者逐层看
du -sh /* 2>/dev/null | sort -h
du -sh /var/* 2>/dev/null | sort -h
du -sh /var/log/* 2>/dev/null | sort -h
# 找大于 500M 的文件
find / -type f -size +500M -exec ls -lh {} \; 2>/dev/null | sort -k5 -h常见可清理项
# 1. systemd 日志
journalctl --vacuum-size=200M
journalctl --vacuum-time=7d
# 2. 旧日志文件
find /var/log -name "*.gz" -delete
find /var/log -name "*.1" -delete
# 3. apt 缓存
apt clean
apt autoremove -y
# 4. yum 缓存
yum clean all
# 5. Docker
docker system prune -a --volumes
# 6. core dump
rm -f /var/lib/systemd/coredump/*
# 7. 临时文件
rm -rf /tmp/*
# 8. MySQL binlog(先在 MySQL 里清理)
mysql -e "PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);"特殊坑:文件删了空间没释放
lsof | grep deleted
# 或
lsof +L1某个进程还持有已删除文件的句柄,空间不会释放。重启该进程,或在线截断:
: > /var/log/huge.log
truncate -s 0 /var/log/huge.loginode 满了
表现:df -h 显示还有空间,但创建文件报 No space left on device。
df -i
# 找文件数最多的目录
for d in /*; do echo -n "$d: "; find $d -type f 2>/dev/null | wc -l; done常见原因:session 文件、缓存碎片、邮件队列。清理后即可(inode 数无法在线增加,只能重装并指定)。
五、磁盘健康检查
看 SMART 信息(物理机/部分云盘支持)
smartctl -a /dev/vda
smartctl -H /dev/vda # 只看健康状态文件系统检查
# 需要卸载后检查(根分区要进救援模式)
umount /dev/vdb1
fsck -y /dev/vdb1
# 强制下次开机检查根分区
touch /forcefsck
rebootIO 性能测试
# 顺序写
dd if=/dev/zero of=/data/test bs=1M count=1024 oflag=direct
# 顺序读
dd if=/data/test of=/dev/null bs=1M iflag=direct
# 更专业的随机 IO 测试
fio -filename=/data/test -direct=1 -rw=randrw -bs=4k -size=1G \
-numjobs=1 -runtime=60 -group_reporting -name=test参考值:SSD 随机 IO 应该达到几千 IOPS,HDD 只有一两百。
六、实用建议
1)分区规划
| 目录 | 建议 |
|---|---|
/ | 40~60G,装系统和程序 |
/data | 数据盘,放网站和游戏服务端 |
/var/log | 日志量大可单独分区,避免日志撑爆系统盘 |
/backup | 备份最好独立盘或异地 |
2)文件系统选择
| 类型 | 适用 |
|---|---|
| ext4 | 默认推荐,稳定通用,支持在线扩容 |
| xfs | 大文件、大分区性能好,CentOS 默认,只能扩不能缩 |
| btrfs | 有快照功能,但生产环境慎用 |
3)一定要配监控
# 磁盘超过 85% 就告警
*/10 * * * * df -h | awk '$5+0 > 85 {print $0}' | mail -s "磁盘告警" you@example.com4)扩容前先做快照
任何分区操作都有风险,先打快照再动手。详见《服务器备份与快照策略》。
七、故障排查表
| 现象 | 原因 | 处理 |
|---|---|---|
No space left on device | 磁盘满或 inode 满 | df -h + df -i |
Read-only file system | 文件系统错误触发只读保护 | 备份数据 → fsck → 重启 |
mount: unknown filesystem type | 没格式化或文件系统损坏 | 重新 mkfs(会丢数据) |
| 开机卡住进不了系统 | fstab 写错 | 进救援模式改回 /etc/fstab.bak |
growpart 报 "NOCHANGE" | 分区已是最大,只需扩文件系统 | 直接 resize2fs |
resize2fs: Bad magic number | 文件系统类型判断错 | 确认是 xfs 就改用 xfs_growfs |
扩容后 df 没变化 | 少做了扩文件系统那一步 | 补 resize2fs 或 xfs_growfs |
八、操作清单(照着做不会错)
新盘挂载:
lsblk # 确认盘符
fdisk /dev/vdb # 分区(或跳过)
mkfs.ext4 /dev/vdb1 # 格式化
blkid /dev/vdb1 # 拿 UUID
mkdir -p /data && mount /dev/vdb1 /data
cp /etc/fstab /etc/fstab.bak
echo "UUID=xxx /data ext4 defaults,nofail 0 2" >> /etc/fstab
mount -a # 验证
df -h # 确认在线扩容:
lsblk # 确认容量已变大
growpart /dev/vda 1 # 扩分区
resize2fs /dev/vda1 # 扩文件系统(ext4)
# 或 xfs_growfs / # (xfs)
df -h # 验证磁盘操作有风险,务必先做快照。财富云计算 的云服务器支持快照与磁盘扩容,扩容前打一个快照,出问题能立刻回滚。内网服务、开发测试、游戏服务端可选 NAT 型(无独立公网 IP,价格比带独立 IP 机型省一半以上),大容量数据盘方案同样适用。
相关阅读:
- 《服务器资源排查:CPU / 内存 / 磁盘 / 带宽》
- 《服务器备份与快照策略》
- 《Linux 常用命令速查表》
延伸阅读
- 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
- 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
- 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
- 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
- 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
- RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
- 短链接服务搭建:Shlink 自托管,链接数据自己掌握
- 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道

[...]findmnt / 没有 noatime 的话编辑 /etc/fstab,在对应分区的 options 里加上,重启生效(系统盘改动需谨慎,先测试)。五、什么时候该升级磁盘信号动作%util 持续 >80% 且业务已优化升级 SSD → ESSD数据库 await 长期 >20ms升 ESSD 并调 buffer pool游戏服存档必卡、降频无效数据盘单独 SSD/ESSD磁盘容量 &[...]
2026-10-15 回复
[...]# xfs 用: xfs_growfs /data完整图文流程见Linux 磁盘挂载与扩容实战。磁盘满是「温水煮青蛙」型故障:不致命但能让全站慢慢瘫痪。记住三板斧(df → du → find)、盯住四大户(日志/数据库/备份/Docker)、配上 logrotate 和告警,这个坑就永远和你无关。需要现成的游戏云服务器,可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 I[...]
2026-10-15 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-18 回复