Linux에서 전체 파일 시스템을 탐색하지 않고 특정 inode의 모든 하드 링크 경로를 열거하는 방법은 무엇입니까?

Linux에서 전체 파일 시스템을 탐색하지 않고 특정 inode의 모든 하드 링크 경로를 열거하는 방법은 무엇입니까?

동일한 inode 번호를 가진 모든 경로를 알고 싶습니다.ls - 동일한 inode 번호를 가진 모든 파일을 나열하시겠습니까? - Unix & Linux 스택 교환그러나 대답은 find유틸리티를 사용하여 inode가 포함된 전체 파일 시스템을 탐색하는 것과 관련이 있으며, 이는 파일 수가 많은 파일 시스템에는 실용적이지 않습니다.

하드 링크 정보는 파일 시스템의 특정 데이터 구조에 저장되어야 하는데 파일 시스템별 유틸리티를 사용하여 이러한 정보를 직접 검색할 수 있습니까?

답변1

이는 inode 자체에 연결된 모든 개체의 위치가 포함된 경우에만 가능합니다. 파일 중 하나가 디렉터리 구조에서 이동되는 경우 inode 자체에 대한 몇 가지 추가 업데이트(및 유효성 검사 단계)가 필요하기 때문에 이는 실용적이지 않습니다. inode에 실제 파일 경로가 있으면 경로 변경이나 이름 변경을 보상하기 위해 크기를 동적으로 변경해야 하고 inode 크기가 크게 달라질 수 있으므로 inode에 더 많은 오버헤드가 발생함을 의미합니다.

대신 inode에는 링크 수만 포함되어 있으며 어디로 가는지 또는 어디에서 오는지는 포함되지 않습니다. 이 링크 수는 단일 32비트 필드일 수 있으며 inode 크기가 변경되지 않습니다. 전체 항목을 로드하고 수정한 다음 다른 위치에 다시 저장해야 하는 대신 "제자리에서" 업데이트할 수 있습니다.

inode 번호가 나열되는 유일한 위치는 디렉터리 개체 자체입니다. 디렉토리는 본질적으로 다른 파일을 함께 연결하는 특수 파일이라는 점을 명심하십시오. 이렇게 하면 파일 이동의 경우 링크 수가 동일하게 유지되고 몇 번의 디렉터리 업데이트만 수행됩니다. 삭제 또는 추가의 경우 디렉터리 변경 및 inode에 대한 사소한 업데이트입니다.

결과적으로 유일한 방법은 발견한 대로 해당 inode의 발생을 검색하면서 전체 파일 시스템을 탐색하는 것입니다.

관련 정보