Din pagina de manual ext4(5):
dir_nlink
În mod normal, ext4 permite unui inod să nu aibă mai mult de 65.000 de legături hard. Acest lucru se aplică fișierelor obișnuite, precum și directoarelor, ceea ce înseamnă că nu pot exista mai mult de 64.998 de sub-directoare într-un director (deoarece fiecare dintre intrările „.” și „..”, precum și intrarea de director pentru directorul din directorul său părinte contează ca o legătură rigidă). Această caracteristică ridică această limită determinând ext4 să utilizeze un număr de linkuri de 1 pentru a indica faptul că numărul de linkuri hard către un director nu este cunoscut atunci când numărul de linkuri poate depăși limita maximă.
mare_dir
Această caracteristică mărește limita numărului de fișiere per director prin creșterea dimensiunii maxime a directoarelor și, pentru directoarele b-tree cu hash (vezi dir_index), înălțimea maximă a arborelui b hashed folosit pentru a stoca intrările de director.
Bine, hai să aruncăm o privire dir_index
de asemenea.
dir_index
Utilizați arborele hash pentru a accelera căutările de nume în directoare mari. Această caracteristică este acceptată de sistemele de fișiere ext3 și ext4 și este ignorată de sistemele de fișiere ext2.
După înțelegerea mea, la pagina de manual:
- Când nu există niciun element într-un director, există 2 legături hard și anume
.
(directorul indicând spre sine) și ..
(aceasta indică către directorul părinte, dar linkul dur se referă la referința de la directorul părinte la director) și valoarea st_nlink
câmp în stat
structura este 2
. Când există 1 articol (să zicem, 1 fișier) într-un director, există 3 link-uri hard și st_nlink
spune 3
;
- Prin urmare, pentru a reprezenta numărul real de legături hard,
st_nlink
trebuie sa fie cel putin 2
. Ca urmare, valoarea 1
este eliberat să reprezinte altceva, în loc să aibă doar 1 hard link, ceea ce nu are sens;
- Dacă sistemul de fișiere ext4 este formatat fără
dir_nlink
, atunci st_nlink
nu poate fi mai mare decât 65000
, iar sistemul refuză să adauge mai multe elemente când se atinge limita (am citit despre faptul că nucleele moderne se pot porni automat dir_nlink
, dar să ignorăm acest lucru pentru simplitatea discuției);
- Dacă sistemul de fișiere ext4 este formatat cu
dir_nlink
, atunci când sunt mai mult decât 65000
elemente dintr-un director, valoarea 1
va fi scris la st_nlink
câmp pentru a indica „număr necunoscut de linkuri hard”. Clienții (codul care utilizează sistemul de fișiere ext4) trebuie să parcurgă lista de fișiere (blocul de date al directorului) pentru a număra numărul real de articole din interiorul acesteia;
mare_dir
crește dimensiunea maximă a directoarelor;
- Dacă
dir_index
este folosit, mare_dir
crește înălțimea maximă a arborelui B hashed.
Intrebarile mele
- Dacă
dir_nlink
este folosit singur, care este dimensiunea maximă a unui director? Credeam că este infinit atâta timp cât există suficiente blocuri de date pentru a stoca lista de fișiere din director, dar acum se pare că nu este.
- cred ca folosind
mare_dir
singur nu are sens, deoarece dimensiunea directorului este încă limitată de 65000
. Am dreptate?
- Dacă
mare_dir
este utilizat, care este dimensiunea maximă a unui director?
- Există vreun dezavantaj în utilizare
mare_dir
? Motivul pentru care am această întrebare este că în Ubuntu 20.04 LTS, dir_nlink
este setat implicit (vezi /etc/mke2fs.conf
, este în listă la [fs_types]
> ext4
> Caracteristici
), dar mare_dir
nu este.