私はrwファイルシステムを持っています/myraid0
。
# cat /proc/mounts | grep myraid0
/dev/mapper/isw_cfdbejjgdi_myraid0p1 /myraid0 ext4 rw,relatime,stripe=8,data=ordered 0 0
私はどんなユーザーとしてでも書くことに問題はありません/myraid0
。
redis@host:~$ echo hi > /myraid0/tmp/redis/test
redis@host:~$ cat /myraid0/tmp/redis/test
hi
/myraid0
しかし、EROFS
(読み取り専用ファイルシステム)のため、私のプロセスはファイルを書き込めません。
open("temp-4036.rdb", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 EROFS (Read-only file system)
これは、プロセスがマウントをroとして扱うことを示します。
# cat /proc/15920/mounts | grep myraid0
/dev/mapper/isw_cfdbejjgdi_myraid0p1 /myraid0 ext4 ro,relatime,stripe=8,data=ordered 0 0
プロセスにマウントの読み取り専用ビューしかないのはなぜですか?
ありがとうございます!
追加の詳細
- Ubuntu16.04
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
ルート化されていないデバイスにスナップショットを保存することはできません。 - Redisエラーは
保存するために.rdbを開くことができません:読み取り専用ファイルシステム
- バージョン3.0.6をインストールして
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が要求しました)- ログのどれも、strace出力よりも多くの情報を提供しません。
プロセス名前空間
Redisユーザーのための動作中のbashシェル
ls -l /proc/7359/ns/mnt
lrwxrwxrwx 1 redis redis 0 Sep 15 18:03 /proc/7359/ns/mnt -> mnt:[4026531840]
Redisプロセスが機能しない
ls -l /proc/15920/ns/mnt
lrwxrwxrwx 1 redis redis 0 Sep 15 18:03 /proc/15920/ns/mnt -> mnt:[4026532343]
私のユーザーのためのタスクbashシェル
ls -atlrh /proc/7138/ns/mnt
lrwxrwxrwx 1 jeff jeff 0 Sep 15 18:03 /proc/7138/ns/mnt -> mnt:[4026531840]
答え1
ご覧のとおり、redisプロセスは読み取り専用オプションを使用して独自の「マウントネームスペース」で実行されています。
Redis proc started by Systemd [/proc/15920/ns/mnt] -> mnt:[4026532343]
your shell [/proc/7138/ns/mnt] -> mnt:[4026531840]
redis-server
必要に応じてmountflags関連の起動と更新のオプションについては、systemdデバイスを確認してください。
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
したがって、/ myraid0を追加しReadWriteDirectories
てredisサービスを再起動できます。