반응형

1. NFS (Network File System)

NFS는 네트워크 상에서 파일을 공유할 수 있게 해주는 파일 시스템입니다.

즉, 원격 서버에 있는 파일을 마치 로컬 파일처럼 사용할 수 있게 해줍니다.

NFS는 주로 서버와 클라이언트 간에 파일을 주고받는 데 사용되며 리눅스, 유닉스, 윈도우 등 여러 운영체제에서 지원됩니다.

  • 작동 방식: NFS 서버가 파일을 공유하고, 클라이언트는 이 파일을 네트워크를 통해 마운트하여 로컬 파일처럼 접근합니다.
  • 주요 특징: NFS는 커널 레벨에서 작동하여 성능이 높고, 네트워크를 통해 원격 파일을 쉽게 공유할 수 있습니다.
  • 사용 예시: 회사 내부에서 여러 서버가 동일한 파일을 공유해야 하는 상황에서 사용됩니다.

2. FUSE (Filesystem in Userspace)

FUSE는 파일 시스템을 유저 공간에서 실행할 수 있도록 도와주는 인터페이스입니다.

원래 파일 시스템은 커널에서 동작하지만, FUSE를 사용하면 유저 공간에서 다양한 파일 시스템을 구현하고 실행할 수 있습니다.

이로 인해 FUSE는 네트워크 파일 시스템(NFS, S3FS)뿐만 아니라, 암호화 파일 시스템, 가상 파일 시스템 등 여러 종류의 파일 시스템을 구현하는 데 유용합니다.

  • 작동 방식: FUSE는 커널과 유저 공간 사이에서 동작하여, 커널에서 파일 시스템 요청이 들어오면, 이를 유저 공간에서 처리한 후 다시 커널로 결과를 반환하는 방식입니다.
  • 주요 특징: FUSE는 유연성 있게 다양한 파일 시스템을 구현할 수 있지만, 성능은 커널 공간에서 직접 동작하는 파일 시스템보다 약간 느릴 수 있습니다.
  • 사용 예시: 클라우드 스토리지(S3)나 사용자 정의 파일 시스템을 로컬 파일 시스템처럼 사용할 때 주로 사용됩니다.

 

이럴때 유용하다!

  • 사용자 맞춤형 파일 시스템을 쉽게 개발하고 실행할 수 있음
  • 네트워크를 통해 다른 서버나 클라우드 스토리지에 접근할 수 있음
  • 기존 커널 파일 시스템 코드를 수정할 필요 없이 파일 시스템을 유저 공간에서 구현 가능

 

3. NFS와 FUSE의 차이점

개념 NFS FUSE
역할 네트워크를 통한 파일 공유 유저 공간에서 파일 시스템 구현
동작 위치 커널에서 작동 유저 공간에서 작동 (커널과 통신)
주요 기능 원격 서버의 파일을 로컬처럼 사용 가능 유연한 파일 시스템 개발 및 구현 가능
성능 커널에서 작동하므로 빠름 유저 공간에서 작동하므로 상대적으로 느릴 수 있음
주요 사용 예 네트워크 파일 공유 (사내 서버 등) S3 파일 시스템, 암호화 파일 시스템 등 사용자 정의 파일 시스템


4. FUSE와 NFS를 함께 사용하는 경우

FUSE와 NFS는 서로 다른 개념이지만, 같이 사용할 수도 있습니다.

예를 들어, FUSE를 사용하여 NFS를 마운트할 수 있습니다.

이 경우 NFS는 네트워크 상의 파일을 제공하는 시스템이고, FUSE는 이 파일 시스템을 유저 공간에서 관리하고 처리하는 역할을 합니다.

 

예시: FUSE를 사용해 NFS 파일 시스템을 마운트하면, 네트워크 상의 파일 시스템을 유저 공간에서 처리할 수 있게 됩니다.

 

요약

  • NFS는 네트워크를 통해 파일을 공유하는 파일 시스템
  • FUSE는 유저 공간에서 파일 시스템을 구현하고 실행하는 인터페이스
  • 두 개념은 서로 다른 목적으로 사용되지만, 함께 사용할 수도 있다!!

NFS는 네트워크 파일 공유를 위한 시스템, FUSE는 유저 공간에서 다양한 파일 시스템을 다룰 수 있게 해주는 도구라고 이해하면 좋다!

 

응용

여기서 보안 관련 내용을 추가해보자면, 만약 백신 프로세스가 동작하면 NFS나 FUSE 같은 애들에게 영향을 줄까?

그러면 일단 어떤 방식으로 동작할 것으로 예상되는지 살짝 알아보자.

1. FUSE를 통해 파일이 저장되는 구조

FUSE는 로컬 경로처럼 보이지만 실제로는 네트워크나 특정 파일 시스템에 있는 파일을 유저 공간에서 처리하는 역할을 합니다.

FUSE를 통해 특정 디렉터리(예: /mnt/fuse_dir)에 파일을 저장하는 경우, 이 경로는 로컬에 있는 것처럼 보이지만 실제로는 FUSE가 관리하는 가상 파일 시스템이거나 원격 서버에 있는 파일입니다.

2. 파일 접근 시 FUSE 메모리 사용

파일을 접근할 때마다 FUSE는 다음과 같은 과정으로 메모리를 사용하게 됩니다.

  1. FUSE가 파일 시스템 요청 처리: 백신이 특정 파일을 스캔하거나 접근할 때, 그 파일이 로컬 경로에 있는 것처럼 보이지만, 실제로는 FUSE가 이 파일에 접근하는 요청을 처리합니다.
  2. 파일 데이터 로드: 파일이 FUSE가 관리하는 네트워크 파일 시스템이거나 가상 파일 시스템에 있다면, FUSE는 그 파일을 실제로 네트워크 또는 원격 서버에서 로드하여 가져와야 합니다. 이 과정에서 데이터를 가져오기 위해 메모리를 사용하게 됩니다.
  3. 메모리 캐싱: FUSE는 유저 공간에서 작동하므로 파일 시스템 요청을 처리하면서 파일 데이터를 메모리에 캐싱하거나 임시로 저장합니다. 파일이 크거나 여러 파일에 접근할 때, 이 메모리 사용량이 급격히 늘어날 수 있습니다.

3. 왜 FUSE가 메모리를 사용하는가?

FUSE는 파일을 유저 공간에서 처리하는 방식으로 동작하기 때문에, 파일에 접근할 때마다 메모리를 많이 사용할 수 있습니다.

특히, FUSE가 네트워크를 통해 파일을 로드하거나 원격 파일 시스템을 관리하는 경우, 파일을 가져오는 동안 데이터를 메모리에 저장해야 하기 때문에 메모리 사용이 급증할 수 있습니다.

  • 파일 시스템 동작 방식: 파일이 로컬 경로처럼 보이지만, 실제로는 원격 파일 시스템이나 FUSE로 관리되는 파일 시스템에 있는 경우, FUSE가 그 파일을 가져와야 합니다.
  • 메모리 사용 증가 원인: FUSE가 데이터를 메모리에 임시로 저장하는 과정에서 많은 메모리를 사용할 수 있습니다. 특히 파일이 많거나 크기가 클수록 이 메모리 사용량은 더 늘어날 수 있습니다.

요약

  • 파일이 로컬 경로처럼 보이지만, 실제로는 FUSE가 관리하는 파일 시스템에 저장되어 있을 수 있습니다.
  • 백신이 이 파일에 접근할 때마다 FUSE는 중간다리 역할로 파일 시스템 요청을 처리하고, 그 과정에서 메모리를 사용합니다.
  • FUSE는 네트워크에서 파일을 가져와 백신에게 전달해야 하므로 이를 처리하는 동안 데이터를 메모리에 저장하기 때문에, 메모리 사용량이 급격히 증가할 수 있습니다.

결론적으로, 백신이 접근하는 파일이 실제로 FUSE를 통해 관리되는 파일이고, 이 파일을 처리할 때마다 FUSE가 메모리를 사용하는 방식!!

 

FUSE가 네트워크 상의 파일을 가져오는 과정에서 많은 메모리를 사용하고, 이 메모리는 백신 프로세스에서 사용되는 메모리 제한과는 무관하게 증가할 수 있다. 그래서 백신 자체에 메모리 사용 제한을 걸어도, 네트워크 파일을 가져오는 FUSE 프로세스가 별도로 메모리를 많이 사용하게 되어 전체 시스템의 메모리 사용량이 증가할 수 있다.

-> FUSE 사용 여부를 미리 확인하여 나도 모르는 메모리 증가가 발생하지 않도록 하면 좋겠다.

 

FUSE 동작 여부 확인하기

 

  • mount | grep fuse: 마운트된 FUSE 파일 시스템 확인
  • /proc/mounts: 마운트된 파일 시스템 목록에서 FUSE 찾기
  • ps aux | grep fuse: FUSE 관련 프로세스 확인
  • dmesg | grep fuse: FUSE 관련 커널 로그 확인

 

반응형

+ Recent posts