![새로 변환된 btrfs 파일 시스템의 메타데이터 사용 동작 이해](https://rvso.com/image/1444062/%EC%83%88%EB%A1%9C%20%EB%B3%80%ED%99%98%EB%90%9C%20btrfs%20%ED%8C%8C%EC%9D%BC%20%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%98%20%EB%A9%94%ED%83%80%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EC%82%AC%EC%9A%A9%20%EB%8F%99%EC%9E%91%20%EC%9D%B4%ED%95%B4.png)
du
119,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 -m
8.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 이상을 사용하는 것이 좋습니다.