루트 공간을 예약하지 않고 희소한 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 맞죠?