Fuse를 통해 나타나는 일부 파일 시스템을 알고 있으며이 접근 방식의 장단점이 궁금합니다.

답변

실제, 온 디스크 파일 시스템 또는 모든 파일 시스템을 의미한다면 확실하지 않습니다. 일반적인 파일 시스템이 FUSE를 사용한다고 생각하지만 본 적이 없습니다. ” 가능합니다 .FUSE의 주요 이점은 파일 시스템처럼 보이는 응용 프로그램 (또는 사용자)에게 무언가를 제공 할 수있게 해주지 만 실제로는 사용자가 디렉터리에 파일을 나열하거나 새 파일을 만듭니다. Plan9 는 파일 시스템을 통해 모든 것에 액세스 할 수 있도록하는 것으로 잘 알려져 있으며 /proc 유사 -filesystem은 그들로부터 나옵니다. FUSE는 애플리케이션이 이러한 패턴을 쉽게 따를 수있는 방법입니다.

예를 들어, 여기 “SE 사이트 데이터에 액세스 할 수있는 (매우 기능이없는) FUSE 파일 시스템의 스크린 샷 :

작동중인 FUSE 파일 시스템의 스크린 샷

물론 이러한 파일은 실제로 존재하지 않습니다. ls가 사용자 73 (나)에 대한 정보를로드하기 위해이 사이트에 API 요청을 수행 한 내 프로그램의 함수를 호출하는 FUSE 디렉토리의 파일 목록을 요청했을 때; catdisplay_namewebsite_url에서 캐시 된 데이터를 반환 한 더 많은 함수를 호출했습니다. 실제로 디스크에 존재하지 않는 메모리

댓글

  • FAT의 FUSE 구현이 있습니다. , NTFS , iso9660 , ext2 더보기
  • Fuse에서 구현 된 헤비 듀티 파일 시스템 : LessFS, GlusterFS, MooseFS . Google '의 GFS (POSIX가 아님)도 사용자 공간에서 실행됩니다.
  • 앱을 어디에서 찾았습니까?!?!
  • @George SO API를 엉망으로 만들 때 작성했습니다. ' / users를 제외한 어떤 경로도 사용하지 않으므로 ' 기본적으로 해당 스크린 샷에 구현 된 모든 기능이 표시됩니다. 얼마나 힘든지보기 위해서였습니다.
  • @George github

답변

유닉스 파일 시스템은 전통적으로 커널에 구현되어 있습니다. FUSE 를 사용하면 사용자 프로그램으로 파일 시스템을 구현할 수 있습니다.

커널 내 파일 시스템은 프로그램 및 데이터의 기본 파일 시스템에 더 적합합니다.

  • 부트 미디어에서 사용할 수 있습니다 (FUSE 파일 시스템을 구현하는 프로그램은 어딘가에서로드해야 함).
  • 그들은 더 강력합니다. 프로세스가 충돌하거나 실수로 종료되어 사라집니다.
  • 다소 더 빠릅니다.

FUSE 파일 시스템에는 대부분 유연성을 중심으로하는 다른 장점이 있습니다.

  • 일반 사용자가로드하고 마운트 할 수 있으므로 네트워크 액세스, 아카이브 파일 통과, 이동식 미디어 등 사용자가 직접 마운트하는 파일 시스템에 편리합니다. .
  • FUSE 파일 시스템 드라이버가 충돌하더라도 커널에 당황하지 않습니다. 파일 시스템에 액세스하는 응용 프로그램에서 I / O 오류보다 더 나쁜 것은 없습니다.
  • 그들은 매우 빠르게 프로그래밍 할 수 있습니다. 수백 줄의 코드로 유용한 FUSE 파일 시스템 드라이버를 작성할 수있는 많은 스크립팅 언어에 대한 FUSE 바인딩 이 있습니다.
  • 설치하는 데 관리자의 개입이 필요하지 않고 지원되는 OS 간에 쉽게 이식 될 수 있기 때문에 매우 빠르게 배포됩니다.
  • 커널과 정적으로 연결되는 것과 관련된 라이선스 문제는 없습니다 (이는 zfs 에 영향을 미침).

Answer

FUSE는 파일 시스템 자체가 아니라 파일 시스템을 커널 모듈 대신 프로세스로 구현할 수있는 코드입니다.

FUSE의 가장 유용한 이점 중 하나는 GPL 코드가 GPL이 아닌 코드와 “혼합”되도록하는 것입니다. 예 : Gnu / Linux 및 ZFS http://zfs-fuse.net/ 또는 OpenSolaris 및 * BSD와 같은 여러 OS의 NTFS-3G http://www.tuxera.com/community/ntfs-3g-download/

주요 단점은 기본 (커널) 드라이버에 비해 성능에 미치는 영향입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다