ENOSPC: "btrfs 균형"이 왜 필요한가요? 그것은 무엇을 합니까?

ENOSPC: "btrfs 균형"이 왜 필요한가요? 그것은 무엇을 합니까?

여유 공간이 있더라도 btrfs balance단일 장치 파일 시스템에서 실행해야 합니다.ENOSPC

왜 이것을 실행해야합니까?

체중계는 실제로 무엇을 합니까?

답변1

대부분의 기존 파일 시스템과 달리 BTRFS는 2단계 할당자를 사용합니다. 첫 번째 단계에서는 특정 유형의 데이터에 대해 블록이라는 큰 공간 영역을 할당하고, 두 번째 단계에서는 일반 파일 시스템처럼 이러한 더 큰 영역 내에 블록을 할당합니다. 블록에는 세 가지 유형이 있습니다.

  • 데이터 블록: 일반 파일 데이터를 저장합니다.

  • 메타데이터 블록: 타임스탬프, 체크섬, 파일 이름, 소유권, 권한, 확장 속성 등을 포함하여 파일에 대한 메타데이터를 저장합니다.

  • 시스템 블록: 이는 다른 모든 블록의 위치에 대한 데이터를 저장하는 특별한 유형의 블록입니다.

블록에 할당된 데이터 유형만 블록에 저장할 수 있습니다. 현재 BTRFS에서 -ENOSPC 오류가 발생하는 경우 가장 일반적인 시나리오는 파일 시스템이 기존 블록의 데이터 또는 메타데이터 공간을 모두 사용하여 새 블록을 할당할 수 없다는 것입니다. 오류가 발생하는 파일 시스템에서 실행 하여 btrfs fi df이러한 경우를 확인할 수 있습니다. "데이터" 또는 "메타데이터" 행에 "사용됨" 값과 크게 다른 "전체" 값이 표시되는 경우 이것이 원인일 수 있습니다.

하는 일은 btrfs balance할당자를 통해 콘텐츠를 다시 보내는 것뿐입니다. 그러면 압축된 블록에서 공간이 사용됩니다. 예를 들어, 둘 다 40% 채워진 두 개의 메타데이터 블록이 있는 경우 균형을 조정하면 해당 블록이 80% 채워진 하나의 메타데이터 블록이 됩니다. 이와 같이 공간 사용량을 압축함으로써 밸런싱 작업은 현재 비어 있는 블록을 제거하여 새로운 블록 할당을 위한 공간을 확보할 수 있습니다. Balance를 실행한 후 다시 실행 해 보면 btrfs fi dfBalance가 더 이상 필요하지 않은 블록을 제거하기 때문에 "Total"과 "Used" 값이 서로 훨씬 더 가까워진 것을 확인할 수 있습니다.

관련 정보