df 명령은 파일을 삭제한 후에도 동일한 사용량(100%)을 표시합니다.

df 명령은 파일을 삭제한 후에도 동일한 사용량(100%)을 표시합니다.

df 명령을 사용하면 Nand 플래시 스토리지 파티션이 100% 가득 찬 것으로 나타납니다. 사용량을 수동으로 계산하면 약 7~80%(최대)입니다. 여러 파일(약 50~60MB)을 삭제한 후에도 df 명령 출력은 여전히 ​​변경되지 않았습니다. 새 파일을 만들 수 없습니다. 오류: "저장 장치에 남은 공간이 없습니다." sync명령을 시도했지만 차이가 없습니다.

Filesystem           1K-blocks      Used Available Use% Mounted on
tmpfs                   262144     20780    241364   8% /tmp
tmpfs                      512         0       512   0% /dev
/dev/ubi0_0            1275540   1275540         0  100% /storage

실제 저장 공간이 가득 차지 않았는데(수동 계산 기준) doe df 명령이 100% 가득 찼다고 표시하는 이유는 무엇입니까?

답변1

다시 시작하고 다시 설치하면 문제가 해결될 것이라고 믿습니다.

이유:그 이유는 다음 df과 같습니다.통계 파일 시스템(2)파일 시스템 통계를 얻기 위한 시스템 호출입니다. 이는 열린 커널 파일 설명자를 확인하여 이름에 대한 여유 공간을 계산한다는 의미입니다(df = 디스크 여유 공간). 를 사용하면 다른 결과를 얻을 수 있습니다 du. df삭제된 파일이 아직 커널 파일 설명자에서 해제되지 않았기 때문에 사용량이 100%로 표시됩니다.

아마도 다음 시나리오가 이해하는 데 도움이 될 것입니다.

  1. 명명된 실행 프로세스는 xyz.service파티션에 있는 명명된 파일을 사용하고 있습니다.something.dump/storage

  2. 에 나열되어 있습니다 file discriptor.something.dumpprocess file descriptor tablexyz.service

  3. 그런 다음 삭제했지만 something.dump여전히 xyz.service실행 중입니다.

  4. xyz.service파일의 업데이트 상태를 알 수 없습니다 something.dump. 따라서 파일 설명자는 something.dump여전히 존재합니다.

  5. 그런 다음 명령을 실행하면 df커널이 모든 프로세스 테이블을 검사하여 여유 공간을 계산하는 데 사용되는 파일 설명자를 확인합니다.

  6. 커널은 파일이 여전히 프로세스의 파일 설명자 테이블에 나열되어 있음을 inodes발견 something.dump합니다 xyz.service. 따라서 something.dump여전히 파일 시스템에 있으므로 some.dump의 inode가 비어 있다고 생각하지 않습니다. 그렇기 때문에 더 많은 사용법을 볼 수 있습니다.

  7. 따라서 이러한 inode를 해제하면 SIGKILL xyz.service여유 공간을 볼 수 있습니다.

  8. 시스템을 다시 시작하면 7단계와 동일한 작업이 수행됩니다.

답변2

btrfs다른 이유: 이와 같은 파일 시스템을 사용하고 스냅샷을 사용하는 경우 스냅샷에 해당 파일의 복사본이 있습니다.

관련 정보