Jef*_*eff 6 filesystems systemd redis
我有一个 rw 文件系统/myraid0
。
# cat /proc/mounts | grep myraid0
/dev/mapper/isw_cfdbejjgdi_myraid0p1 /myraid0 ext4 rw,relatime,stripe=8,data=ordered 0 0
Run Code Online (Sandbox Code Playgroud)
我以/myraid0
任何用户的身份写信都没有问题。
redis@host:~$ echo hi > /myraid0/tmp/redis/test
redis@host:~$ cat /myraid0/tmp/redis/test
hi
Run Code Online (Sandbox Code Playgroud)
但是,/myraid0
由于EROFS
(只读文件系统),我的进程无法在 上写入文件。
open("temp-4036.rdb", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 EROFS (Read-only file system)
Run Code Online (Sandbox Code Playgroud)
这表明该进程将挂载视为 ro。
# cat /proc/15920/mounts | grep myraid0
/dev/mapper/isw_cfdbejjgdi_myraid0p1 /myraid0 ext4 ro,relatime,stripe=8,data=ordered 0 0
Run Code Online (Sandbox Code Playgroud)
为什么进程只有挂载的只读视图?
谢谢!
Linux jeff-apartment-2015 4.4.0-36-generic #55-Ubuntu SMP Thu Aug 11 18:01:55 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
redis-server
. 无法将快照保存到非 root 设备无法打开 .rdb 进行保存:只读文件系统
apt-get
systemd
/proc/15920/ns
(由@VenkatC 要求):
lrwxrwxrwx 1 redis redis 0 Sep 16 05:39 cgroup -> cgroup:[4026531835]
lrwxrwxrwx 1 redis redis 0 Sep 15 18:03 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 redis redis 0 Sep 15 18:03 mnt -> mnt:[4026532343]
lrwxrwxrwx 1 redis redis 0 Sep 15 18:03 net -> net:[4026531957]
lrwxrwxrwx 1 redis redis 0 Sep 15 18:03 pid -> pid:[4026531836]
lrwxrwxrwx 1 redis redis 0 Sep 15 18:03 user -> user:[4026531837]
lrwxrwxrwx 1 redis redis 0 Sep 15 18:03 uts -> uts:[4026531838]
apparmor_status | grep redis
不返回任何内容(由@Gilles 请求)Redis 用户的工作 bash shell
ls -l /proc/7359/ns/mnt
lrwxrwxrwx 1 redis redis 0 Sep 15 18:03 /proc/7359/ns/mnt -> mnt:[4026531840]
Run Code Online (Sandbox Code Playgroud)
不工作的redis进程
ls -l /proc/15920/ns/mnt
lrwxrwxrwx 1 redis redis 0 Sep 15 18:03 /proc/15920/ns/mnt -> mnt:[4026532343]
Run Code Online (Sandbox Code Playgroud)
为我的用户工作的 bash shell
ls -atlrh /proc/7138/ns/mnt
lrwxrwxrwx 1 jeff jeff 0 Sep 15 18:03 /proc/7138/ns/mnt -> mnt:[4026531840]
Run Code Online (Sandbox Code Playgroud)
Ven*_*atC 11
如您所见,redis 进程运行在它自己的“挂载命名空间”中,并带有只读选项。
Redis proc started by Systemd [/proc/15920/ns/mnt] -> mnt:[4026532343]
your shell [/proc/7138/ns/mnt] -> mnt:[4026531840]
Run Code Online (Sandbox Code Playgroud)
查看 systemd 单元以获取redis-server
与 mountflags 相关的启动和更新选项以满足您的需求
查看 redis-server systemd 单元文件,我看到以下设置
# grep -i readwrite /etc/systemd/system/redis.service
ReadWriteDirectories=-/var/lib/redis
ReadWriteDirectories=-/var/log/redis
ReadWriteDirectories=-/var/run/redis
ReadWriteDirectories=-/etc/redis
Run Code Online (Sandbox Code Playgroud)
所以你可以添加 /myraid0 作为附加ReadWriteDirectories
并重新启动 redis 服务
归档时间: |
|
查看次数: |
2305 次 |
最近记录: |