![udev 规则触发错误“只读文件系统”](https://linux22.com/image/138718/udev%20%E8%A7%84%E5%88%99%E8%A7%A6%E5%8F%91%E9%94%99%E8%AF%AF%E2%80%9C%E5%8F%AA%E8%AF%BB%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E2%80%9D.png)
我创建了一个 udev 规则,该规则启动一个 shell 脚本,该脚本在连接某些特定 USB HD 时创建目录 /media/my-disk。它已经工作了好几个月,但重新启动后(可能更新了一些软件包),每次插入驱动器时,它都会显示以下消息(在系统日志中):
mkdir: cannot create directory '/media/my-disk': Read-only file system
我已将以下几行添加到脚本中:
whoami
mount
结果是:
root
usb-mount.sh: /dev/mapper/sda3_crypt on / type btrfs (ro,relatime,ssd,space_cache,subvolid=257,subvol=/@)
因此,udev 似乎将根文件系统视为只读,但如果我sudo mount
手动执行,它会显示它以读/写方式挂载:
/dev/mapper/sda3_crypt on / type btrfs (rw,relatime,ssd,space_cache,subvolid=257,subvol=/@)
我在网上搜索了一下,发现了同样的问题,但没有解决方案: https://www.raspberrypi.org/forums/viewtopic.php?t=210243
重新启动 udev 服务可以解决该问题,直到下次重新启动为止。
我可以检查什么来永久解决这个问题?
注意:我运行的是 Ubuntu 18.04.1 LTS
答案1
我看到两种可能性:
- 该
systemd-udevd
进程在根文件系统重新挂载为可读写之前启动,并将其视为只读。 - 该
systemd-udevd
过程受到某种安全机制的约束,在Ubuntu的情况下是AppArmor。
但手动重启后它就可以工作,这一事实udev
强烈表明了第一种可能性。我会尝试usb-mount.sh
使用如下命令重新挂载 rootfs 读写:
mount -o remount,rw /