BlobFuse란? - BlobFuse2
BlobFuse는 Azure Blob Storage의 가상 파일 시스템 드라이버입니다. BlobFuse를 사용하여 Linux 파일 시스템을 통해 기존 Azure 블록 Blob 데이터에 액세스합니다. 페이지 Blob이 지원되지 않습니다.
BlobFuse2 오픈 소스 프로젝트 정보
BlobFuse2는 libfuse 오픈 소스 라이브러리(fuse3)를 사용하여 Linux FUSE 커널 모듈과 통신하는 오픈 소스 프로젝트입니다. BlobFuse2는 Azure Storage REST API를 사용하여 파일 시스템 작업을 구현합니다.
오픈 소스 BlobFuse2 프로젝트는 GitHub에 있습니다.
라이선싱
BlobFuse2 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다.
기능
BlobFuse2 기능의 전체 목록은 BlobFuse2 추가 정보에 있습니다. BlobFuse2를 사용하여 수행할 수 있는 몇 가지 주요 작업은 다음과 같습니다.
- Linux에서 Azure Blob Storage 컨테이너 또는 Azure Data Lake Storage 파일 시스템을 탑재합니다. (BlobFuse2는 단일 구조 네임스페이스 또는 계층 구조 네임스페이스가 구성된 스토리지 계정을 지원합니다.)
- 기본 파일 시스템 작업(예:
mkdir
,opendir
,readdir
,rmdir
,open
,read
,create
,write
,close
,unlink
,truncate
,stat
및rename
)을 사용합니다. - 로컬 파일 캐싱을 사용하여 후속 액세스 시간을 향상시킵니다.
- BlobFuse2 상태 모니터를 사용하여 탑재 작업 및 리소스 사용에 대한 인사이트를 얻습니다.
BlobFuse2의 다른 주요 기능은 다음과 같습니다.
- 대용량 파일 읽기 및 쓰기를 지원하는 스트리밍
- 대용량 파일의 액세스 시간을 개선하기 위한 병렬 다운로드 및 업로드
- 읽기 전용 워크로드를 위한 동일한 컨테이너에 대한 다중 탑재
Important
이전 버전의 Blobfuse2를 모드로 block-cache
스트리밍할 때 알려진 데이터 일관성 문제로 인해 모든 Blobfuse2 설치를 버전 2.3.2 이상으로 업그레이드하는 것이 좋습니다. 자세한 내용은 this를 참조하세요.
BlobFuse v1에서 향상된 BlobFuse2 기능
BlobFuse2는 BlobFuse v1의 여러 사용자 시나리오에서 더 많은 기능 지원과 향상된 성능을 제공합니다. 자세한 향상된 기능 목록은 BlobFuse2 추가 정보를 참조하세요. BlobFuse v1에서 향상된 BlobFuse2 기능에 대한 요약은 다음과 같습니다.
- 향상된 캐싱
- 새로운 Azure CLI 명령을 통한 추가 관리 지원
- 더 많은 로깅 지원
- 대용량 파일에 대한 쓰기 스트리밍 추가(이전에는 읽기 스트리밍만 지원됨)
- 탑재 작업 및 리소스 사용에 대한 인사이트를 얻는 데 도움이 되는 새로운 BlobFuse2 상태 모니터
- 기존 BlobFuse v1 사용자를 위한 호환성 및 업그레이드 옵션
- 버전 확인 및 업그레이드 프롬프트
- 구성 파일 암호화 지원
BlobFuse v1에서 향상된 BlobFuse2 성능 목록을 참조하세요.
BlobFuse v1 사용자의 경우
BlobFuse2에서 제공하는 향상된 기능은 BlobFuse2로 업그레이드하고 마이그레이션해야 하는 강력한 이유입니다. 마이그레이션할 준비가 되지 않은 경우 BlobFuse2를 사용하여 BlobFuse v1에서 사용하는 것과 동일한 구성 옵션 및 Azure CLI 매개 변수를 사용하여 Blob 컨테이너를 탑재할 수 있습니다.
BlobFuse2 마이그레이션 가이드에서는 호환성 및 현재 워크로드 마이그레이션에 필요한 모든 세부 정보를 제공합니다.
지원
BlobFuse2는 지정된 제한 내에서 사용되는 경우 Microsoft에서 지원합니다. 문제가 발생한 경우 GitHub에서 문제를 보고하세요.
제한 사항
BlobFuse2는 단순히 요청을 Blob REST API로 변환하므로 100% POSIX 규정 준수를 보장하지 않습니다. 예를 들어 이름 바꾸기 작업은 POSIX에서 원자성이지만 BlobFuse2에서는 그렇지 않습니다.
네이티브 파일 시스템과 BlobFuse2 사이의 전체 차이점 목록을 참조하세요.
Linux 파일 시스템과 BlobFuse2 사이의 차이점
네이티브 Linux 파일 시스템과 마찬가지로 BlobFuse2 탑재 스토리지를 여러 가지 방법으로 사용할 수 있습니다. 가상 디렉터리 체계는 동일하며 슬래시(/
)를 구분 기호로 사용합니다. 기본 파일 시스템 작업(예: mkdir
, opendir
, readdir
, rmdir
, open
, read
, create
, write
, close
, unlink
, truncate
, stat
및 rename
)은 Linux 파일 시스템에서와 동일하게 작동합니다.
BlobFuse2는 다음 몇 가지 주요 방법에서 Linux 파일 시스템과 다릅니다.
하드 링크의 Readdir 수:
성능상의 이유로 BlobFuse2는 디렉터리 내의 하드 링크를 올바르게 보고하지 않습니다. 빈 디렉터리의 하드 링크 수는 2로 반환됩니다. 비어 있지 않은 디렉터리의 수는 실제 하드 링크의 수에 관계없이 항상 3으로 반환됩니다.
비원자성 이름 바꾸기:
Azure Blob Storage는 원자성 이름 바꾸기 작업을 지원하지 않습니다. 단일 파일 이름 바꾸기는 실제로 복사 후 원본 삭제의 두 가지 작업입니다. 디렉터리 이름 바꾸기는 디렉터리의 모든 파일을 재귀적으로 열거하고 각 파일의 이름을 바꿉니다.
특수 파일:
BlobFuse2는 디렉터리, 일반 파일 및 바로 가기 링크만 지원합니다. 디바이스 파일, 파이프 및 소켓과 같은 특수 파일은 지원되지 않습니다.
mkfifo:
Fifo 만들기는 BlobFuse2에서 지원되지 않습니다. 이 작업을 시도하면 “함수가 구현되지 않음” 오류가 발생합니다.
chown 및 chmod:
Data Lake Storage 스토리지 계정은 개체 권한 및 ACL당을 지원하지만 FNS(플랫 네임스페이스) 블록 Blob은 지원하지 않습니다. 따라서 BlobFuse2는 탑재된 블록 Blob 컨테이너에 대해
chown
및chmod
작업을 지원하지 않습니다. Data Lake Storage에 대한 작업이 지원됩니다.디바이스 파일 또는 파이프:
BlobFuse2는 디바이스 파일 또는 파이프 만들기를 지원하지 않습니다.
확장 특성(x-attrs):
BlobFuse2는 확장 특성(
x-attrs
) 작업을 지원하지 않습니다.쓰기 스트리밍:
대용량 파일 데이터에 대한 읽기 및 쓰기 작업의 동시 스트리밍은 예측할 수 없는 결과를 생성할 수 있습니다. 서로 다른 스레드에서 동일한 Blob에 동시에 쓰는 것은 지원되지 않습니다.
데이터 무결성
파일 캐싱은 Blob Storage 파일 시스템 탑재에서 읽고 쓰는 데이터의 무결성에서 중요한 역할을 합니다. 읽기 및 쓰기 작업 모두에 대한 스트리밍을 지원하는 대용량 파일에 스트리밍 모드를 사용하는 것이 좋습니다. BlobFuse2는 스트리밍 파일 블록을 메모리에 캐시합니다. 블록으로 구성되지 않는 작은 파일의 경우 전체 파일이 메모리에 저장됩니다. 파일 캐시는 두 번째 모드입니다. 파일이 디스크 전체에 저장되는 경우와 같이 대용량 파일이 포함되지 않은 워크로드에는 파일 캐시를 사용하는 것이 좋습니다.
BlobFuse2는 읽기 및 쓰기 작업을 지원합니다. 다른 API 또는 다른 BlobFuse2 탑재를 사용하여 스토리지에 기록된 데이터의 지속적인 동기화는 보장되지 않습니다. 데이터 무결성을 위해 여러 원본에서 동일한 Blob을 특히 동시에 수정하지 않는 것이 좋습니다. 하나 이상의 애플리케이션에서 동일한 파일에 쓰기를 동시에 시도하면 예기치 않은 결과가 발생할 수 있습니다. 여러 쓰기 작업의 타이밍 및 각 작업에 대한 캐시의 새로 고침에 따라 마지막 쓰기가 성공적으로 처리되고 이전 쓰기가 손실되거나 일반적으로 업데이트된 파일이 의도한 상태가 아닐 수 있습니다.
디스크의 파일 캐싱
파일이 쓰기 작업의 주체인 경우 데이터는 먼저 로컬 디스크에 캐시되도록 유지됩니다. 파일 핸들이 닫힌 후에만 데이터를 Blob 스토리지에 씁니다. 데이터를 Blob Storage에 유지하려고 시도할 때 문제가 발생하면 오류 메시지가 표시됩니다.
스트리밍
읽기 및 쓰기 작업 중 스트리밍의 경우 데이터 블록은 읽거나 업데이트될 때 메모리에 캐시됩니다. 파일이 닫히거나 버퍼가 더티 블록으로 채워지면 업데이트가 Azure Storage로 플러시됩니다.
여러 동시 스레드에서 동일한 Blob 읽기가 지원됩니다. 그러나 동시 쓰기 작업으로 인해 데이터 손실을 포함하여 예기치 않은 파일 데이터 결과가 발생할 수 있습니다. 동시 읽기 작업 및 단일 쓰기 작업을 수행하는 것은 지원되지만, 일부 스레드에서 읽는 데이터는 최신 데이터가 아닐 수 있습니다.
사용 권한
컨테이너가 기본 옵션으로 탑재되는 경우 770 권한이 모든 파일에 부여되고 탑재를 수행하는 사용자만 액세스할 수 있습니다. 모든 사용자가 BlobFuse2 탑재에 액세스할 수 있도록 하려면 --allow-other
옵션을 사용하여 BlobFuse2를 탑재합니다. 이 옵션은 YAML 구성 파일에서 구성할 수도 있습니다.
앞에서 chown
설명한 대로 Data Lake Storage에 대해 및 chmod
작업이 지원되지만 FNS 블록 Blob에는 지원되지 않습니다. 탑재된 FNS 블록 Blob 컨테이너에 대해 chmod
작업을 실행하면 성공 메시지가 반환되지만 실제로는 작업이 성공하지 않습니다.
기능 지원
이 표에서는 사용자 계정에서 이 기능이 지원되는 방법과 특정 기능을 활성화할 때 지원에 미치는 영향을 보여 줍니다.
Storage 계정 유형 | Blob Storage(기본 지원) | Data Lake Storage 1 | NFS(네트워크 파일 시스템) 3.0 1 | SFTP(SSH 파일 전송 프로토콜) 1 |
---|---|---|---|---|
표준 범용 v2 | ||||
Premium 블록 Blob |
1 Data Lake Storage, NFS 3.0 프로토콜 및 SFTP 지원은 모두 계층 구조 네임스페이스를 사용하도록 설정된 스토리지 계정이 필요합니다.