가설
- 우리는 거대한 파일을 가지고 있습니다에프.
- 우리는 "주위"를 보는 것을 좋아합니다에스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).