我有一个大而复杂的应用程序。我正在尝试从引导 CD 运行它,这显然是只读的。但是应用程序需要一个大的可写区域。(ramdisk 不会削减它。)所以我设法构建了一个 chroot 环境,使它看起来像应用程序在正常的可写环境中运行一样。
问题是,应用程序尝试做的第一件事就是安装一些已经安装的设备。我原以为内核会允许这样做,但似乎如果您尝试使用不同的安装选项重新安装设备,mount(2)
调用会返回EBUSY
. 我需要让这种情况停止发生。
应用程序不知道它正在以这种有点奇怪的配置运行。我真的不想更改应用程序代码来完成这项工作。有什么方法可以指示内核假装以只读方式挂载某些东西,即使它已经以读写方式挂载在其他地方?
好的,所以人们说这个问题不清楚。让我们再试一次:
~# mount /dev/sdb1 /XData
~# mkdir /tmp/CD
~# mount --bind / /tmp/CD
~# mount -t overlayfs -o lowerdir=/tmp/CD,upperdir=/XData/Root,workdir=/XData/Work none /NewRoot
~# chroot /NewRoot
~# java /home/user7/app.jar
当然,app.jar
不知道我在做这个,所以它会立即尝试做
mount --ro /dev/sdb1 /XData
哪个失败了。我正在寻找的是一种让它不会失败的方法。我真的不想更改应用程序 JAR 文件,但我完全可以更改导致启动它的命令。基本上我想app.jar
认为一切正常,没有任何奇怪的事情发生。但我无法弄清楚如何做到这一点。
(似乎如果您尝试使用相同的选项多次挂载某个东西,内核对此完全没问题。但是尝试使用不同的选项进行挂载似乎会使它不高兴。)
这个脚本应该适合你。如果没有,请让我知道
mount
写入/var/log/user.log
,/var/log/syslog
或的日志消息/var/log/messages
。