O(1)의 파일 중간에 일부 블록을 삽입할 수 있는 파일 시스템이 있습니까?

O(1)의 파일 중간에 일부 블록을 삽입할 수 있는 파일 시스템이 있습니까?

가설

  • 우리는 거대한 파일을 가지고 있습니다에프.
  • 우리는 "주위"를 보는 것을 좋아합니다에스O(1) 시간 내에 새로운 빈(0으로 채워진) 블록을 생성합니다(즉, 모든 리마인드 부분을 다시 작성하지 않음).
  • "around"는 우리가 둘러쌀 수 있다는 뜻이에요에스가장 가까운 파일 시스템 블록 크기로 변환하고 삽입할 블록도 파일 시스템 블록 크기일 수 있습니다.

이를 허용하는 시스템 호출/파일 시스템이 있습니까?

btrfs_clone그렇지 않다면 이 동작을 모방하기 위해 (mentied)를 사용하는 것이 좋은 생각입니까?여기) 어떻게?

답변1

에서 인용이 답변:

리눅스 4.1부터,오류 위치(2)FALLOC_FL_INSERT_RANGE후속 데이터를 다시 쓰지 않고도 파일 중간에 지정된 길이의 구멍을 삽입할 수 있는 이 플래그를 지원합니다 . 그러나 이는 매우 제한적입니다. 구멍은 파일 시스템 블록 경계에 삽입되어야 하며 삽입된 구멍의 크기는 파일 시스템 블록 크기의 배수여야 합니다. 또한 4.1에서는 이 기능이 XFS 파일 시스템에 대해서만 지원되었으며 4.2에는 Ext4 지원이 추가되었습니다.

~에서오류 위치(1):

fallocate -d [-o offset] [-l length] filename
(...)
       -d, --dig-holes
              Detect  and  dig  holes.   This  makes  the  file  sparse in-place, without using extra disk space.  The minimum size of the hole depends on
              filesystem I/O block size (usually 4096 bytes).  Also, when using this option, --keep-size is implied.  If no range is specified by --offset
              and --length, then the entire file is analyzed for holes.

              You  can  think  of  this option as doing a "cp --sparse" and then renaming the destination file to the original, without the need for extra
              disk space.

              See --punch-hole for a list of supported filesystems.
(...)
       -p, --punch-hole
(...)
              Supported for XFS (since Linux 2.6.38), ext4 (since Linux 3.0), Btrfs (since Linux 3.7) and tmpfs (since Linux 3.5).

관련 정보