我想在 freebsd jail 中挂载 /dev/shm。每次我尝试这样做时,都会收到以下错误:
[root@gaming /]# mount -t tmpfs tmpfs /dev/shm
mount: /dev/shm: No such file or directory
[root@gaming /]# touch /dev/shm
touch: /dev/shm: Operation not supported
[root@gaming /]#
Jail 运行完美,我只是不知道如何让 devfs 自动创建目录。
谢谢。
答案1
如果你想在 jail 中使用 tmpfs,最好添加如下行
tmpfs /jails/foo.example.org/tmp tmpfs rw,size=524288000 0 0
到监狱的 fstab 文件。
答案2
可以为监狱中的Linux应用程序提供所需的/dev/shm
。
安装/usr/ports/emulators/linux_base-c7
。
添加/etc/fstab
:
tmpfs /compat/linux/dev/shm tmpfs rw,mode=1777 0 0
tmpfs /tmp tmpfs rw,mode=1777 0 0
加入/etc/devfs.conf
:
link /tmp shm
在/etc/jail.conf
监狱里my_jail
添加:
devfs_ruleset = 4;
mount.devfs;
mount.fstab = /etc/fstab.my_jail;
allow.mount;
allow.mount.devfs;
加入/etc/fstab.my_jail
:
tmpfs /opt/jails/my_jail/tmp tmpfs rw,late,mode=1777 0 0
tmpfs /opt/jails/my_jail/compat/linux/dev/shm tmpfs rw,mode=1777 0 0
devfs /opt/jails/my_jail/dev devfs rw,late 0 0
使用 mode=1777 为 tmpfs 设备创建尚未存在的挂载点。您可以使用符号链接
在 jail 中提供更多设备,例如,提供可用的设备/compat/linux/dev
/dev/null
sudo ln -s /dev/null /opt/jails/my_jail/compat/linux/dev/null
/dev/shm
我通过运行带有以下脚本的 Linux python 来测试监狱中的可用性:
#!/usr/bin/env python
import multiprocessing
lock = multiprocessing.Lock()
print("lock: %s" % lock)
q = multiprocessing.Queue()
print ("q: %s" % q)
如果/dev/shm
在监狱中可用,则返回类似
lock: <Lock(owner=None)>
q: <multiprocessing.queues.Queue object at 0x80088ef90>
如果/dev/shm
不可用,则返回
Traceback (most recent call last):
File "sem-test.py", line 4, in <module>
lock = multiprocessing.Lock()
File "/usr/lib/python2.7/multiprocessing/__init__.py", line 176, in Lock
return Lock()
File "/usr/lib/python2.7/multiprocessing/synchronize.py", line 147, in __init__
SemLock.__init__(self, SEMAPHORE, 1, 1)
File "/usr/lib/python2.7/multiprocessing/synchronize.py", line 75, in __init__
sl = self._semlock = _multiprocessing.SemLock(kind, value, maxvalue)
OSError: [Errno 38] Function not implemented