web-dev-qa-db-ja.com

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

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

25

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

stat 構造体は、リンクカウントをタイプ _nlink_t_ のフィールドに格納するため、このフィールドのタイプによってシステムの上限が決まります。しかし、そこまで到達できない可能性は十分にあります。32ビットの_nlink_t_が一般的ですが、多くのファイルシステムでは16ビットしかありません(Linuxソースの簡単なgrepは、ext [234]を示しています。 、NTFS、UFS、およびXFSは、カーネルデータ構造で16ビットリンクカウントを使用します。

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

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

ext4 source 643行目、struct ext4_inode-> __le16 i_links_count

11
shellholic

Linuxカーネルソース(* include/linux/ext3_fs.h *)のext3 inode構造のディスク形式を見て、リンク数が16ビット数であるとカウントしている

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

}

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

他のファイルシステムの値を確認していません。

10
Richm