linux磁盘写满后ext3/ext4会自动转为只读模式以保护文件系统,需先释放空间、运行e2fsck修复,再remount为读写;同时检查reserved blocks和inode耗尽情况,并通过logrotate、监控告警等预防复发。

Linux磁盘写满后,部分文件系统(如ext3/ext4)可能自动触发“只读模式”以防止进一步损坏。这不是系统崩溃,而是内核的保护机制——一旦检测到无法写入关键元数据(比如日志写失败),会将挂载的分区设为ro(read-only)。恢复的关键是:先释放空间,再重新挂载为读写。
确认是否真因磁盘满导致只读
执行mount命令查看挂载状态,若某分区显示(ro),再用df -h检查对应挂载点使用率。注意:有些情况看似“100%”,实则是被reserved blocks(默认5%)占用,普通用户看不到剩余空间,但root仍可写;此时df -i查inode是否耗尽也很重要——inode满也会引发只读或写入失败。
快速释放空间的常用操作
- 清理大日志:用
journalctl --disk-usage看journald占用,执行journalctl --vacuum-size=200M限制日志体积 - 清空无用core dump:检查
/var/lib/systemd/coredump/或/var/crash/,删除旧文件 - 查找并清理大文件:
find /var/log -type f -size +100M -exec ls -lh {} \; -exec rm -f {} \;(谨慎执行,建议先ls确认) - 检查已删除但未释放的文件:运行
lsof +L1,找到被进程打开却已删除的文件,重启对应服务或kill进程释放空间
重新挂载为读写模式
空间释放后,不要直接mount -o remount,rw /mount/point——如果文件系统存在错误,该命令会失败。应先运行e2fsck -f /dev/sdXN(替换为实际设备名,如/dev/sda1),强制检查修复。完成后,再执行mount -o remount,rw /mount/point。若提示“device is busy”,可用lsof /mount/point查占用进程并处理。
预防后续再次发生
- 配置logrotate对关键日志(如
/var/log/messages、nginx/access.log)做定期轮转与压缩 - 监控预警:部署
df巡检脚本或Zabbix等工具,在使用率超85%时发告警 - 调整预留空间(仅限非系统盘):用
tune2fs -m 1 /dev/sdXN将保留比例从默认5%降至1%,释放更多可用空间给普通用户 - 避免在
/tmp或/var/tmp长期存放大文件,考虑挂载tmpfs或设置定时清理
不复杂但容易忽略的是:只读不是故障终点,而是明确的信号——空间不足或文件系统异常已经存在。及时响应、定位根源,比单纯“恢复读写”更重要。










