내가 이해한 바로는 적어도 Linux ext3 파일 시스템에서는 대용량 파일이 생성될 때 데이터가 실제로 파일의 해당 부분에 기록될 때까지 블록이 디스크에 실제로 할당되지 않습니다. Linux는 프로그램이 메모리를 할당할 때 비슷한 작업을 수행합니다. 할당이 지연되고 데이터가 기록될 때까지 페이지가 실제로 할당되지 않지만 이는 또 다른 주제입니다.
Bittorrent 및 Gnutella와 같은 파일 공유 프로그램은 파일에 쓸 때 파일의 임의 영역에 작은 덩어리를 씁니다. Linux 파일 시스템은 파일의 이러한 부분을 디스크에 배치하여 많은 조각화를 생성합니다. 이와 같이 여러 파일에 동시에 쓸 때 문제는 특히 심각합니다. 파일 공유 프로그램에서 미리 할당된 파일을 선택해도 도움이 되지 않는 것 같습니다. 이러한 파일은 일반적으로 10MB/초의 속도로만 읽을 수 있으며 많은 조각화를 생성합니다. filefrag 유틸리티를 사용하여 파일에 있는 조각 수를 확인할 수 있습니다. /var/log/messsages와 같은 파일은 테스트하기에 좋은 장소입니다.
ext3을 사용하면 대부분의 다른 Linux 파일 시스템에서도 이것이 사실이라고 가정합니다. 조각화를 최소화하면서 처음부터 끝까지 완전히 할당된 파일을 가지려면 실제로 일부 데이터를 전체 파일에 기록해야 합니다.
Linux에서 NTFS 볼륨을 마운트해 볼 수도 있지만 더 좋은 방법이 있어야 합니다! 고려해야 할 ext4, btrfs, xfs, jfs, ReiserFS, ExFAT 및 FAT32도 있습니다! 미리 할당된 파일이 있습니까? 아니면 먼저 전체 파일에 데이터를 쓰지 않고도 이 작업을 수행할 수 있는 API가 있습니까?
답변1
2024년까지 다음 Linux 파일 시스템이 파일 사전 할당을 지원합니다 posix_fallocate()
.
로컬 파일 시스템:
- bcachefs(현재 고도로 실험적인 단계에 있으며 일반적인 사용에는 권장되지 않음)
- BTFS
- 외부 4/외부 3
- F2FS
- NTFS3(
prealloc
이 기능을 활성화하려면 설치 옵션을 지정해야 함) - FAT/FAT32
- XFS
네트워크 파일 시스템:
- GFS2
- 네트워크 파일 시스템
- OCFS2
- CIFS/삼바
중요한 고려사항:
- 애플리케이션은 이 기능을 사용해야 합니다.
- 파일 시스템이 이미 [매우] 조각화되어 있고 충분한 크기의 구멍이 없는 경우 사전 할당으로 최적의 결과가 나오지 않을 수 있습니다.
- 파일을 적절하게 정렬하기에 충분한 여유 공간이 있다고 가정합니다.
- Linux에서는 XFS만 완전히 조각 모음할 수 있습니다. 즉, 여유 공간도 조각 모음할 수 있습니다.
- Windows에서는 NTFS/VFAT 조각 모음을 완전히 수행할 수 있습니다.