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%로 표시됩니다.
아마도 다음 시나리오가 이해하는 데 도움이 될 것입니다.
명명된 실행 프로세스는
xyz.service
파티션에 있는 명명된 파일을 사용하고 있습니다.something.dump
/storage
에 나열되어 있습니다
file discriptor
.something.dump
process file descriptor table
xyz.service
그런 다음 삭제했지만
something.dump
여전히xyz.service
실행 중입니다.xyz.service
파일의 업데이트 상태를 알 수 없습니다something.dump
. 따라서 파일 설명자는something.dump
여전히 존재합니다.그런 다음 명령을 실행하면
df
커널이 모든 프로세스 테이블을 검사하여 여유 공간을 계산하는 데 사용되는 파일 설명자를 확인합니다.커널은 파일이 여전히 프로세스의 파일 설명자 테이블에 나열되어 있음을
inodes
발견something.dump
합니다xyz.service
. 따라서something.dump
여전히 파일 시스템에 있으므로 some.dump의 inode가 비어 있다고 생각하지 않습니다. 그렇기 때문에 더 많은 사용법을 볼 수 있습니다.따라서 이러한 inode를 해제하면
SIGKILL
xyz.service
여유 공간을 볼 수 있습니다.시스템을 다시 시작하면 7단계와 동일한 작업이 수행됩니다.
답변2
btrfs
다른 이유: 이와 같은 파일 시스템을 사용하고 스냅샷을 사용하는 경우 스냅샷에 해당 파일의 복사본이 있습니다.