inode가 무엇인지는 이해합니다. 그런데 고아 inode의 정확한 정의는 무엇입니까? 나는 이것이 무엇을 의미하는지 정말로 이해하지 못한다.
고쳐 쓰다
제가 관리하는 서버에 inode가 부족할 때가 있었는데, df -h를 실행해보니 서버가 공간의 60%만 사용하고 있는 것으로 나타났습니다. 나는 이것이 고아 inode 때문이라고 생각합니다. 모든 inode가 다 사용되었지만 서버에 여전히 "공간"이 남아 있는 것이 어떻게 가능합니까? 답변에서 이 문제를 해결할 수 있나요?
답변1
고아 inode는 파일 시스템의 디렉터리 항목에 연결되지 않은 inode입니다. 즉, 액세스할 수 없습니다.
고아 inode는 다양한 이유로 발생할 수 있습니다.
- 삭제되었지만 열려 있는 임시 파일(일반적인 방식)은 파일 시스템의 inode를 차지합니다. 시스템이 적절한 종료 없이 다시 시작되면 이러한 inode는 그대로 남아 고아가 됩니다.
- 파일 시스템 손상은 디렉토리를 손상시킬 수 있지만 포함된 파일의 inode에는 영향을 미치지 않습니다.
fsck
분리된 inode에 대한 새 디렉토리 항목을 만듭니다 lost+found
.
답변2
고아 inode는 "반 삭제된" 파일입니다. 더 이상 디렉토리 항목이 없지만 일부 프로세스에서는 여전히 열려 있으므로 데이터가 디스크에 계속 존재합니다. 파일을 연 마지막 프로세스가 파일을 닫으면 파일이 완전히 삭제되고 고아 inode가 사라집니다.
분리된 inode는 inode와 디스크 공간을 사용하여 파일을 저장하므로 둘 다 사용된 것으로 df
계산됩니다 df -i
. 따라서 디스크가 가득 찼다고 보고하지만 df
일부 공간이 남아 있는 것으로 표시되는 경우 이는 분리된 inode와는 아무 관련이 없습니다. 고아 inode는 보고된 파일 시스템 사용량 df
과 보고된 총 파일 크기가 다를 수 있는 이유 중 하나입니다 du
.디스크 사용량을 측정하는 방법이 왜 그렇게 다양합니까?이 주제에 대한 자세한 내용.
많은 파일 시스템은 파일 시스템이 생성될 때 고정된 수의 inode를 예약합니다. 이는 파일 시스템에 최대 그만큼의 파일이 있을 수 있음을 의미합니다. inode 수는 inode가 사용하는 공간과 여러 파일을 생성하는 기능 간의 절충안입니다. 파일 시스템에 더 이상 공간이 없으면 기존 파일을 늘리거나 새 파일을 만들 수 없습니다. 할당할 필요 없이 부분적으로 사용된 블록만 채우는 한 기존 디렉터리에 빈 파일을 만들 수도 있습니다. 새로운 블록). 사용 가능한 inode가 더 이상 없으면 기존 파일을 늘릴 수 있지만 새 파일을 만들 수는 없습니다.
데이터 공간 부족이나 inode 누락으로 인해 파일 시스템이 가득 차면 커널은 응용 프로그램에 동일한 오류를 보고합니다. 따라서 작업에 새 inode가 필요하고 inode 테이블이 가득 찬 경우 데이터 공간이 남아 있어도 "디스크 가득 참" 오류가 발생할 수 있습니다. 이를 실행하여 df -i
얼마나 많은 inode가 사용되었고 얼마나 남았는지 알아보세요.
답변3
고아 inode는 연결이 해제되었지만 다른 프로세스에서 아직 열려 있는 inode입니다. 예를 들어,
tail -f {file}
하나의 셸에서 실행한 다음rm {file}
다른 셸에서 실행합니다. 파일 시스템은 프로세스가 종료될 때 지울 수 있도록 이를 추적합니다.깔끔하게 분리되지 않으면 완전히 정상입니다. 이는 단순히 삭제되었지만 파일 시스템이 다시 마운트될 때 읽기 전용으로 열린 상태로 남아 있는 파일입니다. 이는 원인이 아니라 증상입니다.
inode 문제의 경우 이 쿼리를 실행하여 모든 디렉터리에서 사용되는 inode 수 목록을 가져옵니다.
for i in `find . -type d `; do echo `ls -a $i | wc -l` $i; done | sort -n