2011-04-12 9 views
2

현재 내 데이터는 모든 파일이 처음 생성되거나 전송되는 캐시 디렉토리가있는 볼륨으로 구성됩니다. 그 후에 하위 디렉토리에 캐시에있는 파일에 하드 링크 된 파일이 들어있는 볼륨에 적합한 디렉토리가 있습니다. 동일한 inode (파일)가 여러 디렉토리에서 여러 번 하드 링크 될 수 있도록이 작업이 수행됩니다.링크 수가 2 일 때 inode를 완전히 제거 할 수 있습니까?

이제 볼륨을 정리하려고 할 때 캐시가 아닌 dirs를 반복적으로 통과하고 특정 기준에 따라 파일의 연결을 해제합니다 (기본적으로 캐시 항목의 inode 수를 1 줄입니다). 내가 마지막 하드 링크를 삭제할 때 캐시 항목을 직접 삭제할 수있는 방법이 있습니까 (즉, 2에서 1로 카운트 다운 됨). 이 방법을 사용하면 전체 캐시 디렉토리를 통해 수동으로 구문 분석 할 필요가 없으며 링크 카운트가 1 인 모든 inode를 지울 수 있습니다.

링크 해제/제거 기능을 통해 특정 항목을 찾을 수 없습니다. 용도. 내부적으로 처리하는 퍼지 알고리즘이 있나요? 구현하려고 시도 할 수 있습니다.

이 문제에 대한 도움을 주시면 매우 감사하겠습니다. 즉각적인 회신을 기대합니다.

답변

1

아니요, 상자에서 원하는 것을 수행하는 것은 없습니다.

하드 링크의 링크를 해제하고 링크 카운트가 1임을 알면 삭제가 유용 할 수 있습니다. 그 시점에서 inode는 페이지 캐시에 있어야하기 때문입니다. 이것은 물론 캐시 디렉토리에있는 파일의 이름을 아는 것에 달려 있습니다.

+0

이것은 링크 파일 수가 1로 감소했음을 평가하기 위해 캐시 파일에서 별도의 통계를 피하기 때문에 매우 흥미로운 것으로 보입니다. 하드 링크를 해제 할 시점에서 캐시 항목 이름을 알면 어떻게 페이지 캐시에서 캐시 항목 (본질적으로)에 관한 정보를 유도 할 수 있습니까? 감사합니다. 모든 도움을 주셔서 감사합니다. – Nishank

2

나는 쉘에서 모든 하드 링크를 삭제하는 방법을 알려주는 this과 다른 몇 곳을 보았습니다. (find -samefile과 각 파일의 remove를 사용하십시오). 일부 사람들이 눈살을 찌푸 리라도 시스템을 통해 호출 할 수 있습니다.)