Linux에서 `fallocate --dig-holes`와 `fallocate --punch-hole`의 차이점은 무엇입니까?

Linux에서 `fallocate --dig-holes`와 `fallocate --punch-hole`의 차이점은 무엇입니까?

나는 --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한 다음 추가 디스크 공간 없이 대상 파일의 이름을 원본 파일로 바꾸는 것으로 처리할 수 있습니다.

관련 정보