2011-05-13 3 views
8

많은 0이 포함 된 큰 파일이 있으면 어떻게 효율적으로 스파 스 파일로 만들 수 있습니까?파일 스파 스 만드는 법?

제로 영역을 건너 뛸 수있는 검색 기능을 사용하여 전체 파일 (모든 0을 포함하여 스파 스로 저장 될 수 있음)을 읽고 새 파일로 다시 쓸 수있는 유일한 방법입니까?

기존 파일 (예 : File.setSparse (long start, long end))에이를 만들 가능성이 있습니까?

Java 또는 일부 Linux 명령에서 해결책을 찾고 있는데, 파일 시스템은 ext3 또는 유사합니다.

+3

첫 번째 해결 방법은 'cp --sparse = always'로 구현되지만 효율적이지 않으며 파일 복사 및 이후 이동이 필요합니다. – rurouni

+1

http://stackoverflow.com/questions/245251/create-file-with-given-size-in-java – joe776

+0

@joe : 처음부터 희소 한 파일을 만드는 것이지만 기존 파일을 희소하게 만들고 싶습니다. – rurouni

답변

3

Linux/UNIX의 일부 파일 시스템에는 기존 파일에 "구멍을 뚫을"수있는 기능이 있습니다. 참조 :

  • LKML posting about the feature
  • UNIX file trunctation FAQ

    그것은 매우 휴대용 아니에요과 전반적으로 동일한 방식으로하지 (F_FREESP 검색); 지금 당장은 Java의 IO 라이브러리가이 인터페이스를 제공하지 않는다고 생각합니다.

    홀 펀치가 fcntl(F_FREESP)을 통해 또는 다른 메커니즘을 통해 사용 가능한 경우 복사/찾기 루프보다 훨씬 빠릅니다.

  • +0

    경험이 많은 C 해커가 아니기 때문에 이것을 파일에 적용하는 도구가 있는지 알고 계십니까? – rurouni

    +0

    최고 품질의 답변. 감사 – sehe

    0

    article에 따르면 현재 FIEMAP ioctl을 사용하는 경우를 제외하고는 쉬운 해결책이없는 것으로 보입니다. 그러나 "희소가 아닌"제로 블록을 "희소 한"블록으로 만들 수있는 방법을 모르겠습니다.

    2

    전체 파일을 미리 할당하고 점유 된 페이지/비트 세트의 테이블/비트 세트를 유지하는 것이 좋습니다.

    파일을 희박하게 만들면 이러한 섹션이 재사용 될 경우 조각화되는 결과를 초래할 수 있습니다. 아마도 몇 TB의 디스크 공간을 절약하는 것은 조각난 파일의 성능에 영향을주지 않을 것입니다.

    0

    당신은

    메타 데이터 만 가지고 스파 스 파일을 작성하는 리눅스 teminal에 $ truncate -s filename filesize를 사용할 수 있습니다.

    주 - 파일 크기는 바이트 단위입니다.