새로 변환된 btrfs 파일 시스템의 메타데이터 사용 동작 이해

새로 변환된 btrfs 파일 시스템의 메타데이터 사용 동작 이해

du119,000개의 파일과 디렉터리에 3.3TiB(보고된 대로)의 미디어 파일이 있는 5TB 하드 드라이브가 있습니다 . 평균 파일 크기는 약 28MiB였습니다. ext4 파티션을 btrfs로 변환했습니다 btrfs-convert. 이 프로세스는 10.4시간이 걸렸으며 CPU에 바인딩되어 있었습니다. 변환 직후:

# btrfs fi df /mnt/btrfs/
Data, single: total=3.03TiB, used=2.21TiB
System, single: total=32.00MiB, used=236.00KiB
Metadata, single: total=1.52TiB, used=1.10TiB

btrfs는 하드 드라이브의 모든 공간(3.03 + 1.52TiB ≒ 5TB)을 할당했으며 ~1TiB의 파일 콘텐츠를 메타데이터 청크(1.10TiB 사용)에 넣은 것으로 보입니다. 내 파일 중 리프 노드에 맞는 파일이 거의 없기 때문에 이는 예상치 못한 일입니다.

대규모 메타데이터 할당에 대한 표준 솔루션은 메타데이터의 균형을 재조정하는 것입니다. btrfs balance start -m8.0시간이 걸렸고 I/O 바인딩되었습니다. 그 후 btrfs는 사용되지 않은 메타데이터 청크를 릴리스했을 뿐만 아니라 파일 콘텐츠를 메타데이터 청크에서 데이터 청크로 이동한 것으로 보입니다.

# btrfs fi df /mnt/btrfs/
Data, single: total=3.32TiB, used=3.31TiB
System, single: total=32.00MiB, used=104.00KiB
Metadata, single: total=3.00GiB, used=2.18GiB

무슨 일이 일어나고 있는지 설명해 줄 수 있는 사람이 있나요? "메타데이터"가 처음에 1.10TiB를 소비하는 이유는 무엇이며, 균형 조정을 통해 이를 2.18GiB로 줄이는 이유는 무엇입니까? btrfs balance파일 콘텐츠를 메타데이터 청크에서 데이터 청크로 이동 합니까 ?

저는 Linux 커널 3.13.0-46을 사용했습니다. 내 파일에는 하드 링크, xattrs, SELinux 컨텍스트 또는 ACL이 없습니다. 압축을 설정하지 않았으며 ext4 롤백 이미지를 삭제하지 않았습니다.

답변1

첫째, 변환 프로세스에서는 모든 이전 시스템 메타데이터의 복사본을 새 메타데이터에 저장하는데, 이는 대용량 드라이브에서 상당한 공간을 차지할 수 있습니다.

둘째, 변환 프로세스가 지저분하여 EXT4의 확장 영역도 크고 BTRFS의 크기가 고유하므로 확장 영역이 매우 커집니다.

할당된 크기는 사용된 메타데이터 크기의 약 1.5배가 됩니다. 조각 모음 프로세스는 사용된 메타데이터의 크기를 줄이지만 할당을 변경하지는 않습니다. 메타데이터를 더욱 줄일 수 있는 스키니 범위 옵션도 있지만 이는 작은 파일이 많은 시스템에 더 유용합니다. 메타데이터 할당량은 10% 미만으로 매우 작습니다.

Balance 명령은 현재 메타데이터 사용량을 기반으로 할당 크기를 새로운 값으로 줄여야 하는데, 이는 올바르게 수행된 것으로 보입니다. Balance 명령은 메타데이터에서 데이터로 이동해서는 안 되지만, 이는 원래 메타데이터 할당에 있는 원본 EXT4 메타데이터 이미지 복사본과 관련이 있을 수 있으며 이제 데이터(ext2_saved 하위 볼륨)로 이동됩니다. EXT4 이미지의 크기를 확인하여 1.1TB인지 확인하세요. 그럼에도 불구하고 파일 시스템 조각 모음을 수행하겠습니다.

조각 모음 없이 밸런스를 실행하면 오류가 발생할 수 있다는 점에 유의해야 합니다. 파일 시스템 문제를 방지하려면 최신 버전의 커널, 특히 3.17 이상을 사용하는 것이 좋습니다.

관련 정보