Gibt es ein Limit für Hardlinks für eine Datei?

24

Gibt es eine Beschränkung der Anzahl von Hardlinks für eine Datei? Ist es irgendwo angegeben? Was sind sichere Grenzen für Linux? Und was für andere POSIX-Systeme?

Maciej Piechotka
quelle

Antworten:

16

Posix setzt voraus, dass das Betriebssystem das Konzept von Hardlinks versteht, jedoch nicht, dass Hardlinks unter bestimmten Umständen tatsächlich verwendet werden können. Sie können durch Aufrufen herausfinden, wie viele feste Links an einem bestimmten Speicherort zulässig sind (dies kann je nach Dateisystemtyp variieren) . Die minimale Grenze ( ) ist 8, aber dies ist ziemlich bedeutungslos, da trotzdem viele andere Fehler gemeldet werden können (Berechtigung verweigert, Datenträger voll, ...).pathconf(filename, _PC_LINK_MAX)_POSIX_LINK_MAXlink()

Die statStruktur speichert die Anzahl der Verknüpfungen in einem Feld vom Typ nlink_t, sodass der Typ dieses Felds eine Obergrenze für Ihr System darstellt. Aber es ist gut möglich, dass Sie nie so weit kommen werden: nlink_tIn vielen Dateisystemen ist es üblich, dass 32-Bit-Dateien, aber nur 16-Bit-Dateien verwendet werden (ein kurzer Blick in der Linux-Quelle zeigt, dass ext [234], NTFS, UFS und XFS verwendet 16-Bit-Verbindungszählungen in den Kerneldatenstrukturen.

Gilles 'SO - hör auf böse zu sein'
quelle
Als Ergänzung: BTRFS scheint eine 8-Bit-Verbindungsanzahl zu verwenden.
Maciej Piechotka
@ Eher 8-Bit-Linkanzahl für harte Links im selben Verzeichnis, aber insgesamt 32-Bit-Anzahl, laut diesem Blog-Beitrag /
Gilles 'SO - hör auf, böse zu sein',
11

Dies ist abhängig vom Dateisystem.

Das ext2 / 3/4-Limit liegt bei 65k-Links

ext4 Sourceleitung 643, struct ext4_inode->__le16 i_links_count

Shellholic
quelle
1
Das tatsächliche Limit ist 65534. Der letzte Zählereintrag wird für eine Transiente im Systemaufruf rename () verwendet.
Joshua
4
Noch weniger (in derselben Datei ext4.h): / * Maximale Anzahl von Links zu einer Datei * / #define EXT4_LINK_MAX 65000
PoltoS
10

Betrachtet man das Plattenformat der ext3-Inode-Struktur in den Linux-Kernel-Quellen (* include / linux / ext3_fs.h *), so werden die Links als 16-Bit-Zahl gezählt

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

}

Ich denke, das bedeutet, dass ein ext3-Dateisystem bis zu 65535 Links haben kann.

Ich habe die Werte für andere Dateisysteme nicht überprüft.

Richm
quelle
ext4 künstlich begrenzt es auf 65K Links
Alexander - Reinstate Monica