You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ansible Playbook在Ubuntu上创建目录出现只读文件系统错误如何解决

错误原因

你遇到的[Errno 30] Read-only file system报错和目录权限设置无关,问题出在实例根文件系统的挂载属性:

  • 该报错本质是根分区/被挂载为只读状态,不管你给目标目录设置多大的权限位,都无法在只读文件系统上执行写入/创建操作
  • 普通用户无权限在根目录创建目录的报错为Permission denied,和当前报错类型完全不同,可直接排除权限位设置错误的问题
  • 常见触发只读挂载的场景:系统启动时检测到文件系统损坏自动进入只读保护模式、云-init实例初始化配置异常、手动误操作将根分区设为只读
解决步骤
  1. 先验证根分区挂载状态
    SSH登录到目标EC2实例,执行命令:
    mount | grep ' / '
    如果输出结果中包含ro参数,即可确认根分区为只读挂载状态。

  2. 临时修复挂载属性
    执行以下命令将根分区重新挂载为可写状态:
    sudo mount -o remount,rw /
    挂载完成后手动执行创建目录测试:
    sudo mkdir /scripts
    如果能创建成功,说明挂载问题已临时修复。

  3. 永久修复避免重启后复发

  • 先检测根文件系统是否存在损坏:执行sudo fsck -n /dev/root(-n参数为仅检测不修改,若检测出损坏,请先为实例创建快照后再执行修复操作,避免数据丢失)
  • 检查/etc/fstab配置,确认根分区的挂载参数是否被误设为ro,正常配置应带rw或defaults参数
  • 若你自定义过EC2实例的user data启动脚本,检查云-init配置是否存在设置根分区只读的相关规则
  1. 修正Ansible任务配置
    普通用户默认没有在根目录下创建目录的权限,需要在任务中添加become: yes参数,以root权限执行操作,修正后的任务示例:
- name: Create scripts directory
  ansible.builtin.file:
    path: /scripts
    state: directory
    mode: '0755'
  become: yes

内容的提问来源于stack exchange,提问作者Prats

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:45:04