Y a-t-il une limite de liens physiques pour un fichier?


24

Y a-t-il une limite de nombre de liens physiques pour un fichier? Est-il spécifié quelque part? Quelles sont les limites de sécurité pour Linux? Et pour les autres systèmes POSIX?

Réponses:


16

Posix exige que le système d'exploitation comprenne le concept de liens durs mais pas que les liens durs puissent réellement être utilisés dans des circonstances particulières. Vous pouvez savoir combien de liens physiques sont autorisés à un emplacement particulier (cela peut varier selon le type de système de fichiers) en appelant . La limite minimale ( ) est de 8, mais cela n'a pas beaucoup de sens car il peut quand même signaler de nombreuses autres erreurs (autorisation refusée, disque plein,…).pathconf(filename, _PC_LINK_MAX)_POSIX_LINK_MAXlink()

La statstructure stocke le nombre de liens dans un champ de type nlink_t, donc le type de ce champ donne une limite supérieure sur votre système. Mais il y a de fortes chances que vous ne puissiez jamais arriver aussi loin: il est courant d'avoir un 32 bits nlink_tmais seulement 16 bits dans de nombreux systèmes de fichiers (un rapide grep dans la source Linux montre que ext [234], NTFS, UFS et XFS utilise un nombre de liaisons 16 bits dans les structures de données du noyau).


En complément: BTRFS semble utiliser un nombre de liaisons de 8 bits.
Maciej Piechotka

@Plutôt, le nombre de liens 8 bits pour les liens durs dans le même répertoire, mais le nombre 32 bits au total, selon ce billet de blog /
Gilles 'SO- arrête d'être méchant'

11

Cela dépend du système de fichiers.

ext2 / 3/4 limite est 65k liens

ligne source ext4 643, struct ext4_inode->__le16 i_links_count


1
La limite réelle est 65534. La dernière entrée de compteur est utilisée pour un transitoire dans l'appel système rename ().
Joshua

4
Encore moins (trouvé dans le même ext4.h): / * Nombre maximal de liens vers un fichier * / #define EXT4_LINK_MAX 65000
PoltoS

10

Examen du format de disque de la structure d'inode ext3 dans les sources du noyau linux (* include / linux / ext3_fs.h *) qui répertorie le nombre de liens comme étant un nombre de 16 bits

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

}

Je suppose que cela signifie qu'un système de fichiers ext3 peut avoir jusqu'à 65535 liens.

Je n'ai pas vérifié les valeurs des autres systèmes de fichiers.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.