Informazioni sulle dimensioni delle directory in Azure NetApp Files
Quando un file viene creato in una directory, una voce viene aggiunta a un file di indice nascosto all'interno del volume di Azure NetApp Files. Questo file di indice consente di tenere traccia degli inodi esistenti in una directory e consente di accelerare le richieste di ricerca per le directory con un numero elevato di file. Man mano che le voci vengono aggiunte a questo file, le dimensioni del file aumentano (ma non diminuiscono mai) a una velocità di circa 512 byte per voce a seconda della lunghezza del nome file. I nomi di file più lunghi aggiungono più dimensioni al file. I collegamenti simbolici aggiungono anche voci a questo file. Questo concetto è noto come dimensione della directory, che è un elemento comune in tutti i file system basati su Linux. Le dimensioni della directory non sono il numero totale massimo di file in un singolo volume di Azure NetApp Files. Determinato dal maxfiles
valore .
Per impostazione predefinita, quando viene creata una nuova directory, utilizza 4 KiB (4.096 byte) o otto blocchi a 512 byte. È possibile visualizzare le dimensioni di una directory appena creata da un client Linux usando il comando stat.
# mkdir dirsize
# stat dirsize
File: ‘dirsize’
Size: 4096 Blocks: 8 IO Block: 32768 directory
Le dimensioni della directory sono specifiche di una singola directory e non combinano dimensioni. Ad esempio, se sono presenti 10 directory in un volume, ognuno può avvicinarsi al limite di dimensioni della directory 320-MiB in un singolo volume.
Determinare se una directory sta raggiungendo le dimensioni limite
Per una directory 320-MiB, il numero di blocchi è 655360, con ogni dimensione del blocco pari a 512 byte. Ovvero 320x1024x1024/512. Questo numero si traduce in circa 4-5 milioni di file al massimo per una directory 320-MiB. Tuttavia, il numero effettivo di file massimi potrebbe essere inferiore, a seconda di fattori come il numero di file con caratteri non ASCII presenti nella directory.
È possibile usare il comando stat
da un client per verificare se una directory sta raggiungendo il limite massimo di dimensioni per i metadati della directory (320 MB). Se viene raggiunto il limite massimo di dimensioni relativo a una singola directory per Azure NetApp Files, si verifica l'errore No space left on device
.
Per una directory da 320 MB, il numero di blocchi è 655.360, con ogni dimensione di blocco pari a 512 byte (ovvero: 320 x 1024 x 1024/512). Questo numero si traduce in un massimo di circa 4 milioni di file per una directory da 320 MB. Tuttavia, il numero effettivo di file massimi potrebbe essere inferiore, a seconda di fattori come il numero di file con caratteri non ASCII presenti nella directory. Per informazioni su come monitorare maxdirsize, vedere Monitoraggio maxdirsize
di .
Considerazioni sulle dimensioni della directory
Quando si tratta di un ambiente con conteggio di file elevato, prendere in considerazione le raccomandazioni seguenti:
- I volumi di Azure NetApp Files supportano fino a 320 MiB per le dimensioni della directory. Questo valore non può essere aumentato.
- Dopo aver superato le dimensioni della directory di un volume, i client visualizzano un errore di spazio insufficiente anche se nel volume è disponibile spazio libero.
- Per i volumi regolari, una dimensione di directory MiB di 320 equivale a circa 4-5 milioni di file in una singola directory. Questo valore dipende dalla lunghezza del nome file.
- I volumi di grandi dimensioni hanno un'architettura diversa rispetto ai volumi normali.
- Un numero elevato di file in una singola directory può presentare problemi di prestazioni durante la ricerca. Quando possibile, limitare le dimensioni totali di una singola directory a 2 MiB (circa 27.000 file) quando sono necessarie ricerche frequenti.
- Se sono necessari più file in una singola directory, regolare le aspettative delle prestazioni della ricerca di conseguenza. Anche se Azure NetApp Files indicizza le liste di file di directory per le prestazioni, le ricerche possono richiedere del tempo con un numero elevato di file.
- Quando si progetta il file system, evitare layout di directory flat. Per informazioni sui diversi approcci ai layout di directory, vedere Informazioni sui layout di directory.
- Per risolvere i problemi in cui le dimensioni della directory sono state superate e non è possibile creare nuovi file, eliminare o spostare i file dalla directory pertinente.
Informazioni sui layout di directory
Il maxdirsize
valore può creare problemi quando si usano strutture di directory flat, in cui una singola cartella contiene milioni di file a un singolo livello. Le strutture di cartelle in cui i file, le cartelle e le sottocartelle sono interspersi hanno un impatto basso su maxdirsize
. Esistono diverse metodologie di struttura di directory.
Una struttura di directory flat è una singola directory con molti file sotto la stessa directory.
Una struttura di directory wide contiene molte directory di primo livello con file distribuiti in tutte le directory.
Una struttura di directory profonda contiene meno directory di primo livello con molte sottodirectory. Sebbene questa struttura fornisca un minor numero di file per cartella, le lunghezze del percorso del file possono diventare un problema se i layout di directory sono troppo profondi e i percorsi di file diventano troppo lunghi. Per informazioni dettagliate sulle lunghezze del percorso del file, vedere Informazioni sulle lunghezze dei percorsi dei file in Azure NetApp Files.
Impatto delle strutture di directory flat in Azure NetApp Files
Le strutture di directory flat (molti file in una o poche directory) hanno un effetto negativo su un'ampia gamma di file system, volumi di Azure NetApp File o altri. I potenziali problemi includono:
- Utilizzo elevato della memoria
- Utilizzo CPU
- Prestazioni/latenza di rete (in particolare durante query di massa di file,
GETATTR
operazioni,READDIR
operazioni)
A causa della progettazione di volumi di grandi dimensioni di Azure NetApp Files, l'impatto di maxdirsize
è univoco. Il volume maxdirsize
di Azure NetApp Files è influenzato in modo univoco a causa della progettazione. A differenza di un volume normale, un volume di grandi dimensioni usa collegamenti rigidi remoti all'interno di Azure NetApp Files per reindirizzare il traffico tra dispositivi di archiviazione diversi per offrire maggiore scalabilità e prestazioni. Quando si usano directory flat, esiste un rapporto più elevato tra collegamenti remoti remoti interni e file locali. Questi collegamenti rigidi remoti vengono conteggiati rispetto al valore totale maxdirsize
, quindi un volume di grandi dimensioni potrebbe avvicinarsi al limite maxdirsize
più veloce rispetto a un volume normale.
Ad esempio, se una singola directory ha milioni di file e genera circa l'85% di collegamenti rigidi remoti per il file system, è possibile prevedere maxdirsize
di essere esaurito quasi il doppio della quantità come volume regolare.
Per ottenere risultati ottimali con le dimensioni della directory in Azure NetApp Files:
- Evitare strutture di directory flat in Azure NetApp Files. Le strutture di directory estese o profonde funzionano meglio, purché la lunghezza del percorso del file o della cartella non superi gli standard del protocollo NAS.
- Se le strutture di directory flat non sono inevitabili, monitorare l'oggetto
maxdirsize
per le directory.
Monitor maxdirsize
Per una singola directory, usare il stat
comando per trovare le dimensioni della directory.
# stat /mnt/dir_11/c5
Anche se il stat
comando può essere usato per controllare le dimensioni della directory di una directory specifica, potrebbe non essere così efficiente eseguirlo singolarmente in una singola directory. Per visualizzare un elenco delle dimensioni massime delle directory ordinate dal più grande al più piccolo, il comando seguente fornisce che, omettendo le directory snapshot dalla query.
# find /mnt -name .snapshot -prune -o -type d -ls -links 2 -prune | sort -rn -k 7 | head | awk '{print $2 " " $11}' | sort -rn
Nota
Le dimensioni della directory segnalate dal comando stat sono in byte. Le dimensioni segnalate nel comando find si trovano in KiB.
Esempio
# stat /mnt/dir_11/c5
File: ‘/mnt/dir_11/c5’
Size: 322396160 Blocks: 632168 IO Block: 32768 directory
# find /mnt -name .snapshot -prune -o -type d -ls -links 2 -prune | sort -rn -k 7 | head | awk '{print $2 " " $11}' | sort -rn
316084 /mnt/dir_11/c5
3792 /mnt/dir_19
3792 /mnt/dir_16
Nella precedente, le dimensioni della directory di /mnt/dir_11/c5
sono pari a 316.084 KiB (308,6 MiB), che si avvicina al limite di 320-MiB. Ciò equivale a circa 4,1 milioni di file.
# ls /mnt/dir_11/c5 | wc -l
4171624
In questo caso, prendere in considerazione azioni correttive, ad esempio lo spostamento o l'eliminazione di file.