크기가 약 200GB 인 XFS 파일 시스템에 파일이 있습니다. KVM 기반 가상 머신의 가상 디스크를 포함하는 QCOW2 이미지입니다. 무언가 잘못되었습니다 (아마도 qemu-kvm의 결함 일지 모르겠지만 확실하지 않습니다). 가상 컴퓨터가 추락하여 이제 다음과 같은 파일이 생겼습니다.
191090708 -rwxr--r--. 1 root root 737571587400425984 Oct 10 10:03 973d10e0-a5e3-4a59-9f98-4b9b9f072ade
따라서 여전히 191090708 블록을 차지하지만 ls
656 페타 바이트로 표시합니다.
또한, 나는 이전의 역사가 같지만 다른 파일 시스템 (XFS가 아니라 GFS2)에 다른 파일이 있습니다.
410855320 -rwxr--r--. 1 root root 7493992262336241664 Dec 13 2014 ac2cb28f-09ac-4ca0-bde1-471e0c7276a0
410855320 블록을 차지하지만 ls
~ 6.6 엑사 바이트로 표시됩니다.
이 파일들을 안전하게 제거 할 수 있다고 생각하십니까? 고맙습니다!
PS 정기적으로 스냅 샷을 찍는 것이 좋습니다! 🙂 나는 그들없이 내가 무엇을할지 모르겠다.
답변
파일 크기를 확인해야하는 두 가지 이유가 있습니다.
- 스파 스 파일
- 파일 시스템 손상
스파 스 파일은 일부 파일 시스템의 기능으로 구멍이있는 파일을 만들 수 있습니다. 구멍에 물리적 공간이 할당되지 않았습니다. 구멍을 가로 질러 읽으면 NUL 바이트가 반환됩니다.
보고있는 이유가 스파 스 파일 인 경우 스파 스가 아닌 파일 에서처럼 삭제하는 것이 안전합니다.
보고있는 이유가 파일 시스템 손상 인 경우 파일 시스템 검사없이 파일을 삭제하는 것이 안전하지 않습니다. 여러 파일이 동일한 공간을 차지한다고 주장하는 방식으로 파일 시스템이 손상된 경우 두 파일을 모두 삭제하면 해당 블록이 해제됩니다. 해제 된 블록을 재사용하면 손상이 악화됩니다.
파일 시스템이 손상되었다고 생각하는 다른 증상이 나타난 경우 파일을 삭제하기 전에 파일 시스템을 완전히 점검해야합니다.
파일 시스템이 손상되었다는 증거가없고 파일이 희박한 것으로 보이면 더 이상 필요하지 않은 파일 만 삭제하면됩니다.
답변
문제는 파일 크기를 계산하는 방식입니다.
한 가지 방법은 마지막 바이트의 오프셋을 보는 것입니다 (예 : ls). 다른 방법은 실제로 할당 된 블록을 합하는 것입니다 (예 : du).
데이터가 매우 큰 오프셋으로 작성된 파일 일 가능성이 높습니다. 파일 주소 공간의 주요 부분이 할당되지 않았 음을 의미합니다. 그러나 여전히 읽을 수 있습니다.