Linux에서는 디렉토리를 하드링크하는 것이 불가능하다는 수백 가지 답변을 받기 전에는 예, 알고 있습니다.
(ext4)를 사용하여 파일 시스템을 확인한 후 문제의 파일이 Lost+fount에 나타 났고 e2fsck
통계에 따르면 /is/ 2개의 하드 링크가 있는 파일입니다.
# stat --format="File \"%n\" is a %F with %h hardlinks" ./#30934353
File "./#30934353" is a directory with 2 hardlinks
오. 포함된 파일을 건드리지 않고 어떻게 안전하게 삭제할 수 있나요? 시도해 보았는데 rm
모두 unlink
die 디렉토리가 비어 있지 않다고 합니다...
답변1
ext4 파일 시스템의 디렉토리에는 일반적으로 링크가 2개 이상 있습니다. 상위 디렉토리의 항목과 .
자체 항목입니다. 바라보다거기자세한 내용은.
하지만 파일 시스템이 일관되지 않으면 여러 위치에 연결된 디렉터리가 있을 가능성이 높으며 링크 수는 이를 반영하지 않습니다.
예를 들어, debugfs -w
(마운트 해제된 파일 시스템에서)을 사용하면 link a/b c/d
디렉토리에 대한 링크를 강제로 생성할 수 있습니다. 링크 수가 업데이트되지 않은 것을 확인할 수 있습니다( sif a/b links_count 3
업데이트해야 함).
$ ls -lid a/b c/d a/b/. c/d/.
12 drwxr-xr-x 2 chazelas chazelas 1024 May 14 08:37 a/b/
12 drwxr-xr-x 2 chazelas chazelas 1024 May 14 08:37 a/b/./
12 drwxr-xr-x 2 chazelas chazelas 1024 May 14 08:37 c/d/
12 drwxr-xr-x 2 chazelas chazelas 1024 May 14 08:37 c/d/./
3개의 링크(a를 가리키고, c를 가리키고, "."가 자신을 가리키고 있음)가 있어도 링크 수는 여전히 2입니다.
fsck
문제가 보고됩니다 .
Pass 2: Checking directory structure
Entry 'd' in /c (1282) is a link to directory /a/b (12).
Clear<y>?
따라서 fs가 방금 fsck를 경험한 경우에는 이런 일이 발생할 가능성이 없습니다.
이러한 링크 중 하나를 제거하려면 debugfs -w
다시 사용하여(파일 시스템을 마운트 해제한 후) unlink c/d
해당 링크에서 작업을 수행하거나 을 사용할 수 있습니다 fsck
. 에 여러 링크가 있는 경우 해당 링크의 항목을 확인하여( 사용 ) 어느 것이 링크인지 확인할 directory
수 있습니다. 올바른 것( 올바른 부모와 동일한 inode 번호를 갖습니다)...
debugfs
ls
..