1つのファイルにハードリンクの制限はありますか?


24

1つのファイルのハードリンクの数に制限はありますか?どこでも指定されていますか?Linuxの安全な制限は何ですか?そして、他のPOSIXシステムについてはどうでしょうか?

回答:


16

Posixでは、オペレーティングシステムがハードリンクの概念を理解している必要がありますが、特定の状況でハードリンクを実際に使用できることは必要ではありません。を呼び出すことで、特定の場所で許可されるハードリンクの数(ファイルシステムの種類によって異なる場合があります)を確認できます。下限は、()8であるが、これはかなりのように無意味である(許可が...、フルディスクを拒否された)とにかく、他の多くのエラーを報告することができます。pathconf(filename, _PC_LINK_MAX)_POSIX_LINK_MAXlink()

stat構造タイプのフィールドに格納リンク数はnlink_t、ので、このフィールドの種類は、システム上の上限を与えます。しかし、そこまで到達できない可能性は十分にあります:nlink_t多くのファイルシステムでは32ビットで16ビットしか持たないのが一般的です(Linuxソースの簡単なgrepは、ext [234]、NTFS、UFS、 XFSは、カーネルデータ構造で16ビットのリンクカウントを使用します)。


補足として:BTRFSは8ビットのリンクカウントを使用しているようです。
マチェイピエチョトカ

よる@Rather、同じディレクトリ内のハードリンク用の8ビットのリンク数が、合計で32ビット・カウント、このブログの記事 /
ジル「SO-停止されて悪」

11

これはファイルシステムに依存します。

ext2 / 3/4の制限は65kリンクです

ext4ソース行643、struct ext4_inode->__le16 i_links_count


1
実際の制限は65534です。最後のカウンタエントリは、rename()システムコールのトランジェントに使用されます。
ジョシュア

4
さらに少ない(同じext4.hにある):/ *ファイルへのリンクの最大数* / #define EXT4_LINK_MAX 65000
PoltoS

10

Linuxカーネルソース(* include / linux / ext3_fs.h *)のext3 iノード構造のディスク形式を調べて、リンク数が16ビット数としてリストされている

struct ext3_inode {
    ... snip ...
    __le16  i_links_count;  /* Links count */

}

これは、ext3ファイルシステムが最大65535のリンクを持つことができることを意味すると思います。

他のファイルシステムの値はチェックしていません。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.