나는 --dig-holes
스파스 파일을 생성하는 것을 완전히 이해합니다. 즉, 파일에 취약점이 있는 경우 --dig-holes
옵션은 해당 취약점을 제거합니다.
non-sparse라는 큰 파일이 있다고 가정하고 매우 간단한 방법으로 살펴보겠습니다.
드물지 않음:
aaaaaaaaaaaaaaaaaaaaaaaaaaaa
\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00
bbbbbbbbbbbbbbbbbbbbbbbbbbbb
\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00
cccccccccccccccccccccccccccc
희박하지 않은인터리브된 0이 기가바이트 단위라고 가정하면 거기에는 많은 0이 있습니다. fallocate --dig-holes
사용 가능한 공간을 0(비어 있음)으로 할당 취소합니다. 여기서 실제 파일 크기는 변경되지 않습니다(보존됨).
그렇다면 --punch-hole
정확히 무엇을 하는 걸까요? 매뉴얼 페이지를 읽었지만 여전히 이해가 되지 않습니다.
-p, --punch-hole
Deallocates space (i.e., creates a hole) in the byte range
starting at offset and continuing for length bytes. Within
the specified range, partial filesystem blocks are zeroed,
and whole filesystem blocks are removed from the file.
After a successful call, subsequent reads from this range
will return zeroes.
구멍 만들기, 이것은 옵션의 반대인 것 같습니다 --dig-hole
. 구멍을 파는 것과 구멍을 만드는 것이 왜 다른가요? ! 돕다! 논리학자가 필요합니다 :).
두 옵션의 이름은 언어적으로 동의어이므로 혼동을 일으킬 수 있습니다.
--dig-holes
운영상 차이점은 무엇입니까 --punch-holes
(논리적 또는 언어적 차이가 아님을 알려드립니다!)?
답변1
--dig-holes
파일을 읽을 때 결정된 대로 파일의 내용을 변경하지 않습니다. 단순히 구멍으로 대체될 수 있는 연속 0을 식별합니다.
--punch-hole
해당 오프셋에 파일이 무엇을 포함하고 있는지에 상관없이 파일에 구멍을 뚫으려면 --offset
및 인수를 사용하십시오 . 파일에 0이 아닌 값이 포함되어 있어도 작동하지만 파일의 내용은--length
변화그러므로. 예제 파일을 고려하면 실행 시 fallocate --punch-hole --offset 2 --length 10
두 번째 문자 이후부터 10자를 0으로 바꿉니다.a
답변2
간단히 말해서:
--dig-holes
내용을 수정하지 않고 파일을 희박하게 만듭니다(파일을 읽는 프로그램에서 볼 수 있음).--punch-hole
파일에 취약점을 생성하여 잠재적으로 기존 데이터를 수정할 수 있습니다.
차이점은 --dig-holes
희박할 수 있는 파일 영역을 분석하는 반면( 제공된 경우 --offset
및 사용 --length
은 분석할 파일의 범위를 나타냄) 실제로 및 를 --punch-holes
사용한다는 것입니다.--offset
--length
분명한구멍을 만드는 데 사용되는 파일의 일부입니다.
또한 복수형 "dig"와 단수형 "punch"를 주목하세요.
~에서수동, 에 대한 --dig-holes
:
이 옵션을 작업을 수행
cp --sparse
한 다음 추가 디스크 공간 없이 대상 파일의 이름을 원본 파일로 바꾸는 것으로 처리할 수 있습니다.