답변:
커널 API가 아닌 AFAIK. 그러한 인터페이스가 존재한다면, 수퍼 유저로 제한되어야하며, 그렇지 않으면 누구나 검색 액세스 권한이없는 디렉토리의 파일에 액세스 할 수 있습니다.
그러나 debugfs
파일 시스템에서 (마운트가 해제되면) 파일 시스템에서 블록 장치에 대한 쓰기 권한이 있다고 가정하여 사용할 수 있습니다.
debugfs -w / dev / block / device
( /dev/block/device
파일 시스템이 상주하는 실제 블록 장치로 교체하십시오 ).
그런 다음의 프롬프트에서 다음을 debugfs
입력하십시오.
능력치 < 123 >(앵글 괄호를 사용하여 123을 실제 inode 번호로 대체) 파일이 존재하는지 (inode의 링크 수가 0보다 큼) 디렉토리가 아닌지 확인하십시오.
모두 양호하면 다음을 입력하십시오.
ln < 123 > 경로 / to / newfile하드 링크를 만들려면 (경로는 파일 시스템의 루트에 상대적입니다). 뒤에 :
마일 < 123 >링크 수를 늘리려면 ( Enter현재 값에 1을 추가하려는 링크 수를 제외한 모든 필드에 대해 누르십시오 ).
사용 사례에 따라 다른 접근 방식은 먼저 모든 파일 후보를 하나의 디렉토리에 하드 링크 한 다음 특히 관심있는 파일을 하드 링크하여 하나의 디렉토리에 수집하는 것입니다.
와 같은
mkdir -pm 0700 by-inode/{0..999}
find <path> ! -type d -printf "%i/%p\0" |
while IFS=/ read -rd '' i n; do
ln "$n" "by-inode/$((i/1000))/$i"
done
(노드 번호가 모두 1,000,000 미만이라고 가정하면 필요한 경우 더 많은 디렉토리를 작성하십시오).
그 후, inode는 1000 단위로 그룹화되어 by-inode/
트리에 수집됩니다 . 거기에서 필요에 따라 연결할 수 있습니다.
그러나 파일을 삭제 <path>
해도 여분의 하드 링크로 인해 공간을 확보하지 못합니다.