ext4 여유 블록 또는 오버헤드 클러스터

ext4 여유 블록 또는 오버헤드 클러스터

루트 공간을 예약하지 않고 희소한 16GB 파일에 ext4 파일 시스템을 생성하면 실제 사용 가능한 크기는 15.58GB입니다. 왜 이런 일이 발생합니까? 내가 사용한 명령은 다음과 같습니다.

fallocate -l 16G test.img
mkfs -t ext4 -m 0 test.img
mount test.img test

tune2fs에는 4096(블록 크기)을 곱하고 1024^3으로 나누어 GB 단위의 값을 얻을 수 있는 값이 있으며 Overhead clusters: 109857누락된 ~0.41GB를 얻습니다.https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout오버헤드 클러스터링에 대해 매우 이상한 말을 했습니다.

fs의 오버헤드 블록/클러스터. (응? 이 필드는 항상 0입니다. 이는 커널이 동적으로 계산한다는 의미입니다.)

무슨 뜻이에요? 이 문제와 관련이 있나요? 설치된 이미지의 전체 크기가 16GB가 되려면 Fallocate에서 어떤 크기를 설정해야 합니까?

답변1

"오버헤드 클러스터"는 파일 시스템이 디스크를 관리하기 위해 사용하는 모든 메타데이터입니다. 일반적으로 ext4의 가장 큰 구성 요소는 inode 테이블과 로그이며 tune2fs.

기본 inode_ratio는 16KiB입니다. 이는 귀하의 예에서 1M inode x 256바이트를 제공하며 이는 신비한 0.41GiB의 0.25입니다.

시작 시 inode 번호와 로그 크기를 설정할 수 있습니다.파일 시스템이 생성되었습니다.. 이전 댓글 작성자가 지적했듯이 이를 0으로 설정할 수 없습니다.

답변2

설치된 이미지의 전체 크기가 16GB가 되려면 Fallocate에서 어떤 크기를 설정해야 합니까?

현재와 ​​마찬가지로 16GB입니다.

루트 공간을 예약하지 않고 희소한 16GB 파일에 ext4 파일 시스템을 생성하면 실제 사용 가능한 크기는 15.58GB입니다. 왜 이런 일이 발생합니까?

파일이 저장되는 장치는 파일 공간과 크기가 절대 동일하지 않습니다. 전체 파일 시스템 정보(파일 이름, 속성 및 파일에 속한 데이터가 실제로 블록 장치에 저장되는 위치)가 이동해야 합니다.어딘가에!

이 문제와 관련이 있나요?

이것은 문제가 되지 않습니다! 이것이 진실입니다.

사실 크기가 정확히 16GB인 단일 파일이 없으면 필요한 "오버헤드"를 계산할 수 없습니다. 모든 파일에는 약간의 추가 공간이 필요합니다. 기존 파일 시스템에서는 작은 파일/파일 테일을 계산할 수 없습니다. 하나의 블록으로 결합할 수도 있으므로 반올림할 필요가 없습니다.파일 크기는 블록 크기의 다음 배수입니다(예: 4kB).

그래서 질문이 좀 애매하네요. 16GB의 저장 공간을 원하는 경우(무엇이 필요합니까?)정확히16GB 파일 저장 공간? 16GB 이미지를 사용하는 것이 더 현실적이지 않을까요? ), "약간" 과잉 프로비저닝이 필요합니다. 이는 향후 파일 시스템 내용을 알지 못한 채 최대한 정확하게 수행하는 것입니다.바이트 단위로 정확함. 그럼 17GB 맞죠?

관련 정보