gvfs

lv2dev·2025년 11월 6일

Linux

목록 보기
5/7

TL;DR

  • FUSE = Filesystem in Userspace. 커널 아님. 유저 공간 데몬이 파일시스템 로직 처리함
  • gvfs = GNOME 가상 파일시스템. FUSE로 /run/user/<UID>/gvfs에 붙여서 원격/특수 위치를 폴더처럼 보이게 해줌
  • /run/user/1000/gvfs root가 들어가도 허가 거부 뜨는 거 정상임. 기본이 해당 사용자 전용(0700, allow_other 미사용)
  • find 돌리다 /proc 관련 No such file 나오는 것도 정상임. 가상 FS 레이스 이슈임
  • 스크립트/백업 시 gvfs·/proc·/sys·/dev는 prune 하거나 2>/dev/null로 조용히 처리하면 됨

gvfs

  • GNOME 계열 데스크톱에서 원격/특수 위치를 파일처럼 보이게 해주는 레이어임
  • 예: smb://, sftp://, MTP(휴대폰), gphoto2(카메라), 휴지통 같은 가상 위치
  • CLI에서도 보이라고 FUSE로 /run/user/<UID>/gvfs 마운트
  • 데스크톱 세션 뜰 때 자동 동작함. 순수 서버 환경이면 보통 필요 없음

FUSE

  • 커널 모듈 fuse + 유저 공간 데몬 구조임
  • 커널이 VFS 요청을 /dev/fuse로 넘기고, 데몬이 처리해서 결과 돌려줌
  • 장점: 커널 코드 안 건드리고 빠르게 FS 개발/배포 가능
  • 예시: sshfs, rclone mount, s3fs, encfs, gvfsd

왜 root인데도 /run/user/1000/gvfs 허가 거부가 뜨는가

  • FUSE 기본 정책이 마운트한 사용자만 접근
  • gvfs는 보통 0700 + allow_other 미사용으로 붙음
  • 그래서 root라도 세션 사용자 아니면 접근 불가임 (SELinux가 막는 케이스도 섞임)
  • 보안상 정상 동작임

find 돌리면 에러 쏟아지는 이유

  • /proc: 가상 FS라서 스캔 중에 FD/프로세스 없어지면 “그런 파일 없음” 나옴 → 정상
  • /run/user/*/gvfs: 권한상 접근 불가 → “허가 거부” 정상
  • 조용하게 돌릴 땐 이렇게 하면 됨
# 권장: 시스템 루트만, 문제 경로 prune, 에러 무시
find / -xdev \
  \( -path /proc -o -path /sys -o -path /dev -o -path '/run/user/*/gvfs' \) -prune -o \
  -print 2>/dev/null

확인/진단 치트시트

# FUSE 커널 모듈/디바이스
lsmod | grep fuse || true
ls -l /dev/fuse

# gvfs 마운트 확인
mount | grep -E 'gvfs|fuse' || df -h | grep gvfs
ls -ld /run/user/*/gvfs 2>/dev/null

# GIO가 아는 마운트 목록(데스크톱일 때)
gio mount -l 2>/dev/null || true

# 언마운트
fusermount -u /run/user/1000/gvfs 2>/dev/null || true

자주 쓰는 FUSE 예시

# 1) sshfs: 원격 디렉토리 로컬에 붙이기
sshfs user@host:/data /mnt/host \
  -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3

# 2) rclone: 클라우드 스토리지 마운트
rclone mount remote:bucket /mnt/s3 \
  --vfs-cache-mode writes --daemon

# 3) s3fs: S3 마운트
s3fs mybucket /mnt/s3 -o use_path_request_style,url=https://s3.example.com
  • 성능 필요하면 캐시 옵션, direct_io, writeback_cache 같은 것 검토하면 됨
  • 대역/레이턴시 따라 체감 확 달라짐

보안 포인트

  • 기본은 마운트한 사용자만 보임 → 안전함

  • 다른 사용자도 보게 하려면 마운트 옵션에 allow_other 필요함

    • 시스템 /etc/fuse.confuser_allow_other 있어야 함
    • 보안상 신중히 사용 권장
  • 민감 데이터면 전송 암호화·권한·로깅 체크할 것

성능 메모

  • 유저 공간 왕복이라 커널 FS보다 느릴 수 있음
  • 옵션으로 캐싱 조절. 소규모 랜덤 IO보다 순차 IO에서 유리함
  • 네트워크 백엔드면 네트워크 품질이 곧 성능임

서버에서 gvfs 필요 없으면

  • 보통 그냥 둬도 문제 없음. 데스크톱 패키지 의존성 많음
  • 스크립트/백업에서 gvfs 경로 prune 만 해주면 깔끔함
  • 굳이 제거는 비추. 데스크톱 기능 깨질 수 있음

자주 묻는 Q

Q. root가 강제로 보고 싶음
A. /etc/fuse.confuser_allow_other 추가 → 마운트 시 -o allow_other 사용해야 함. gvfs는 기본적으로 그렇게 안 붙임. 보안상 권장 X

Q. /proc 에러 왜 계속 뜸
A. 가상 FS 라이스 이슈라 정상임. -ignore_readdir_race + 2>/dev/null 쓰면 조용해짐

Q. 백업 스크립트에서 어떻게 처리
A. /proc /sys /dev '/run/user/*/gvfs' prune 하고, -xdev로 다른 파티션 넘지 말고, 에러는 2>/dev/null 로 버리면 깔끔함


스니펫 모음

gvfs·FUSE 경로 스킵하는 find 템플릿

find / -xdev \
  \( -path /proc -o -path /sys -o -path /dev -o -path '/run/user/*/gvfs' \) -prune -o \
  -type f -print 2>/dev/null

FUSE 마운트 목록 보기

mount | grep fuse || df -h | grep fuse

gvfs 권한 확인

ls -ld /run/user/*/gvfs
# 보통 drwx------ (0700) 나옴 → 세션 사용자만 접근

끝.

profile
언제나 레벨업을 하고 싶은 영원한 lv1

0개의 댓글