用心打造
VPS知识分享网站

服务报只读文件系统,如何保留systemd防护并允许写入?

服务在终端能写文件,启动后却报Read-only file system。先查宿主机挂载和服务自己的文件系统视图;遇到只读限制时,加写权限也未必有用。

只读目录与单独允许写入的目录示意图

先确定谁把目录变成只读

用journalctl -u report.service -b找到报错路径,再用findmnt -T /srv/report/state -o TARGET,OPTIONS查看宿主机挂载。用systemctl cat report.service检查覆盖文件中的ProtectSystem、ReadOnlyPaths和ReadWritePaths。宿主机可写不代表服务看到的目录也可写。

给持久数据安排专用目录

应用能改路径时,优先使用StateDirectory=report,并让应用使用STATE_DIRECTORY指向的目录;系统服务的常见路径是/var/lib/report。StateDirectory不负责自动迁移旧数据,停写、备份和属主核对都要先做。DynamicUser下应避免手动猜测实际目录映射。

只给必须保留的路径开例外

路径无法迁移时,在服务的覆盖片段中为确实需要写入的目录配置ReadWritePaths=/srv/report/state。确认路径存在且服务账号有权限。例外不能把底层只读文件系统变成可写,也不会增加Unix权限。避免开放整个/srv。

排除账号权限和启动顺序

文件系统可写时,再查服务账号对目录和上级路径的访问权限。若数据盘单独挂载,确保挂载先于服务启动,避免应用把文件误写到根盘上同名目录。

从服务自身验证写入

在萤光云或LightNode的独立实例核对发行版支持与应用行为,再在生产维护窗口执行sudo systemctl daemon-reload和服务重启。触发正常业务写入并检查日志与产物,同时确认无需写入的目录仍保留原限制。

FAQ

chmod能修只读挂载吗? 不能,权限位与挂载状态是两层。

该关闭ProtectSystem吗? 优先为必要目录配置最小写入范围。

ReadWritePaths会创建目录吗? 不会;需确保路径存在。

迁移后旧文件会自动带过去吗? 不会,按应用方案迁移。

手动写成功能证明修好吗? 不能,应验证实际服务执行的写入。

温馨提示

若发现整个磁盘因I/O故障变为只读,先保存诊断记录并检查文件系统和磁盘健康,不要为了恢复写入强行重挂载。

赞(0)
未经允许不得转载;国外VPS测评网 » 服务报只读文件系统,如何保留systemd防护并允许写入?
分享到