수정하는 동안 fallocate --dig-holes를 사용해도 안전합니까?

수정하는 동안 fallocate --dig-holes를 사용해도 안전합니까?

그렇습니까?안전한fallocate --dig-holes파일이 수정/기록되는 동안 파일에 사용하려면 ? 예를 들어 KVM 게스트가 연 QCOW2 이미지에서?

답변1

나는 일반적으로 아니오라고 대답합니다. 파일이 VM에 탑재된 이미지인 경우 대신 TRIM(예: fstrim -a)을 시도할 수 있습니다. 엄밀히 말하면 이는 동등하지 않지만(TRIM은 0이 아닌 일부 삭제된 파일의 공간을 확보할 수도 있음), 이것이 원하는 것일 수도 있습니다.

특정한 경우에는 안전할 수도 있지만 나는 그것에 의존하지 않을 것입니다. 예를 들어 일부 데이터가 순차적으로 파일로 스트리밍되는 경우사전 할당 없이, 잠재적으로 안전할 것 같습니다. 그러나 이는 문서에서 암시되지 않고 구현에만 의존하기 때문에 강력히 권장하지 않습니다.

무엇이 잘못될 수 있나요? 앱/VM이 0으로 지정된 일부 블록을 덮어쓰고 동시에 fallocate -d를 실행한다고 상상해 보세요. 경주는 다음과 같습니다.

  1. Fallocate는 0 블록을 보고 거기에 구멍을 파기로 결정합니다.
  2. 다른 애플리케이션/VM은 0으로 지정된 블록에 일부 데이터를 씁니다.
  3. Fallocate는 블록에 구멍을 파냅니다.

1과 3 사이에 작은 시간 간격이 있는 것처럼 들릴 수도 있습니다. 어쩌면 사실일 수도 있지만 fallocate는 여러 후속 블록을 한 번에 해제하려고 할 수도 있습니다. (확실하지는 않지만 구현을 확인하지는 않았지만 그 반대가 사실이라고 해도 앞으로는 신뢰할 수 없습니다.) 이로 인해 1과 3 사이의 지연이 증가하여 경쟁 조건이 훨씬 더 가능성이 커질 수 있습니다.

관련 정보