2015 년 편집
util-linux 2.25부터 fallocate
Linux 의 유틸리티에는 -d
/ --dig-hole
옵션이 있습니다.
fallocate -d the-file
파일에서 0 으로 가득 찬 모든 블록에 구멍을 파십시오.
구형 시스템에서는 직접 수행 할 수 있습니다.
리눅스는 이것을 할 수 있는 FALLOC_FL_PUNCH_HOLE
옵션 fallocate
이 있습니다. 예를 들어 github에서 스크립트를 찾았습니다.
파이썬에서 FALLOC_FL_PUNCH_HOLE 사용
0으로 채워진 파일 영역에 구멍을 뚫어 요청 한대로 약간 수정했습니다. 여기있어:
파이썬에서 FALLOC_FL_PUNCH_HOLE을 사용하여 파일에 구멍을 뚫기
usage: punch.py [-h] [-v VERBOSE] FILE [FILE ...]
Punch out the empty areas in a file, making it sparse
positional arguments:
FILE file(s) to modify in-place
optional arguments:
-h, --help show this help message and exit
-v VERBOSE, --verbose VERBOSE
be verbose
예:
# create a file with some data, a hole, and some more data
$ dd if=/dev/urandom of=test1 bs=4096 count=1 seek=0
$ dd if=/dev/urandom of=test1 bs=4096 count=1 seek=2
# see that it has holes
$ du --block-size=1 --apparent-size test1
12288 test1
$ du --block-size=1 test1
8192 test1
# copy it, ignoring the hole
$ cat test1 > test2
$ du --block-size=1 --apparent-size test2
12288 test2
$ du --block-size=1 test2
12288 test2
# punch holes again
$ ./punch.py test2
$ du --block-size=1 --apparent-size test2
12288 test2
$ du --block-size=1 test2
8192 test2
# verify
$ cmp test1 test2 && echo "files are the same"
files are the same
주 punch.py
당신이 시작했을 때 그것이로 정확하게 스파 스 같은 파일을되지 않을 수도 있습니다 만 4096 바이트의 블록을 발견은, 펀치 아웃합니다. 물론 더 똑똑해질 수 있습니다. 또한 가벼운 테스트 만 수행 하므로 신뢰하기 전에 주의해서 백업 하십시오!