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?
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:
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_MAX
link()
La stat
struttura 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_t
ma 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).
Questo dipende dal file system.
Il limite ext2 / 3/4 è 65k collegamenti
linea sorgente ext4 643, struct ext4_inode
->__le16 i_links_count
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.