ext4에서 스파스 파일 지원 비활성화

ext4에서 스파스 파일 지원 비활성화

ext4 파일 시스템에서 스파스 파일 지원을 완전히 비활성화할 수 있습니까?

목적은 디스크 조각화를 방지하는 것입니다.

솔루션이 파일 시스템에서 파일을 0(또는 기타)으로 채우지 않고 빠르게 할당할 수 있도록 허용하는 경우 "점수 없음"을 부여합니다.

내가 원하는 것은 애플리케이션이 다음과 같은 파일을 생성하도록 지시할 수 있는 것입니다. 나는 X 바이트의 "겉보기 크기"를 사용하지 않으며 이러한 응용 프로그램의 소스 코드를 제어할 수 없습니다.

시간을 절약하기 위해 희소 파일과 빠른 할당에 대해 언급할 때마다 항상 나타나는 몇 가지 의견에 대해 이미 언급하겠습니다.

  • 파일 시스템 할당 경험적 방법이 얼마나 좋아야 하는지는 관심이 없습니다.
  • 새로 할당된 블록을 0으로 설정하지 않을 경우 보안에 미치는 영향을 알고 있습니다.

답변1

ext4에는 스파스 파일 지원을 비활성화하는 옵션이 없지만 ext4(및 일반적으로 Linux 커널)에서 지원되는 기능을 사용하면 새 파일 시스템 드라이버를 작성하거나 ext4 드라이버를 조정하지 않고도 해결 방법을 구현할 수 있습니다.

제가 생각하기에 효과가 있을 것이라고 생각하는 것은 로드할 수 있는 공유 라이브러리 심을 구현하는 것입니다. LD_PRELOAD그러면 스파스 파일이 생성될 수 있는 모든 호출을 재정의하여 생성되지 않는 방식으로 처리하게 됩니다. 파일에 블록을 할당하는 빠른 방법은 다음을 사용하는 것입니다.posix_fallocate, 디스크 공간을 보장합니다.반환 시 할당되므로 블록에 모두 0을 쓸 필요는 없습니다(그러나 파일 시스템은읽다할당된 블록에서 0이 반환됩니다. shim은 posix_fallocate희소 파일을 생성하는 데에도 사용될 수 있으므로 가로채기도 해야 합니다.

shim(특히 setuid 바이너리)에는 몇 가지 제한 사항이 있지만 LD_PRELOAD귀하의 경우에는 적용되지 않을 수도 있습니다.

관련 정보