udev 规则触发错误“只读文件系统”

udev 规则触发错误“只读文件系统”

我创建了一个 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

我看到两种可能性:

  1. systemd-udevd进程在根文件系统重新挂载为可读写之前启动,并将其视为只读。
  2. systemd-udevd过程受到某种安全机制的约束,在Ubuntu的情况下是AppArmor。

但手动重启后它就可以工作,这一事实udev强烈表明了第一种可能性。我会尝试usb-mount.sh使用如下命令重新挂载 rootfs 读写:

mount -o remount,rw /

相关内容