Linux에서 스파스 파일을 작동하는 기능은 무엇입니까?

Linux에서 스파스 파일을 작동하는 기능은 무엇입니까?

Linux에서 스파스 파일을 작동하는 기능은 무엇입니까? (C를 가정하면 다른 시스템에 대한 의견은 매우 환영합니다) 예를 들면 다음과 같습니다.

  • 파일 내부의 일부를 삭제하여 파일 내부에 구멍을 뚫습니다.
  • 별도의 연속된 데이터 청크의 시작과 끝을 나타내는 쌍 시퀀스 생성과 같은 구조 연구
  • 특정 시점에서 블록 범위를 재할당하여(즉, 실제 데이터를 이동하지 않고) 파일을 두 부분으로 분할합니다.
  • inode 및 기타 관련 측면을 조사하시겠습니까? (기록 중 복사 방식으로 일부 블록을 여러 파일에 할당할 수 있을까요?)

문맥:

내 마음에 떠오르는 초기 질문은 man rsync옵션 뒤에 있습니다 --sparse.

rsync옵션이 --sparse충돌 하는 이유는 무엇입니까 --inplace?

API를 호출하는 파일 시스템의 제한 사항인가요?

데이터 구조 관점에서 소스 스파스 파일이 연속되지 않은 데이터 블록의 시퀀스로 처리되는 경우 "r" 동기화가 소스에 존재하지 않는 범위를 대상에서 할당 해제하고 누락된 범위를 할당할 것으로 예상됩니다. , 나머지는 그에 따라 업데이트됩니다(표준 rsync 롤링 해시 알고리즘을 사용하더라도 나머지 모든 시퀀스를 하나의 시퀀스로 처리하거나 각 시퀀스에서 개별적으로 실행).

인용하다:

man rsync
   -S, --sparse
          Try to handle sparse files efficiently so they take up less space on the destination.  Conflicts with --inplace because it's

희박한 방식으로 데이터를 다루는 것은 불가능합니다.

답변1

스파스 파일은 사용자 공간에 투명하게 설계되었습니다. 과거에 사용되지 않은 영역을 찾아서 구멍이 생성되고 제로 블록으로 읽혀집니다. 적어도 아직까지는 표준 사용자 공간 API를 사용하여 감지할 수 없습니다.지적통과스티븐 차제라스, 최소한 Solaris 및 Linux 지원 SEEK_DATASEEK_HOLE lseek(2)사용자 공간 프로그램이 취약점을 찾을 수 있도록 허용하는 플래그입니다.POSIX에 추가됨어느 시점에서.

rsync이는 ' --sparse및 옵션을 사용하여 --inplace기존 파일에 쓸 때의 비호환성을 설명합니다.가지고 다닐 수 있는, 기존 데이터에 취약점을 생성할 수 없습니다. --sparse전체 파일을 다시 작성하고 0의 시퀀스를 (긴) 건너뛰는 방식으로 작동합니다. 이로 인해 운영 체제와 이를 지원하는 파일 시스템에서 희소 파일이 발생할 수 있습니다.

Linux에서는 다음 명령을 사용하여 파일 희소성에 대한 세부 정보를 검색할 수 있습니다.fiemapI/W 제어, 그리고 e2fsprogs'filefrag(8);바라보다Linux의 자세한 스파스 파일 정보. 글쓰기 측면에서는 다음을 사용할 수 있습니다.fallocate(2)(편리하기도 하고fallocate(1)유틸리티)는 기존 파일에 구멍을 뚫어 구멍이 블록 전체를 덮는 경우 드물게 만듭니다. 지원은 파일 시스템에 따라 다릅니다. 현재 XFS, btrfs, ext4 및 tmpfs만 이러한 작업을 지원합니다. 최신 커널(4.1 이후) 및매우최신 버전은 util-linux취약점을 파일에 삽입하고 취약점 뒤로 콘텐츠를 이동하는 기능을 지원합니다( fallocate -i2.30에 도입되었으며 util-linux곧 출시될 예정임).

마지막 두 가지 질문은 파일 시스템 수술에 관한 것인데, 그러한 작업을 수행하는 데 사용할 수 있는 일반 시스템 호출이나 ioctl이 있는지 잘 모르겠습니다. reflink- 호환 가능한 파일 시스템을 사용하면 파일이 내용을 공유할 수 있습니다.그리고 FICLONEioctlFICLONERANGE.

관련 정보