当nginx错误日志突然停止更新且权限、属主、磁盘空间均正常时,文件系统被挂载为只读是隐蔽高频根因;需用df、mount或findmnt确认挂载状态是否含ro,结合dmesg和journalctl查找“read-only file system”线索,并通过remount,rw临时恢复日志写入,但必须溯源排查磁盘健康、文件系统损坏或i/o故障。

当 Nginx 错误日志突然停止更新,且 error_log 文件本身权限、属主、磁盘空间都看似正常时,文件系统被挂载为只读(read-only)是一个隐蔽但高频的根因。它不会触发典型的 Permission denied 报错,而是让所有写操作静默失败,日志完全“消失”。
确认文件系统是否被设为只读
直接检查日志所在分区的挂载状态:
- 运行
df -h /var/log(或你日志路径所在挂载点),看Mounted on列对应的设备; - 执行
mount | grep "$(df -P /var/log | tail -1 | awk '{print $1}')",观察输出中是否含ro,(如ro,relatime); - 更简捷方式:
findmnt -D /var/log,OPTIONS列显示ro即确认只读。
识别只读导致的典型现象与线索
文件系统只读时,Nginx 不会记录“无法写日志”的错误到自身 error.log(因为连该文件都写不了),需从外部找证据:
-
error.log文件最后修改时间停留在某个时刻后不再变化; - 用
ls -l /var/log/nginx/error.log查看文件大小不变,但stat /var/log/nginx/error.log中Modify时间冻结; -
dmesg -T | grep -i "remount.*ro\|ext4.*error\|filesystem.*read-only"常有内核级报错,如磁盘坏道、I/O 超时触发自动只读保护; -
journalctl -u nginx --since "2 hours ago" | grep -i "write\|log\|failed"可能出现open() failed (30: Read-only file system)。
快速验证与临时恢复
若确认是只读,先临时重挂为读写以恢复日志功能(仅用于诊断和应急):
- 执行
sudo mount -o remount,rw /var/log(将/var/log所在挂载点重挂为读写); - 立刻检查
error.log是否开始追加新内容(如 reload 后的提示); - 注意:这只是临时手段。只读通常是硬件故障、文件系统损坏或内核 panic 的结果,不能跳过根本排查。
定位只读的根本原因
只读不是配置问题,而是系统层告警信号,必须溯源:
- 查磁盘健康:
sudo smartctl -a /dev/sda(替换为实际磁盘),重点关注Reallocated_Sector_Ct、Current_Pending_Sector; - 查文件系统错误:
sudo e2fsck -f /dev/sda1(ext4)或sudo xfs_repair -n /dev/sda1(xfs),先用-n模拟检查; - 查 I/O 错误日志:
sudo cat /proc/diskstats | grep sda看rd_sec/wr_sec是否异常增长,或fail计数非零; - 检查是否有 RAID 或 LVM 层异常:
cat /proc/mdstat或sudo vgs; sudo lvs。











