50기가 이상 사용되는 빈 xfs 드라이브

50기가 이상 사용되는 빈 xfs 드라이브

운영체제는 데비안입니다. 새로운 8TB 디스크가 있습니다. 포맷 후 용량은 7.3TB입니다. 파일 시스템은 XFS입니다. 블록 크기는 4096입니다.

한 번 사용하고 최근에 그 안에 있는 파일을 모두 삭제했는데 df에는 여전히 52GB가 사용된 것으로 표시됩니다.

find . | wc -l
0

원인은 무엇입니까? AFAIK XFS는 ext처럼 루트에 대한 백분율을 예약하지 않으며, 이는 비OS 데이터 스토리지 드라이브이기 때문에 어쨌든 루트에 예약된 백분율을 원하지 않습니다.

이 추가 공간을 차지하는 것은 무엇입니까? 드라이브를 다시 포맷하지 않고 어떻게 공간을 확보할 수 있나요?

답변1

참고: 기본 설정을 사용하여 깨끗한 73TB XFS 파일 시스템을 생성하면 약 4.1MB의 파일 시스템이 생성됩니다.

img=largesparse.img
dd if=/dev/null "of=${img}" obs=1024 seek=$((73*2**30))
mkfs.xfs "${img}"
loopdev="$(udisksctl loop-setup -r -f "${img}" | sed 's/.* \([^ ]*\)\.$/\1/')"
udisksctl mount -b "${loopdev}"
df "${loopdev}"

생산하다

Filesystem       1K-blocks  Used   Available Use% Mounted on
/dev/loop0     78381065948  4120 78381061828   1% /run/media/…

따라서 수행 중인 작업은 파일을 생성한 다음 삭제하는 것입니다. 이는 inode가 73개 할당 그룹 모두에 할당되고 inode B+ 트리가 해당 inode가 사용하는 범위를 가리킨다는 의미일 가능성이 높습니다.

조금 의외일 수도 있지만 제거해도 완전히 제거되지는 않습니다.모두문서화에는 합당한 이유가 있을 수 있습니다.필요이제 이렇게 하면 새 파일을 생성하기 때문입니다. 그런 다음 이미 할당된 트리 구조에 직접 맞습니다. 지금 할당을 해제하는 데는 비용이 들고, 그렇게 하면 완전히 동일한 구조를 다시 할당할 가능성이 높습니다. 어쨌든 이 공간을 활용해야 해요.

또 다른 문제는 삭제 순서가 조각화된 사용 가능 목록을 의미한다는 점입니다. 기본적으로 모든 할당 그룹(위에서 언급한 inode b 트리 제외)은 연속된 사용 가능한 블록을 제어하지만 현재 사용 가능한 블록을 저장하는 구조는 연속적이지 않을 수 있습니다. . 다음을 사용하여 여유 공간 트리의 항목을 확인할 수 있습니다.

xfs_db -r -c "freesp -d" /dev/{your 73 TB block device}
#       ^  ^-----------^
#       |        |
#  readonly      |
#                |
#  command "freesp"ace with the "dump each free block" option

(여유 공간이 연속적인 경우 73개 할당 그룹 각각에 대해 1~5개의 행만 표시될 수 있습니다.)

이 시점에서 파일 시스템은 여유 공간 트리 구조와 블록 장치에 보관된 위치를 조각 모음할 동기가 거의 없습니다.충분한연속된 영역이 크기 때문에 파일 공간을 할당하는 것이 쉽지 않습니다.

관련 정보