ディレクトリへのハードリンクを削除する方法は?

ディレクトリへのハードリンクを削除する方法は?

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すべてunlinkdieディレクトリが空ではないとします...

答え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を経験したばかりの場合、これは起こりそうにありません。

これらのリンクの1つを削除するには、再利用debugfs -wして(ファイルシステムをアンマウントした後)、そのunlink c/dリンクで操作を実行するか、またはを使用できますfsck。に複数のリンクがある場合は、そのリンクの項目を確認して(使用)、どちらがリンクかを確認directoryできます。正しいもの(正しい親と同じinode番号を持つ)。..debugfs ls..

関連情報