![Torrent/Gnutella 파일 조각화를 줄이기 위해 전체 파일 사전 할당을 지원하는 Linux 파일 시스템은 무엇입니까?](https://rvso.com/image/231082/Torrent%2FGnutella%20%ED%8C%8C%EC%9D%BC%20%EC%A1%B0%EA%B0%81%ED%99%94%EB%A5%BC%20%EC%A4%84%EC%9D%B4%EA%B8%B0%20%EC%9C%84%ED%95%B4%20%EC%A0%84%EC%B2%B4%20%ED%8C%8C%EC%9D%BC%20%EC%82%AC%EC%A0%84%20%ED%95%A0%EB%8B%B9%EC%9D%84%20%EC%A7%80%EC%9B%90%ED%95%98%EB%8A%94%20Linux%20%ED%8C%8C%EC%9D%BC%20%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
내가 이해하는 방식에 따르면, 적어도 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(현재 매우 실험적이므로 일반 사용에는 권장되지 않음)
- btrfs
- ext4/ext3
- F2FS
- NTFS3(
prealloc
기능을 활성화하려면 마운트 옵션을 지정해야 함) - VFAT/FAT32
- XFS
네트워크 파일 시스템:
- GFS2
- NFS
- OCFS2
- CIFS/삼바
중요한 고려사항:
- 애플리케이션은 이 기능을 활용해야 합니다.
- 파일 시스템이 이미 [매우] 조각화되어 있고 충분한 크기의 구멍이 없는 경우 사전 할당으로 최적의 결과가 나오지 않을 수 있습니다.
- 파일을 적절하게 정렬할 수 있는 충분한 여유 공간이 있는 경우:
- Linux에서는 XFS만 완전히 조각 모음할 수 있습니다(즉, 여유 공간도 조각 모음할 수 있음).
- Windows에서는 NTFS/VFAT 조각 모음을 완전히 수행할 수 있습니다.