Esiste un limite di hardlink per un file?


24

Esiste un limite al numero di hardlink per un file? È specificato ovunque? Quali sono i limiti di sicurezza per Linux? E per gli altri sistemi POSIX?

Risposte:


16

Posix richiede che il sistema operativo comprenda il concetto di hard link ma non che i hard link possano effettivamente essere utilizzati in qualsiasi circostanza particolare. Puoi scoprire quanti hard link sono permessi in una particolare posizione (questo può variare in base al tipo di filesystem) chiamando . Il limite minimo ( ) è 8, ma questo è piuttosto insignificante in quanto può segnalare comunque molti altri errori (permesso negato, disco pieno, ...).pathconf(filename, _PC_LINK_MAX)_POSIX_LINK_MAXlink()

La statstruttura memorizza il conteggio dei collegamenti in un campo di tipo nlink_t, quindi il tipo di questo campo fornisce un limite superiore al sistema. Ma c'è una buona possibilità che non sarai mai in grado di arrivare così lontano: è comune avere un 32 bit nlink_tma solo 16 bit in molti filesystem (un rapido grep nel sorgente Linux mostra ext [234], NTFS, UFS e XFS utilizza conteggi dei collegamenti a 16 bit nelle strutture di dati del kernel).


Come supplemento: BTRFS sembra utilizzare il conteggio dei collegamenti a 8 bit.
Maciej Piechotka,

@Piuttosto, il conteggio dei collegamenti a 8 bit per i collegamenti reali nella stessa directory, ma i conteggi a 32 bit in totale, secondo questo post del blog /
SO di Gilles

11

Questo dipende dal file system.

Il limite ext2 / 3/4 è 65k collegamenti

linea sorgente ext4 643, struct ext4_inode->__le16 i_links_count


1
Il limite effettivo è 65534. L'ultima voce del contatore viene utilizzata per un transitorio nella chiamata di sistema rename ().
Joshua,

4
Ancora meno (trovato nello stesso ext4.h): / * Conteggio massimo dei collegamenti a un file * / #define EXT4_LINK_MAX 65000
PoltoS

10

Guardando il formato del disco della struttura dell'inode ext3 nei sorgenti del kernel di linux (* include / linux / ext3_fs.h *) che elenca il conteggio dei collegamenti come un numero di 16 bit

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

}

Immagino che ciò significhi che un filesystem ext3 può avere fino a 65535 collegamenti.

Non ho controllato i valori per altri filesystem.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.