스파 스 파일을 이해하는 유틸리티를 사용하지 않고 원래 스파 스 파일을 복사하거나 전송하면 ‘구멍’이 채워질 것입니다. 한때 희소 파일을 희소로 되 돌리는 방법이나 유틸리티가 있습니까?
예를 들어 :
희소 파일 작성 :
% dd if=/dev/zero of=TEST bs=1 count=0 seek=1G
# do some op that pads out the holes
% scp TEST localhost:~/TEST2
% ls -lhs TEST*
0 -rw-rw-r--. 1 tony tony 1.0G Oct 16 13:35 TEST
1.1G -rw-rw-r--. 1 tony tony 1.0G Oct 16 13:37 TEST2
방법이 있습니까?
% resparse TEST2
to get:
0 -rw-rw-r--. 1 tony tony 1.0G Oct 16 13:35 TEST
0G -rw-rw-r--. 1 tony tony 1.0G Oct 16 13:37 TEST2
답변
2015 년 편집
util-linux 2.25부터 fallocate
Linux 의 유틸리티에는 -d
/ --dig-hole
옵션이 있습니다.
fallocate -d the-file
파일에서 0 으로 가득 찬 모든 블록에 구멍을 파십시오.
구형 시스템에서는 직접 수행 할 수 있습니다.
리눅스는 이것을 할 수 있는 FALLOC_FL_PUNCH_HOLE
옵션 fallocate
이 있습니다. 예를 들어 github에서 스크립트를 찾았습니다.
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 바이트의 블록을 발견은, 펀치 아웃합니다. 물론 더 똑똑해질 수 있습니다. 또한 가벼운 테스트 만 수행 하므로 신뢰하기 전에 주의해서 백업 하십시오!
답변
파일을 스파 스로 만들고 싶다면 다음을 사용하여 직접 할 수 있습니다. dd
.
dd if=./zeropadded.iso of=./isnowsparse.iso conv=sparse
로부터 dd(1)
수동 :
sparse If one or more output blocks would consist solely of
NUL bytes, try to seek the output file by the required
space instead of filling them with NULs, resulting in a
sparse file.
따라서 전체 블록이 비어있는 경우에만 계속 탐색합니다. 최대한의 비장을 위해 사용하십시오 bs=1
.
답변
짧은 tar
와 그것을 -ing -S
플래그 (GNU 타르 가정),과를 다시 실행 scp
아니 …. 내가 아는 어떤 유틸리티도 “구멍”이 어디에 있는지 알 수있는 방법이 없습니다.
답변
나는 이것으로 행운을 빕니다.
cd whatever
rsync -avxWSHAXI . .
-I
힘에 관계없이 그들이 변경 여부를 한 생각 여부에 모든 파일을 업데이트 rsync는; 는 -S
새로운 파일이 sparsified되도록합니다.-a
한 번의 명령으로 전체 디렉토리 트리를 희소화할 수 있습니다.
구멍을 찾아서 제거하는 맞춤형 도구만큼 좋지는 FALLOC_FL_PUNCH_HOLE
않지만 전체 디렉토리 트리를 복제하는 것보다 낫습니다.