나는 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
프로세스에 마운트에 대한 읽기 전용 보기만 있는 이유는 무엇입니까?
감사해요!
추가 세부 사항
- 우분투16.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 서비스를 다시 시작할 수 있습니다.