내 ext4
(자기) 하드 드라이브에는 결함이나 불량 섹터가 없는 900GB 파티션이 있습니다. lost+found
파티션은 빈 디렉터리를 제외하고는 완전히 비어 있습니다. 보존된 파일 시스템 블록 수를 1%로 설정한 것을 제외하고 파티션은 기본 매개변수를 사용하여 포맷되었습니다.
.zip 파일을 사용하여 ~900MB 파일을 xubuntu-15.04-desktop-amd64.iso
파티션의 마운트 지점 디렉토리에 다운로드했습니다 wget
. 다운로드가 완료된 후 파일이 네 개의 조각으로 나누어져 있는 것을 발견했습니다.
filefrag -v /media/emma/red/xubuntu-15.04-desktop-amd64.iso
Filesystem type is: ef53
File size of /media/emma/red/xubuntu-15.04-desktop-amd64.iso is 1009778688 (246528 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 32767: 34816.. 67583: 32768:
1: 32768.. 63487: 67584.. 98303: 30720:
2: 63488.. 96255: 100352.. 133119: 32768: 98304:
3: 96256.. 126975: 133120.. 163839: 30720:
4: 126976.. 159743: 165888.. 198655: 32768: 163840:
5: 159744.. 190463: 198656.. 229375: 30720:
6: 190464.. 223231: 231424.. 264191: 32768: 229376:
7: 223232.. 246527: 264192.. 287487: 23296: eof
/media/emma/red/xubuntu-15.04-desktop-amd64.iso: 4 extents found
뭔가 관련이 있을 것 같아서 wget
파티션에서 ISO 파일을 삭제하고 다시 비운 다음 v1.mp4
.txt 파일을 사용하여 ~700MB 파일을 파티션에 복사했습니다 cp
. 문서도 조각화되어 있습니다. 이는 세 부분으로 나뉩니다:
filefrag -v /media/emma/red/v1.mp4
Filesystem type is: ef53
File size of /media/emma/red/v1.mp4 is 737904458 (180153 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 32767: 34816.. 67583: 32768:
1: 32768.. 63487: 67584.. 98303: 30720:
2: 63488.. 96255: 100352.. 133119: 32768: 98304:
3: 96256.. 126975: 133120.. 163839: 30720:
4: 126976.. 159743: 165888.. 198655: 32768: 163840:
5: 159744.. 180152: 198656.. 219064: 20409: eof
/media/emma/red/v1.mp4: 3 extents found
왜 이런 일이 발생합니까? 이런 일이 발생하지 않도록 하는 방법이 있나요? 나는 이것이 분열에 저항하기 위한 것이라고 생각한다 ext4
. 대신 볼륨의 나머지 부분을 모두 사용하지 않으면 단일 파일이 즉시 조각화되는 것을 발견했습니다. 이것은 FAT32
및 보다 더 나쁜 것 같습니다 NTFS
.
답변1
3개 또는 4개의 조각이 포함된 900mb 파일예매우 좋은. 이 크기의 파일에 100개 이상의 조각이 있으면 조각화가 문제가 됩니다. FAT 또는 NTFS를 사용하면 이러한 파일이 수백 개의 조각으로 분할되는 것이 일반적입니다.
적어도 이전 ext4 파일 시스템에서는 블록 그룹의 최대 크기가 128MB이므로 일반적으로 이보다 더 나은 결과를 볼 수 없습니다. 따라서 128MB마다 연속 공간이 비트맵 및 inode 테이블 할당을 위해 여러 블록으로 분할됩니다. . 다음 블록 그룹. 새로운 ext4 기능이 호출됩니다.탄력있는 배경이러한 테이블의 여러(보통 16개) 블록 그룹을 함께 압축하여 더 긴 할당 가능한 블록을 실행하도록 허용하지만 배포판과 형식을 지정하는 데 사용된 e2fsprogs 버전에 따라 이 옵션이 아직 사용되지 않을 수 있습니다.
이를 사용하여 tune2fs -l
파일 시스템을 포맷할 때 어떤 기능이 활성화되어 있는지 확인할 수 있습니다.
답변2
답변할 수는 없지만 이것이 도움이 될 것이라고 생각했습니다.
각 조각의 크기는 최대 32768 블록입니다(무엇이 진행되고 있는지에 대한 플래그를 표시하고 무엇을 찾아야 하는지에 대한 힌트도 제공해야 하는 2의 거듭제곱).
또한 주목할 만한 점은 범위 간의 물리적 오프셋이 서로 매우 가깝다는 것입니다.
ext4 파일 시스템은 일련의 블록 그룹으로 나뉩니다. 조각화로 인한 성능 문제를 줄이기 위해 블록 할당자는 각 파일의 블록을 동일한 그룹에 유지하려고 노력하므로 탐색 시간이 줄어듭니다. 블록 그룹의 크기는 에 지정되어 있지만
sb.s_blocks_per_group blocks
8 * 로 계산할 수도 있습니다block_size_in_bytes
. 기본 블록 크기는 4KiB이며, 각 그룹은 32,768개의 블록을 포함하고 길이는 128MiB입니다.
더 아래로:
조각화를 방지하기 위해 ext4가 사용하는 첫 번째 도구는 다중 블록 할당자입니다. 파일이 처음 생성되면 블록 할당자는 추측에 따라 8KiB의 디스크 공간을 파일에 할당합니다. [...] ext4에서 사용하는 두 번째 관련 트릭은 지연 할당입니다. 이 체계에서는 파일에 파일 쓰기를 흡수하기 위해 더 많은 블록이 필요한 경우 파일 시스템은 모든 더티 버퍼가 디스크에 기록될 때까지 디스크의 정확한 위치 결정을 지연합니다. 꼭 필요할 때까지(커밋 시간 초과에 도달하거나, sync()가 호출되거나, 커널에 메모리가 부족할 때) 특정 위치를 커밋하지 않음으로써 파일 시스템이 더 나은 위치 결정을 내릴 수 있기를 바랍니다.
그래서 저는 할당자라고 말하겠습니다.케어이는 블록 그룹이 서로 연속되어 있는 것이 아니라 블록 그룹(32K 블록) 내의 데이터 지역성에 관한 것입니다.